├── 01.0.md ├── 01.1.md ├── 01.2.md ├── 01.3.md ├── 01.4.md ├── 01.5.md ├── 02.0.md ├── 02.1.md ├── README.md ├── images ├── 1.1.mac.png ├── 1.3.go.png ├── 1.4.eclipse1.png ├── 1.4.eclipse2.png ├── 1.4.eclipse3.png ├── 1.4.eclipse4.png ├── 1.4.eclipse5.png ├── 1.4.eclipse6.png ├── 1.4.emacs.png ├── 1.4.idea1.png ├── 1.4.idea2.png ├── 1.4.idea3.png ├── 1.4.idea4.png ├── 1.4.idea5.png ├── 1.4.liteide.png ├── 1.4.sublime1.png ├── 1.4.sublime2.png ├── 1.4.sublime3.png ├── 1.4.sublime4.png └── 1.4.vim.png ├── preface.md └── ref.md /01.0.md: -------------------------------------------------------------------------------- 1 | # 1. Настройка Gо окружения 2 | 3 | Добро пожаловать в мир Go, давайте же начнем его изучать! 4 | 5 | Go это быстрокомпилируемый, многопоточный язык программирования. Он имеет следующие преимущества: 6 | 7 | - Компиляция крупных проектов за несколько секунд. 8 | - Предлагает модель разработки, которая позволяет избегнуть сложности, вызванные использованием заголовочных файлов в С/С++. 9 | - Является статическим языком, который не имеет уровней в собственной иерархии типов, так что пользователям не нужно тратить много времени на решение отношений между типами. Это очень похоже на легкий объектно-ориентированный язык. 10 | - Поддерживает сборку мусора (Garbage Collector), которая обеспечивает базовую поддержку параллелизма и связи. 11 | - Разработан для многоядерных компьютеров. 12 | 13 | Go - компилируемый язык. Он комбинирует эффективность динамических или интерпретируемых языков с безопасностью статических языков. Go будет языком выбора для современных многоядерных компьютеров и сетей. Но для достижения этой цели есть некоторые проблемы, которые должны быть решены в архитектуре самого языка, например паралеллизм, эффективный процесс сборки мусора и богатая, выразительная, но в то же время легкая система типов. Однако спустя долгое время, не появилось ни одного инструмента или пакета, которые решали бы эти проблемы в корне; отсюда родилась мотивация в развитии языка Go. 14 | 15 | В этом разделе я покажу, как установить и настроить Go окружение. 16 | 17 | ## Ссылки 18 | 19 | - [Содержание](preface.md) 20 | - Следующая секция: [Установка](01.1.md) 21 | -------------------------------------------------------------------------------- /01.1.md: -------------------------------------------------------------------------------- 1 | # 1.1 Установка 2 | 3 | ## Три способа установки Go 4 | 5 | Хоть существует множество способов установки и настройки Go окружения на Вашем компьютере, Вы можете выбрать тот, который вам по душе. Вот три основных способа установки: 6 | 7 | 8 | - Официальные пакеты инсталляции. 9 | - Команда Go предлагает установочные пакеты для Windows, Linux, Mac и других операционных систем. Это простейший способ начать! 10 | - Установка из исходного кода. 11 | - Такой способ популярен среди Unix-пользователей. 12 | - Использование сторонних инструментов. 13 | - На данный момент существует множество сторонних инструментов для установки, наприме apt-get в Ubuntu или homebrew в Mac. 14 | 15 | В случае, когда вам необходимо иметь на своем компьютере более одной версии Go, обратите внимание на [GVM](https://github.com/moovweb/gvm). это лучший инструмент, который мне встречался. Если же Вы предпочитаете другие инструменты, Вы должны знать, как решить проблему самостоятельно. 16 | 17 | ## Установка из исходного кода. 18 | 19 | Так как некоторые части Go написаны на Plan 9 C и AT&T ассемблере, просто необходимо установить компилятор C, прежде чем продолжить. 20 | 21 | На Mac, установив Xcode, Вы сразу же будете иметь и компилятор. 22 | 23 | На Unix-подобных системах, нужно установить gcc или подобный компилятор. Например, используя менеджер пакетов apt-get, включенный в дистрибютив Ubuntu, можно установить компилятор вот так: 24 | `sudo apt-get install gcc libc6-dev` 25 | 26 | На Windows, Вам нужно установить MinGW, чтобы получить gcc. Не забудьте настроить переменные окружения, чтобы избежать лишних проблем.( ***Комментарий переводчика: Если Вы используете 64-bit версию Windows, лучше установить 64-bit версию MinGW*** ) 27 | 28 | Команда Go использует [Mercurial](http://mercurial.selenic.com/downloads/) для хранения и управления исходными кодами, потому Вам нужно установить соответствующий инструмент, перед тем, как загружать исходные коды Go. 29 | 30 | После этого выполните следующие команды в своем терминале, чтобы загрузить исходники и начать компиляцию.( ***Коды будут скопированы в текущую папку, потому я рекомендую переключиться в нее заранее. Загрузка исходного кода может занять некоторое время.*** ) 31 | 32 | hg clone -u release https://code.google.com/p/go 33 | cd go/src 34 | ./all.bash 35 | 36 | Итогом успешной установки будет сообщение "ALL TESTS PASSED." 37 | 38 | На Windows, подобного результата можно достичь, запустив `all.bat`. 39 | 40 | Если Вы используете Windows, установочный пакет автоматически установит нужные переменные окружения. В Unix-подобных системах вам придется установить эти переменные вручную, например так ( ***Если ваша версия Go выше чем 1.0, необходимости в установке переменной `$GOBIN` нету, так как она автоматически будет установлена в значение `$GOROOT/bin`, о чем мы поговорим в следующей секции***): 41 | 42 | export GOROOT=$HOME/go 43 | export GOBIN=$GOROOT/bin 44 | export PATH=$PATH:$GOROOT/bin 45 | 46 | Если Вы видите следующую информацию у себя на экране после выполнения команды go, значит все настроено верно. 47 | 48 | ![](images/1.1.mac.png?raw=true) 49 | 50 | `Изображение 1.1 Информация, выведенная после установки из исходного кода` 51 | 52 | Как только вы увидите информацию об использовании, это означает, что Go успешно установился на ваш компьютер. Однако, если вам попадется `no such command`, проверите, содержит ли ваша переменная окружения `$PATH` путь до папки с Go. 53 | 54 | ## Использование стандартного установочного пакета. 55 | 56 | Go имеет установочные пакеты практически для любой операционной системы, позволяющие установить и настроить все практически в пару кликов мышкой. Эти пакеты по умолчанию установят Go в папку `/usr/local/go` (`c:\Go` на Windows). Конечно, Вы можете изменить папку, но тогда вам придется изменить переменные окружения так, как я показал выше. 57 | 58 | ### Как узнать разрядность операционной системы: 32-bit или 64-bit? 59 | 60 | Наши следующие действия зависят от Вашей операционной системы, потому нам необходимо проверить разрядность системы перед загрузкой установочного пакета. 61 | 62 | Если Вы используете Windows, нажмите `Win+R`, запустите коммандную строку, введите `systeminfo` и в течение нескольких секунд вы получите информацию о системе. Найдите строку `system type`, если в ней Вы видите `x64-based PC`, то это значит, что у Вас 64-bit операционная система, иначе она 32-bit. 63 | 64 | Если вы пользователь Mac OS, я рекомендую загрузить 64-bit версию, так как Go не будет долго поддерживать 32-bit процессоры на Mac OS. 65 | 66 | Пользователи Linux могут набрать `uname -a` в своем терминале, чтобы увидеть системную информацию. 67 | 64-bit система будет отображаться как-то так: 68 | 69 | x86_64 x86_64 x86_64 GNU/Linux 70 | // некоторые машины отображают Ubuntu 10.04 вот так: 71 | x86_64 GNU/Linux 72 | 73 | 32-bit система будет отображаться как-то так: 74 | 75 | i686 i686 i386 GNU/Linux 76 | 77 | ### Mac 78 | 79 | Перейдите на [страницу загрузки](http://code.google.com/p/go/downloads/list), выберите `go1.0.3.darwin-386.pkg` для 32-bit системы или `go1.0.3.darwin-amd64.pkg` для 64-bit системы, соответственно. По завершении установки`~/go/bin` будет добавлен в `$PATH`. После установки откройте терминал и наберите `go`. Вы должны увидеть информацию, как на рисунке 1.1. 80 | 81 | ### Linux 82 | 83 | Перейдите на [страницу загрузки](http://code.google.com/p/go/downloads/list), выберите `go1.0.3.linux-386.tar.gz` для 32-bit системы или `go1.0.3.linux-amd64.tar.gz` для 64-bit системы. Предположим, что Вы хотите установить Go в некоторую папку `$GO_INSTALL_DIR`, для этого распакуйте `tar.gz` в нужную папку командой `tar zxvf go1.0.3.linux-amd64.tar.gz -C $GO_INSTALL_DIR`. Затем добавьте папку в `$PATH` командой `export PATH=$PATH:$GO_INSTALL_DIR/go/bin`. Теперь откройте терминал и наберите `go`. Вы должны увидеть информацию, как на рисунке 1.1. 84 | 85 | ### Windows 86 | 87 | Перейдите на [страницу загрузки](http://code.google.com/p/go/downloads/list), выберите `go1.0.3.windows-386.msi` для 32-bit системы или `go1.0.3.windows-amd64.msi` для 64-bit системы. По завершении установки `c:/go/bin` будет добавлен в `path`. Теперь откройте командную строку и наберите `go`. Вы должны увидеть информацию, как на рисунке 1.1. 88 | 89 | ## Использование сторонних инструментов. 90 | 91 | ### GVM 92 | 93 | GVM - сторонний инструмент контроля версий Go, похожий на rvm в Ruby. Он достаточно прост в своем использовании. Чтобы установить gvm, введите следующее в своем терминале: 94 | 95 | bash < <(curl -s https://raw.github.com/moovweb/gvm/master/binscripts/gvm-installer) 96 | 97 | Затем мы устанавливаем Go следующими командами: 98 | 99 | gvm install go1.0.3 100 | gvm use go1.0.3 101 | 102 | После совершения всех необходимых действий, Go готов к использованию. 103 | 104 | ### apt-get 105 | 106 | Ubuntu наиболее популярная версия Linux. Система использует `apt-get` для управления пакетами. Go можно установить, используя следующие команды. 107 | 108 | sudo add-apt-repository ppa:gophers/go 109 | sudo apt-get update 110 | sudo apt-get install golang-stable 111 | 112 | ### Homebrew 113 | 114 | Homebrew используется на Mac для управления ПО. Просто введите эту команду для установки Go. 115 | 116 | brew install go 117 | 118 | ## Ссылки 119 | 120 | - [Содержание](preface.md) 121 | - Предыдущая секция: [Настройка Go окружения](01.0.md) 122 | - Следующая секция: [$GOPATH и рабочее пространство](01.2.md) 123 | -------------------------------------------------------------------------------- /01.2.md: -------------------------------------------------------------------------------- 1 | # 1.2 $GOPATH и рабочее пространство 2 | 3 | ## $GOPATH 4 | 5 | Работа всех команд Go основана на использовании одной главной и важной переменной окружения под названием `$GOPATH`. Обратите внимание, что переменная `$GOROOT`, где установлен Go, не имеет к ней никакого отношения. Эта переменная указывает на расположение рабочей папки или рабочего пространства на вашем компьютере. (Я использую этот путь на своем компьютере, а если вы не имеете такую ​​же структуру каталогов, пожалуйста, настройте ее самостоятельно.) 6 | 7 | В Unix-подобных системах, значение `GOPATH` устанавливается вот так: 8 | 9 | export GOPATH=/home/apple/mygo 10 | 11 | В Windows Вам нужно создать новую переменную окружения под названием GOPATH, затем установить ее значение в `c:\mygo`( ***Это значение может быть другим в зависимости от того, где расположено Ваше рабочее пространство*** ) 12 | 13 | Никто не запрещает использовать более одной папки(рабочего пространства) в `$GOPATH`, но не забывайте использовать символ-разделитель `:`(`;` в Windows) для их разделения между собой. Заметим, что `go get` будет сохранять контент в первую папку, указанную в $GOPATH. 14 | 15 | В папке $GOPATH должны быть такие подпапки: 16 | 17 | - `src` для исходных файлов с расширением `.go, .c, .g, .s`. 18 | - `pkg` для скомпилированных файлов с расширением `.a`. 19 | - `bin` для исполняемых файлов 20 | 21 | В своей книге я использую папку `mygo` как единственную в `$GOPATH`. 22 | 23 | ## Пакеты 24 | 25 | Создайте папку и файл `$GOPATH/src/mymath/sqrt.go` (`mymath` это имя пакета) ( ***Автор использует `mymath` в качестве имени пакета, а потому папка с исходным кодом имеет такое же название***) 26 | 27 | Каждый раз создавая пакет, Вам нужно создавать новую подпапку в папке`src`, причем ее название обычно совпадает с названием пакета, который будет использоваться. Вы можете создать многоуровневую структуру каталогов, если конечно вам это необходимо. Например, создав папку `$GOPATH/src/github.com/astaxie/beedb`, путь к вашему пакету будет `github.com/astaxie/beedb`. А названием пакета будет последняя папка в пути, в данном примере это `beedb`. 28 | 29 | А пока выполните следующие комнады. ( ***Автор возвращается к примеру*** ) 30 | 31 | cd $GOPATH/src 32 | mkdir mymath 33 | 34 | Создайте новый исходный файл под названием `sqrt.go`, вот примерно с таким содержимым: 35 | 36 | // Исходный код в файле $GOPATH/src/mymath/sqrt.go 37 | package mymath 38 | 39 | func Sqrt(x float64) float64 { 40 | z := 0.0 41 | for i := 0; i < 1000; i++ { 42 | z -= (z*z - x) / (2 * x) 43 | } 44 | return z 45 | } 46 | 47 | На данный момент папка пакета создана, а работа с кодом завершена. Я рекомендовал бы вам сохранить имя пакета и название папки, содержащей исходные коды пакета. 48 | 49 | ## Компиляция пакетов 50 | 51 | Мы уже создали свой пакет, однако нам надо бы научиться его компилировать. Существует два способа сделать это: 52 | 53 | - Перейдите из вашей рабочей папки в папку пакета, а затем выполните `go install`. 54 | - Выполните предыдущую команду, указав название файла, например `go install mymath`. 55 | 56 | После компиляции мы можем открыть следующую папку: 57 | 58 | cd $GOPATH/pkg/${GOOS}_${GOARCH} 59 | // вы увидите, что был создан вот такой файл 60 | mymath.a 61 | 62 | Файл с суффиксом `.a` скомпилированная бинарная версия нашего пакета. 63 | 64 | Но чтобы этот пакет принес нам пользу, нужно создать приложение, которое будет его использовать. 65 | 66 | Создайте новую папку для пакета приложения под названием `mathapp`. 67 | 68 | cd $GOPATH/src 69 | mkdir mathapp 70 | cd mathapp 71 | vim main.go 72 | 73 | Код: 74 | 75 | //$GOPATH/src/mathapp/main.go 76 | package main 77 | 78 | import ( 79 | "mymath" 80 | "fmt" 81 | ) 82 | 83 | func main() { 84 | fmt.Printf("Hello, world. Sqrt(2) = %v\n", mymath.Sqrt(2)) 85 | } 86 | 87 | Для компиляции вам нужно переключиться в папку приложения, в данном случае это `$GOPATH/src/mathapp`, а затем выполнить `go install`. После этого вы должны увидеть, что исполняемый файл под названием `mathapp` был создан в папке `$GOPATH/bin/`. Чтобы запустить приложений, используйте команду `./mathapp`, а выполнив, вы должны увидеть следующее у себя в терминале: 88 | 89 | Hello world. Sqrt(2) = 1.414213562373095 90 | 91 | ## Установка пакетов из удаленных источников 92 | 93 | Go имеет специальный инструмент для установки пакетов из удаленных источников, название ему `go get`. Инструмент поддерживает большинство open source сервисов, включая Github, Google Code, BitBucket, и Launchpad. 94 | 95 | go get github.com/astaxie/beedb 96 | 97 | Можно также использовать `go get -u …` для обновления удаленных пакетов, эта команда также автоматически установит все зависимости для пакета. 98 | 99 | Этот инструмент будет использовать различные системы контроля версий в зависимости от платформы. Например, это будет `git` для Github или `hg` для Google Code. Не забудьте только установить эти инструменты перед использованием `go get`. 100 | 101 | После выполнения предыдущих команд структура папок должна стать примерно такой: 102 | 103 | $GOPATH 104 | src 105 | |-github.com 106 | |-astaxie 107 | |-beedb 108 | pkg 109 | |--${GOOS}_${GOARCH} 110 | |-github.com 111 | |-astaxie 112 | |-beedb.a 113 | 114 | Вообще, `go get` копирует исходные коды в `$GOPATH/src` локальной файловой системы, а затем выполняет `go install`. 115 | 116 | Использование удаленных пакетов практически такое же, как если бы мы использовали локальные пакеты: 117 | 118 | import "github.com/astaxie/beedb" 119 | 120 | ## Полная структура 121 | 122 | Если Вы следовали предыдущим шагам и выполнили все корректно, то структура Вашей папки будет такой: 123 | 124 | bin/ 125 | mathapp 126 | pkg/ 127 | ${GOOS}_${GOARCH}, например darwin_amd64, linux_amd64 128 | mymath.a 129 | github.com/ 130 | astaxie/ 131 | beedb.a 132 | src/ 133 | mathapp 134 | main.go 135 | mymath/ 136 | sqrt.go 137 | github.com/ 138 | astaxie/ 139 | beedb/ 140 | beedb.go 141 | util.go 142 | 143 | Теперь мы можем увидеть всю структуру папок, `bin` содержит исполняемые файлы, в `pkg` скомпилированные, а `src` содержит исходный код. 144 | 145 | ( ***Формат переменной окружения в Windows вообще говоря такой - `%GOPATH%`, однако эта книга использует в основном Unix-style, потому Windows пользователи должны будут заменить переменную своим значением.*** ) 146 | 147 | ## Ссылки 148 | 149 | - [Содержание](preface.md) 150 | - Предыдущая секция: [Установка](01.1.md) 151 | - Следующая секция: [Команды Go](01.3.md) 152 | -------------------------------------------------------------------------------- /01.3.md: -------------------------------------------------------------------------------- 1 | # 1.3 Команды Go 2 | 3 | ## Команды Go 4 | 5 | Язык Go поставляется с полным набором команд, которые вы можете увидеть, выполнив команду `go`: 6 | 7 | ![](images/1.3.go.png?raw=true) 8 | 9 | `Рисунок 1.3 Комнада Go отображает детализированную информацию` 10 | 11 | Каждая из команд весьма полезна для нас, потому давайте рассмотрим каждую из них. 12 | 13 | ## go build 14 | 15 | Эта команда служит для компиляции. При наличии зависимых пакетов, они также будут скомпилированы при необходимости. 16 | 17 | - Если пакет не является `main` пакетом, как например, пакет `mymath` в предыдущей [секции 1.2](01.2.md), то после выполнения команды ничего не будет создано. Если уж вам необходим скомпилированный файл пакета с расширением `.a` где-нибудь в `$GOPATH/pkg`, воспользуйтесь командой `go install`. 18 | - Если обрабатываемый пакет `main`, то в исходной директории будет создан исполняемый файл. Если вы желаете, чтобы он был сгенерирован в папке `$GOPATH/bin`, запустите `go install` или `go build -o ${PATH_HERE}/a.exe.` - результат будет одинаков. 19 | - Если в папке много различных файлов, а вы хотите скомпилировать только один из них, то просто добавьте его название после `go build`. Например так: `go build a.go`. `go build` будет компилировать все файлы в папке. 20 | - Вы также вправе указать название файла, который будет создан. Например, для пакета `mathapp` [секции 1.2](01.2.md), команда `go build -o astaxie.exe` создаст файл `astaxie.exe` вместо `mathapp.exe`. Имя по умолчанию, которое будет использоваться - это название папки пакета(не `main` пакета) или название первого исходного файла(соответственно для `main` пакета). 21 | 22 | ( ***В соответствии [спецификацией языка Go](https://golang.org/ref/spec), именем пакета является имя после слова `package` в первой строке исходного файла, оно может быть отличным от названия папки, а именем исполняемого файла по умолчанию будет название папки.*** ) 23 | 24 | - `go build` игнорирует названия файлов, начинающиеся с символов `_` или `.`. 25 | - Если вы желаете иметь различные исходные файлы для различных платформ, то можно называть файлы, просто добавляя в конце имени суффикс с названием платформы. Пусть у нас есть некоторые исходные файлы, которые работают с массивами, то они могут быть названы примерно так: 26 | 27 | array_linux.go | array_darwin.go | array_windows.go | array_freebsd.go 28 | 29 | `go build` выберет тот исходник, который ассоциирован с вашей операционной системой. Например команда скомпилирует `array_linux.go` под Linux системой и проигнорирует все остальные. 30 | 31 | ## go clean 32 | 33 | Команда очищает файлы, которые были сгенерированы компилятором, включая следующие файлы: 34 | 35 | _obj/ // папка объектов, оставшаяся после Makefiles 36 | _test/ // папка тестов, оставшаяся после Makefiles 37 | _testmain.go // папка gotest, оставшаяся после Makefiles 38 | test.out // папка тестов, оставшаяся после Makefiles 39 | build.out // папка тестов, оставшаяся после Makefiles 40 | *.[568ao] // объектные файлы, оставшиеся после Makefiles 41 | 42 | DIR(.exe) // сгенерирована `go build` 43 | DIR.test(.exe) // сгенерирована `go test -c` 44 | MAINFILE(.exe) // сгенерирована `go build MAINFILE.go` 45 | 46 | Я обычно пользуюсь этой командой перед выгрузкой проекта на GitHub, чтобы очистить свои папки от мусора. Этот мусор возможно полезен для локальных испытаний, но от него мало толку для системы контроля версий. 47 | 48 | ## go fmt 49 | 50 | Люди, которые работают с C/C++ наверно знают, что многие постоянно спорят, какой стиль кода между K&R-стилем и ANSI-стилем лучше. К счастью, в Go только один стиль кода, который может быть использован. Например, вы должны поместить левую скобку в конце строки, но никак иначе на другой строке - это приведет к ошибке компиляции! Однако, вы можете не запоминать эти правила, потому что `go fmt` сделает все за вас, стоит только запустить `go fmt <имя файла>.go` в консоли. Но к примеру не пользуюсь этой командой так часто, потому что моя среда разработки выполняет эту команду автоматически при сохранении исходного кода. Я расмотрю вопрос об IDE в следующем разделе. 51 | 52 | Мы обычно используем `gofmt -w` вместо `go fmt`, потому что последняя команда не сохраняет отформатированный вариант. `gofmt -w src` обработает весь проект. 53 | 54 | ## go get 55 | 56 | Поддерживая BitBucket, Github, Google Code, Launchpad, команда служит для получения пакетов из сети. Команда совершает две вещи после того, как мы ее вызвали. Первая вещь - загрузка исходного кода, вторая - выполнение команды `go install`. Перед использованием этой команды вам нужно убедиться, что вы установили нужные инструменты: 57 | 58 | BitBucket (Mercurial Git) 59 | Github (git) 60 | Google Code (Git, Mercurial, Subversion) 61 | Launchpad (Bazaar) 62 | 63 | Также убедитесь перед исользованием, что инструменты установлены корректно. Не забудьте настроить `PATH`. Скажу еще, что команда поддерживает кастомизированные доменные имена, воспользуйтесь командой `go help remote` для дополнительной информации. 64 | 65 | ## go install 66 | 67 | Эта команда компилирует пакеты и создает бинарные файлы, которые впоследствии будут помещены в `$GOPATH/pkg` или `$GOPATH/bin`. 68 | 69 | ## go test 70 | 71 | Эта команда грузит все файлы, чьи названия оканчиваются на `*_test.go` и генерирует тестовые файлы, выполняет из, а затем выводит информацию вроде такой: 72 | 73 | ok archive/tar 0.011s 74 | FAIL archive/zip 0.022s 75 | ok compress/gzip 0.033s 76 | ... 77 | 78 | Команда по умолчанию запускает все тесты на тестирование. Для дополнительной информации воспользуйтесь командой `go help testflag` :) 79 | 80 | ## go doc 81 | 82 | Многие люди говорят, что мы не нуждаемся в каких-то сторонних средствах документации Go(однако я сделал [CHM](https://github.com/astaxie/godoc)), потому что Go и так имеет мощный инструмент для управления этой документацией. 83 | 84 | Так как же получить документацию для пакета? Если вы хотите получить информацию о целом пакете, как например пакет `builtin`, воспользуйтесь командой `go doc builtin`, а для пакета `http` командой `go doc net/http`. Если вы желаете получить больше информации об определенной функции, в вашем распоряжении команда `godoc <пакет> <функция>`, а команда `godoc -src <пакет> <функция>` выведет исходный код. 85 | 86 | Выполнив команду `godoc -http=:8080`, а затем перейдя по адресу `127.0.0.1:8080`, вы должны увидеть локализированный [golang.org](http://golang.org). Однако тут есть небольшое отличие - также будет отображаться документация из пакетов, установленных в вашей папке `$GOPATH/pkg`. 87 | 88 | ## Другие команды 89 | 90 | Go предлагает еще несколько инструментов, о которых я скажу лишь пару слов: 91 | 92 | go fix // обновляет код со старых версий до go1 к новой версии после go1 93 | go version // выводит информацию о версии Go 94 | go env // выводит все переменные окружения Go 95 | go list // выводит список всех установленных пакетов 96 | go run // компилирует временные файлы и запускает приложение 97 | 98 | Естественно, больше информации о командах можно получить, выполнив `go help <команда>`. 99 | 100 | ## Ссылки 101 | 102 | - [Содержание](preface.md) 103 | - Предыдущая секция: [$GOPATH и рабочее пространство](01.2.md) 104 | - Следующая секция: [Инструменты разработки Go](01.4.md) 105 | -------------------------------------------------------------------------------- /01.4.md: -------------------------------------------------------------------------------- 1 | # Инструменты разработки Go 2 | 3 | В этом разделе я рассмотрю некоторые IDE, которые имеют в своем составе автодополнение и форматирование кода. Все они кросс-платформенны, а это значит, что все шаги установки и настройки не будут сильно отличаться в других операционных системах. 4 | 5 | ## LiteIDE 6 | 7 | LiteIDE - это проект и открытым исходным кодом, легковесная IDE, созданная специально для Go. 8 | 9 | ![](images/1.4.liteide.png?raw=true) 10 | 11 | `Изображение 1.4 Главное окно LiteIDE` 12 | 13 | LiteIDE предлагает: 14 | 15 | - Кросс-платформенность 16 | - Windows 17 | - Linux 18 | - Mac OS 19 | - Кросс-компиляция 20 | - Управление множественными окружениями компиляции 21 | - Поддерживает кросс-платформенность Go 22 | - Управление проектом 23 | - Просмотр документации на базе `$GOPATH` 24 | - Система компиляции на базе `$GOPATH` 25 | - Индекс документации API `$GOPATH` 26 | - Редактор исходного кода Go 27 | - Подсветка кода 28 | - Полная поддержка `gocode` 29 | - Просмотр документации Go и индекса API 30 | - Просмотр выражения кода через `F1` 31 | - Переход к описанию функции через `F2` 32 | - Поддержка gdb 33 | - Авто-форматирование с `gofmt` 34 | - Другие 35 | - Многоязычность 36 | - Система плагинов 37 | - Темы для текстового редактора 38 | - Интеллектуальная система автодополнения 39 | - Настраиваемые горячие кнопки 40 | - Поддержка Markdown 41 | - Просмотр в режиме реального времени 42 | - Настраиваемый CSS 43 | - Экспорт в HTML и PDF 44 | - Конвертация и объединение с HTML и PDF 45 | 46 | ### Установка LiteIDE 47 | 48 | - Установка LiteIDE 49 | - [Страница загрузки](http://code.google.com/p/golangide) 50 | - [Исходные коды](https://github.com/visualfc/liteide) 51 | 52 | Сперва установите Go, а лишь потом загружайте нужную версию для своей операционной системы. Для использования просто распакуйте архив. 53 | - Установка gocode 54 | 55 | gocode нам нужен для использования интеллектуального авто-дополнения 56 | 57 | go get -u github.com/nsf/gocode 58 | 59 | - Настройка окружения компилятора 60 | 61 | Переключение конфигурации LiteIDE на ту, которая более соответствует вашей ОС. 62 | В операционной системе Windows вместе с 64-bit версией Go, вам нужно выбрать `win64` в разделе `Environment configuration` панели инструментов. Затем выберите `opinion`, найдите `LiteEnv` в списке слева, откройте `win64.env` в правом списке. 63 | 64 | GOROOT=c:\go 65 | GOBIN= 66 | GOARCH=amd64 67 | GOOS=windows 68 | CGO_ENABLED=1 69 | 70 | PATH=%GOBIN%;%GOROOT%\bin;%PATH% 71 | 。。。 72 | 73 | Замените `GOROOT=c:\go` своей папкой, где находится Go, сохраните файл. Если вы имеете MinGW64, добавьте `c:\MinGW64\bin` (ну или путь к своей папке с установленной программой) в свою переменную окружения `path` для поддержки `cgo`. 74 | 75 | В Linux-системах с 64-битной версией Go способ настройки в принципе аналогичен. Выберите соответственно `linux64`, после `opinion`, найдите `LiteEnv` в левом списке, и откройте файл `linux64.env` в правом списке. 76 | 77 | GOROOT=$HOME/go 78 | GOBIN= 79 | GOARCH=amd64 80 | GOOS=linux 81 | CGO_ENABLED=1 82 | 83 | PATH=$GOBIN:$GOROOT/bin:$PATH 84 | 。。。 85 | 86 | Замените `GOROOT=$HOME/go` своей папкой установки Go и сохраните файл. 87 | - $GOPATH 88 | $GOPATH - это путь, или папка, которая содержит ваши проекты. Откройте консоль (или нажмите `Ctrl+` в LiteIDE), после введите `go help gopath` для более полной информации. 89 | С LiteIDE достаточно просто просматривать и настраивать `$GOPATH`. Чтобы это сделать, просто кликните `View - Setup GOPATH`. 90 | 91 | ## Sublime Text 92 | 93 | Сейчас я произведу некоторый экскурс в Sublime Text 2 (можно просто Sublime) + GoSublime + gocode + MarGo. Вот почему: 94 | 95 | - Интеллектуальное автодополнение 96 | 97 | ![](images/1.4.sublime1.png?raw=true) 98 | 99 | `Изображение 1.5 Дополнение кода в Sublime` 100 | - Авто-форматирование исходных файлов 101 | - Управление проектами 102 | 103 | ![](images/1.4.sublime2.png?raw=true) 104 | 105 | `Изображение 1.6 Управление проектами в Sublime` 106 | 107 | - Подсветка синтаксиса 108 | - Такой же функционал, как в лицензированной версии. Иногда конечно будет выскакивать предложение приобрести лицензию, но вы можете просто игнорировать его. 109 | 110 | Сперва, загрузите тот [Sublime](http://www.sublimetext.com/), который соответствует вашей системе. 111 | 112 | 1. Нажмите `Ctrl+` `, чтобы открыть командную строку и введите туда следующий текст: 113 | 114 | import urllib2,os; pf='Package Control.sublime-package'; ipp=sublime.installed_packages_path(); os.makedirs(ipp) if not os.path.exists(ipp) else None; urllib2.install_opener(urllib2.build_opener(urllib2.ProxyHandler())); open(os.path.join(ipp,pf),'wb').write(urllib2.urlopen('http://sublime.wbond.net/'+pf.replace(' ','%20')).read()); print 'Please restart Sublime Text to finish installation' 115 | 116 | Перезапуститесь, когда установка будет завершена. Затем вы сможете найти элемент `Package Control` в меню `Preferences`. 117 | 118 | ![](images/1.4.sublime3.png?raw=true) 119 | 120 | `Изображение 1.7 Sublime Package Control` 121 | 2. Для установки GoSublime, SidebarEnhancements и Go Build, нажмите `Ctrl+Shift+p` для запуска `Package Control`, введите `pcip` (сокращенно "Package Control: Install Package"). 122 | 123 | ![](images/1.4.sublime4.png?raw=true) 124 | 125 | `Изображение 1.8 Установка пакетов Sublime` 126 | 127 | После чего введите `GoSublime` для поиска нужного пакета и нажмите ОК для установки, похожим способом установите `SidebarEnhancements` и `Go Build`. По завершении перезапустите редактор. 128 | 3. Для проверки установки откройте Sublime, затем откройте наш файл `main.go` и убедитесь, что синтаксис кода подсвечивается. Наберите `import`, чтобы убедиться, что появляется подскззка, после введите `import "fmt"`. Наберите `fmt.` и убедитесь, что также работает автодополнение. 129 | 130 | Если все работает, мы готовы двигаться дальше. 131 | 132 | Но если же нет, проверьте переменную окружения `$PATH`. Откройте терминал, введите `gocode`, если команда не может запуститься, то, вероятно, вся проблема в `$PATH`. 133 | 134 | ## Vim 135 | 136 | Vim является популярным текстовым редактором программистов, развившися из проекта vi. Редактор имеет функции для автодополнения, компиляции и быстрого перехода к ошибкам. 137 | 138 | ![](images/1.4.vim.png?raw=true) 139 | 140 | `Изображение 1.9 Автодополнение Vim для Go` 141 | 142 | 1. Настройка подсветки синтаксиса Go 143 | 144 | cp -r $GOROOT/misc/vim/* ~/.vim/ 145 | 146 | 2. Установите параметр, отвечающий за подсветку в `on` 147 | 148 | filetype plugin indent on 149 | syntax on 150 | 151 | 3. Установите [gocode](https://github.com/nsf/gocode/) 152 | 153 | go get -u github.com/nsf/gocode 154 | 155 | По умолчанию gocode будет установлен в `$GOBIN`. 156 | 4. Настройте [gocode](https://github.com/nsf/gocode/) 157 | 158 | ~ cd $GOPATH/src/github.com/nsf/gocode/vim 159 | ~ ./update.bash 160 | ~ gocode set propose-builtins true 161 | propose-builtins true 162 | ~ gocode set lib-path "/home/border/gocode/pkg/linux_amd64" 163 | lib-path "/home/border/gocode/pkg/linux_amd64" 164 | ~ gocode set 165 | propose-builtins true 166 | lib-path "/home/border/gocode/pkg/linux_amd64" 167 | 168 | Предположим, что gocode настроен. 169 | 170 | `propose-builtins`: предлагать автодополнение или нет, по умолчанию стоит `false`. 171 | 172 | `lib-path`: gocode будет искать пакеты в `$GOPATH/pkg/$GOOS_$GOARCH` и `$GOROOT/pkg/$GOOS_$GOARCH`, здесь можно добавить и свои пути. 173 | 5. Поздравляем! Попробуйте `:e main.go` для погружения в мир Go! 174 | 175 | ## Emacs 176 | 177 | Emacs не только текстовый редактор, но и еще мощная IDE. 178 | 179 | ![](images/1.4.emacs.png?raw=true) 180 | 181 | `Изображение 1.10 Главная панель Emacs с редактором Go` 182 | 183 | 1. Настройка подсветки синтаксиса 184 | 185 | cp $GOROOT/misc/emacs/* ~/.emacs.d/ 186 | 187 | 2. Установите [gocode](https://github.com/nsf/gocode/) 188 | 189 | go get -u github.com/nsf/gocode 190 | 191 | По умолчанию gocode будет установлен в `$GOBIN`. 192 | 3. Настройте [gocode](https://github.com/nsf/gocode/) 193 | 194 | ~ cd $GOPATH/src/github.com/nsf/gocode/vim 195 | ~ ./update.bash 196 | ~ gocode set propose-builtins true 197 | propose-builtins true 198 | ~ gocode set lib-path "/home/border/gocode/pkg/linux_amd64" 199 | lib-path "/home/border/gocode/pkg/linux_amd64" 200 | ~ gocode set 201 | propose-builtins true 202 | lib-path "/home/border/gocode/pkg/linux_amd64" 203 | 204 | 4. Установите [Auto Completion](http://www.emacswiki.org/emacs/AutoComplete) 205 | Скачайте и распакуйте 206 | 207 | ~ make install DIR=$HOME/.emacs.d/auto-complete 208 | 209 | Теперь настройте `~/.emacs` файл 210 | 211 | ;;auto-complete 212 | (require 'auto-complete-config) 213 | (add-to-list 'ac-dictionary-directories "~/.emacs.d/auto-complete/ac-dict") 214 | (ac-config-default) 215 | (local-set-key (kbd "M-/") 'semantic-complete-analyze-inline) 216 | (local-set-key "." 'semantic-complete-self-insert) 217 | (local-set-key ">" 'semantic-complete-self-insert) 218 | 219 | Для получения больших сведений следуйте этой [ссылке](http://www.emacswiki.org/emacs/AutoComplete). 220 | 5. Теперь конфигурируем `.emacs` 221 | 222 | ;; golang mode 223 | (require 'go-mode-load) 224 | (require 'go-autocomplete) 225 | ;; speedbar 226 | ;; (speedbar 1) 227 | (speedbar-add-supported-extension ".go") 228 | (add-hook 229 | 'go-mode-hook 230 | '(lambda () 231 | ;; gocode 232 | (auto-complete-mode 1) 233 | (setq ac-sources '(ac-source-go)) 234 | ;; Imenu & Speedbar 235 | (setq imenu-generic-expression 236 | '(("type" "^type *\\([^ \t\n\r\f]*\\)" 1) 237 | ("func" "^func *\\(.*\\) {" 1))) 238 | (imenu-add-to-menubar "Index") 239 | ;; Outline mode 240 | (make-local-variable 'outline-regexp) 241 | (setq outline-regexp "//\\.\\|//[^\r\n\f][^\r\n\f]\\|pack\\|func\\|impo\\|cons\\|var.\\|type\\|\t\t*....") 242 | (outline-minor-mode 1) 243 | (local-set-key "\M-a" 'outline-previous-visible-heading) 244 | (local-set-key "\M-e" 'outline-next-visible-heading) 245 | ;; Menu bar 246 | (require 'easymenu) 247 | (defconst go-hooked-menu 248 | '("Go tools" 249 | ["Go run buffer" go t] 250 | ["Go reformat buffer" go-fmt-buffer t] 251 | ["Go check buffer" go-fix-buffer t])) 252 | (easy-menu-define 253 | go-added-menu 254 | (current-local-map) 255 | "Go tools" 256 | go-hooked-menu) 257 | 258 | ;; Other 259 | (setq show-trailing-whitespace t) 260 | )) 261 | ;; helper function 262 | (defun go () 263 | "run current buffer" 264 | (interactive) 265 | (compile (concat "go run " (buffer-file-name)))) 266 | 267 | ;; helper function 268 | (defun go-fmt-buffer () 269 | "run gofmt on current buffer" 270 | (interactive) 271 | (if buffer-read-only 272 | (progn 273 | (ding) 274 | (message "Buffer is read only")) 275 | (let ((p (line-number-at-pos)) 276 | (filename (buffer-file-name)) 277 | (old-max-mini-window-height max-mini-window-height)) 278 | (show-all) 279 | (if (get-buffer "*Go Reformat Errors*") 280 | (progn 281 | (delete-windows-on "*Go Reformat Errors*") 282 | (kill-buffer "*Go Reformat Errors*"))) 283 | (setq max-mini-window-height 1) 284 | (if (= 0 (shell-command-on-region (point-min) (point-max) "gofmt" "*Go Reformat Output*" nil "*Go Reformat Errors*" t)) 285 | (progn 286 | (erase-buffer) 287 | (insert-buffer-substring "*Go Reformat Output*") 288 | (goto-char (point-min)) 289 | (forward-line (1- p))) 290 | (with-current-buffer "*Go Reformat Errors*" 291 | (progn 292 | (goto-char (point-min)) 293 | (while (re-search-forward "" nil t) 294 | (replace-match filename)) 295 | (goto-char (point-min)) 296 | (compilation-mode)))) 297 | (setq max-mini-window-height old-max-mini-window-height) 298 | (delete-windows-on "*Go Reformat Output*") 299 | (kill-buffer "*Go Reformat Output*")))) 300 | ;; helper function 301 | (defun go-fix-buffer () 302 | "run gofix on current buffer" 303 | (interactive) 304 | (show-all) 305 | (shell-command-on-region (point-min) (point-max) "go tool fix -diff")) 306 | 6. Все! Панель быстрого доступа по умолчанию скрыта, уберите символы комментария в строке `;;(speedbar 1)`, чтобы получить эту опцию. Альтернативно, Вы можете получить ее через `M-x speedbar`. 307 | 308 | ## Eclipse 309 | 310 | Eclipse - это еще один отличный инструмент для разработчика (причем обилие плагинов позволяет его использовать не только про создани Java или C++ программ, но еще и Scala, Ruby, Python и многих других), поэтому я покажу, как настроить и использовать его для создания Go программ. 311 | 312 | ![](images/1.4.eclipse1.png?raw=true) 313 | 314 | `Изображение 1.11 Главное окно Eclipse с редактором Go` 315 | 316 | 1. Загрузите и установите [Eclipse](http://www.eclipse.org/) 317 | 2. Загрузите плагин [goclipse](https://code.google.com/p/goclipse/) 318 | [http://code.google.com/p/goclipse/wiki/InstallationInstructions](http://code.google.com/p/goclipse/wiki/InstallationInstructions) 319 | 3. Скачайте gocode 320 | 321 | gocode на Github. 322 | 323 | https://github.com/nsf/gocode 324 | 325 | Нам еще нужно установить `git` для Windows, обычно мы используем [msysgit](https://code.google.com/p/msysgit/) 326 | 327 | Установите gocode через консоль: 328 | 329 | go get -u github.com/nsf/gocode 330 | 331 | Если вы желаете, то можете установить gocode из исходных кодов. 332 | 4. Скачайте и установите [MinGW](http://sourceforge.net/projects/mingw/files/MinGW/) 333 | 5. Настройте плагины. 334 | 335 | Windows->Preferences->Go 336 | 337 | (1).Настройка Go-компилятора 338 | 339 | ![](images/1.4.eclipse2.png?raw=true) 340 | 341 | `Изображение 1.12 Настройки Go в Eclipse` 342 | 343 | (2).Настройте gocode(оптионально), установите `gocode path` к той папке, где расположен `gocode.exe`. 344 | 345 | ![](images/1.4.eclipse3.png?raw=true) 346 | 347 | `Изображение 1.13 Настройки gocode` 348 | 349 | (3).Настройка gdb(по желанию), укажите `gdb path`, где расположен `gdb.exe`. 350 | 351 | ![](images/1.4.eclipse4.png?raw=true) 352 | 353 | `Изображение 1.14 Настройки gdb` 354 | 6. Проверка установки 355 | 356 | Создайте новый проект Go, а в нем `hello.go`: 357 | 358 | ![](images/1.4.eclipse5.png?raw=true) 359 | 360 | `Изображение 1.15 Создание нового проекта и файла` 361 | 362 | Протестируйте установку.(Вам нужно ввести команду в консоли Eclipse) 363 | 364 | ![](images/1.4.eclipse6.png?raw=true) 365 | 366 | `Изображение 1.16 Тестирование Go программы в Eclipse` 367 | 368 | ## IntelliJ IDEA 369 | 370 | Те, кто работают с Java, будут "на короткой ноге" с этой IDE. Она поддерживает подсветку синтаксиса Go, интеллектуальное автодополнение, а также может быть расширена различными плагинами. 371 | 372 | 1. Загрузите IDEA, причем не имеет значения, будет это Ultimate или Community Edition 373 | 374 | ![](images/1.4.idea1.png?raw=true) 375 | 376 | 2. Установите плагин Go. Выберите `File - Setting - Plugins`, а затем `Browser repo`. 377 | 378 | ![](images/1.4.idea3.png?raw=true) 379 | 380 | 3. Найдите в списке `golang`, дважды кликните на `download and install`, дождитесь окончания загрузки. 381 | 382 | ![](images/1.4.idea4.png?raw=true) 383 | 384 | Нажмите `Apply`, после чего перезапустите IDEA. 385 | 4. Теперь вы можете начать разработку Go проектов. 386 | 387 | ![](images/1.4.idea5.png?raw=true) 388 | 389 | Укажите расположение `go sdk`, который обычно расположен в `$GOROOT`. 390 | 391 | ( ***Гляньте этот [пост](http://wuwen.org/tips-about-using-intellij-idea-and-go/) на блоге, если у вас возникнут трудности с использованием IntelliJ IDEA с плагином Go*** ) 392 | 393 | ## Ссылки 394 | 395 | - [Содержание](preface.md) 396 | - Предыдущая секция: [Команды Go](01.3.md) 397 | - Следующая секция: [Итоги](01.5.md) 398 | -------------------------------------------------------------------------------- /01.5.md: -------------------------------------------------------------------------------- 1 | # 1.5 Итоги 2 | 3 | В этом разделе мы рассмотрели три способа установки Go, после узнали, как конфигурировать окружение для разработки на Go и узнали про `$GOPATH`. После чего мы успешно попробовали написать, скомпилировать и собрать свое Go приложение. Осбудили команды Go, в частности команды компиляции, установки, форматирования и тестирования. Наконец, разобрались с установкой сред разработки, как например LiteIDE, Sublime Text, Vim, Emacs, Eclipse, IntelliJ IDEA. За Вами остается право выбрать тот инструмент, который Вам по душе, а нам самое время перейти непосредственно к погружению в мир Go. 4 | 5 | ## Ссылки 6 | 7 | - [Содержание](preface.md) 8 | - Предыдущая секция: [Инструменты разработки Go](01.4.md) 9 | - Следующая секция: [Базовые знания о Go](02.0.md) -------------------------------------------------------------------------------- /02.0.md: -------------------------------------------------------------------------------- 1 | # 2. Go - базовая информация 2 | Как было сказано ранее, Go является компилируемым системным языком программирования и принадлежит к семейству языков C. Однако скорость компиляции этого языка значительно выше скорости компиляции других языков этого семейства. В распоряжении языка только 25 ключевых слов, это меньше чем 26 букв английского алфавита! Давайте же глянем, с чем мы будем иметь дело: 3 | 4 | break default func interface select 5 | case defer go map struct 6 | chan else goto package switch 7 | const fallthrough if range type 8 | continue for import return var 9 | 10 | В этом разделе я обучу Вас некоторым основам и базовым знаниям Go. Вы найдете язык простым и не перегруженым лишними особенностями, познакомитесь с красотой архитектуры языка. Программирование может быть очень забавным вместе с Go. По завершении этого раздела у Вас не будет трудностей с ключевыми словами языка. 11 | 12 | ## Ссылки 13 | 14 | - [Содержание](preface.md) 15 | - Предыдущий раздел: [Раздел 1: Итоги](01.5.md) 16 | - Следующая секция: ["Hello, Go"](02.1.md) 17 | -------------------------------------------------------------------------------- /02.1.md: -------------------------------------------------------------------------------- 1 | # 2.1 Hello, Go 2 | 3 | Прежде чем писать что-то серьезное на языке Go, мы должны разобраться, как писать простейшую программу. Точно также нельзя простроить здание, не зная его фундамента. Потому мы рассмотрим базовый синтаксис, написав некоторые простешие программы в этом разделе. 4 | 5 | ## Программа 6 | 7 | Согласно традиции, изучение любого языка программирования начинается с самой простой программы, которая распечатает на экран вашего компьютера фразу "Hello world". 8 | 9 | Готовы? Let's Go! 10 | 11 | package main 12 | 13 | import "fmt" 14 | 15 | func main() { 16 | fmt.Printf("Hello, world or 你好,世界 or καλημ ́ρα κóσμ or こんにちは世界\n") 17 | } 18 | 19 | Выполнение программы выведет следующую информацию в консоль. 20 | 21 | Hello, world or 你好,世界 or καλημ ́ρα κóσμ or こんにちは世界 22 | 23 | ## Описание 24 | 25 | Во-первых, нужно понять, что Go программы основаны на пакетах `package`. 26 | 27 | `package` (В нашем случае `package main`) говорит нам, что файл с исходным кодом относится к пакету `main`, а ключевое слово `main` говорит нам, что пакет будет компилироваться в исполняемый файл, в то время как любой пакет компилируется в файл библиотеки с расширением `.a`. 28 | 29 | Каждый исполняемая программа имеет один и только один пакет `main`, а также функцию запуска `main`, которая не возвращает значений и не принимает аргументов. 30 | 31 | Для того, чтобы распечатать `Hello, world…`, мы вызываем функцию `Printf`. Функция расположена в пакете `fmt`, потому необходимо подключить пакет к нашему исходному файлу, а именно `import "fmt"` 32 | 33 | Устройство пакетов в Go похоже на устройство модулей Python, и в этом есть несколько преимуществ: Модульность (разделяет Вашу программу на множество модулей) и Повторное использование (каждый модуль может быть использован в других программах). Пока мы только рассмотрели концепт построения пакетов, а свой пакет мы разработаем позднее. 34 | 35 | На пятой строке программы мы используем ключевое слово `func` для определения функции `main`. Тело функции заключено внутри пары фигурных скобок `{}`, так же как в C, C++ или Java. 36 | 37 | Как можно заметить, функция не принимает аргументов. Позднее мы разберемся, как писать функции с аргументами, а также функции, которые возвращают одно или несколько значений. 38 | 39 | На шестой строке мы вызываем функцию `Printf` из пакета `fmt`. Синтаксис вызова функций `.` очень похож на стиль Python. 40 | 41 | Как мы сказали в [главе 1](01.2.md), имя пакета и папки, в котором находится пакет, может отличаться. Потому здесь `` означает, что мы берем соответствующий пакет, а не папку. 42 | 43 | Вы можете заметить, что пример выше содержит некоторые не-ASCII символы. Этим мы хотели показать, что по умолчанию Go поддерживает символы UTF-8. Вам доступны любые UTF-8 символы в своей программе. 44 | 45 | ## Итоги 46 | 47 | Go использует пакеты (как модули в Python) для организации программы. Функция `main.main()` (эта функция должна быть расположена в пакете `main`) является отправной точкой для любой программы. Язык Go поддерживает UTF-8 символы, так как один из создателей языка является создателем UTF-8, а потому Go поддерживает мультиязычность с того момента, как он был создан. 48 | 49 | ## Ссылки 50 | 51 | - [Содержание](preface.md) 52 | - Предыдущая секция: [Go - базовая информация](02.0.md) 53 | - Следующая секция: [Основы Go](02.2.md) 54 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ***Разработка Web-приложений на языке Go*** 2 | ====================================== 3 | 4 | ### ***Комментарии переводчика*** 5 | 6 | Эта книга - русский перевод [《Go Web编程》](https://github.com/astaxie/build-web-application-with-golang), оригинальную версию которой написал [AstaXie](https://github.com/astaxie), а на английский язык перевели [Unknown](https://github.com/Unknwon) и [Larry Battle](https://github.com/LarryBattle). Русский перевод сделал [Alex Saskevich](https://github.com/asaskevich) 7 | 8 | Эта книга о том, как разрабатывать приложения на языке Go. В первых разделах автор этой книги рассмотрит некоторые базовые концепции языка. Тем не менее, чтобы добиться максимальной пользы от чтения, Вам желательно иметь общее представление о языке Go и понимать концепцию веб-программирования. Заметим, что если Вы новичок, то эта книга не является вводным курсом, потому перед прочтением этой книги Вам желательно изучить другую литературу, например, книгу автора Caleb Doxsey [An Introduction to Programming in Go](http://www.golang-book.com/). 9 | 10 | Если из-за качества перевода что-то оказалось недостаточно понятно, например по причине некорректности языковых формулировок, не стесняйтесь сообщить об этом мне на [репозитории перевода этой книги](https://github.com/asaskevich/build-web-application-with-golang_RU) 11 | 12 | ### Благодарности за помощь в переводе на английский язык 13 | 14 | - [matalangilbert](https://github.com/matalangilbert) 15 | - [nightlyone](https://github.com/nightlyone) 16 | - [sbinet](https://github.com/sbinet) 17 | - [carbocation](https://github.com/carbocation) 18 | - [desimone](https://github.com/desimone) 19 | - [reigai](https://github.com/reigai) 20 | - [OlingCat](https://github.com/OlingCat) 21 | 22 | ### Цель этой книги 23 | 24 | Так как я заинтересован в разработке Web-приложений, я использовал свое свободное время, чтобы написать эту книгу в версии с открытым исходным кодом. Но все же это не значит, что у меня хорошие знания в теме создания Web-приложений; я всего-лишь хотел бы поделиться теми навыками, которые получил при работе с языком Go, разрабатывая Web-приложения. 25 | 26 | - Если вы PHP/Python/Ruby разработчик, то вы узнаете, как создавать приложения с помощью Go. 27 | - Если вы C/C++ разработчик, вы узнаете, как работает сам Web, изнутри. 28 | 29 | Я считаю, что самая главная цель изучения - обмен знаниями с другими. Потому что самая лучшая вещь в моей жизни - делиться тем, что я знаю, с остальными людьми. 30 | 31 | ### Поддержка 32 | 33 | Если вам понравилась эта книга, вы можете перейти по этой [ссылке](https://me.alipay.com/astaxie), чтобы поддержать оригинального автора, а также помочь ему написать еще больше книг с еще более полезным и интересным содержанием. 34 | 35 | ### Exchanging Learning Go 36 | 37 | Если Вы знаете, что такое QQ, вступайте в нашу группу 259316004. Но если же нет, следуйте этой [ссылке](http://download.imqq.com/download.shtml), чтобы получить больше информации. Кстати, Вы также можете посетить наш [форум](http://bbs.beego.me). 38 | 39 | ### Благодарности 40 | 41 | Во-первых, я хотел бы поблагодарить членов Golang-China в QQ группе #102319854, они оказали мне неоценимую помощь. Затем я хочу поблагодарить следующих людей, которые оказали большую помощь, когда я писал эту книгу. 42 | 43 | - [四月份平民 April Citizen](https://plus.google.com/110445767383269817959) (примеры кода) 44 | - [洪瑞琦 Hong Ruiqi](https://github.com/hongruiqi) (примеры кода) 45 | - [边 疆 BianJiang](https://github.com/border) (написал конфигурационные файлы к Vim и Emacs для разработки под Go) 46 | - [欧林猫 Oling Cat](https://github.com/OlingCat)(примеры кода) 47 | - [吴文磊 Wenlei Wu](mailto:spadesacn@gmail.com)(предложил некоторые картинки) 48 | - [北极星 Polaris](https://github.com/polaris1119)(пересмотрел всю книгу) 49 | - [雨 痕 Rain Trail](https://github.com/qyuhen)(пересмотрел разделы 2 и 3) 50 | 51 | ### Лицензия 52 | 53 | This book is licensed under the [CC BY-SA 3.0 License](http://creativecommons.org/licenses/by-sa/3.0/), 54 | the code is licensed under a [BSD 3-Clause License](), unless otherwise specified. 55 | 56 | ## Ссылки 57 | 58 | - [Содержание](preface.md) 59 | -------------------------------------------------------------------------------- /images/1.1.mac.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asaskevich/build-web-application-with-golang_RU/218c7a5336aaea58f0cf591335033902f7aaa7cc/images/1.1.mac.png -------------------------------------------------------------------------------- /images/1.3.go.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asaskevich/build-web-application-with-golang_RU/218c7a5336aaea58f0cf591335033902f7aaa7cc/images/1.3.go.png -------------------------------------------------------------------------------- /images/1.4.eclipse1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asaskevich/build-web-application-with-golang_RU/218c7a5336aaea58f0cf591335033902f7aaa7cc/images/1.4.eclipse1.png -------------------------------------------------------------------------------- /images/1.4.eclipse2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asaskevich/build-web-application-with-golang_RU/218c7a5336aaea58f0cf591335033902f7aaa7cc/images/1.4.eclipse2.png -------------------------------------------------------------------------------- /images/1.4.eclipse3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asaskevich/build-web-application-with-golang_RU/218c7a5336aaea58f0cf591335033902f7aaa7cc/images/1.4.eclipse3.png -------------------------------------------------------------------------------- /images/1.4.eclipse4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asaskevich/build-web-application-with-golang_RU/218c7a5336aaea58f0cf591335033902f7aaa7cc/images/1.4.eclipse4.png -------------------------------------------------------------------------------- /images/1.4.eclipse5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asaskevich/build-web-application-with-golang_RU/218c7a5336aaea58f0cf591335033902f7aaa7cc/images/1.4.eclipse5.png -------------------------------------------------------------------------------- /images/1.4.eclipse6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asaskevich/build-web-application-with-golang_RU/218c7a5336aaea58f0cf591335033902f7aaa7cc/images/1.4.eclipse6.png -------------------------------------------------------------------------------- /images/1.4.emacs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asaskevich/build-web-application-with-golang_RU/218c7a5336aaea58f0cf591335033902f7aaa7cc/images/1.4.emacs.png -------------------------------------------------------------------------------- /images/1.4.idea1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asaskevich/build-web-application-with-golang_RU/218c7a5336aaea58f0cf591335033902f7aaa7cc/images/1.4.idea1.png -------------------------------------------------------------------------------- /images/1.4.idea2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asaskevich/build-web-application-with-golang_RU/218c7a5336aaea58f0cf591335033902f7aaa7cc/images/1.4.idea2.png -------------------------------------------------------------------------------- /images/1.4.idea3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asaskevich/build-web-application-with-golang_RU/218c7a5336aaea58f0cf591335033902f7aaa7cc/images/1.4.idea3.png -------------------------------------------------------------------------------- /images/1.4.idea4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asaskevich/build-web-application-with-golang_RU/218c7a5336aaea58f0cf591335033902f7aaa7cc/images/1.4.idea4.png -------------------------------------------------------------------------------- /images/1.4.idea5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asaskevich/build-web-application-with-golang_RU/218c7a5336aaea58f0cf591335033902f7aaa7cc/images/1.4.idea5.png -------------------------------------------------------------------------------- /images/1.4.liteide.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asaskevich/build-web-application-with-golang_RU/218c7a5336aaea58f0cf591335033902f7aaa7cc/images/1.4.liteide.png -------------------------------------------------------------------------------- /images/1.4.sublime1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asaskevich/build-web-application-with-golang_RU/218c7a5336aaea58f0cf591335033902f7aaa7cc/images/1.4.sublime1.png -------------------------------------------------------------------------------- /images/1.4.sublime2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asaskevich/build-web-application-with-golang_RU/218c7a5336aaea58f0cf591335033902f7aaa7cc/images/1.4.sublime2.png -------------------------------------------------------------------------------- /images/1.4.sublime3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asaskevich/build-web-application-with-golang_RU/218c7a5336aaea58f0cf591335033902f7aaa7cc/images/1.4.sublime3.png -------------------------------------------------------------------------------- /images/1.4.sublime4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asaskevich/build-web-application-with-golang_RU/218c7a5336aaea58f0cf591335033902f7aaa7cc/images/1.4.sublime4.png -------------------------------------------------------------------------------- /images/1.4.vim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asaskevich/build-web-application-with-golang_RU/218c7a5336aaea58f0cf591335033902f7aaa7cc/images/1.4.vim.png -------------------------------------------------------------------------------- /preface.md: -------------------------------------------------------------------------------- 1 | - 1.[Настройка Gо окружения](01.0.md) 2 | - 1.1. [Установка](01.1.md) 3 | - 1.2. [$GOPATH и рабочее пространство](01.2.md) 4 | - 1.3. [Комманды Go](01.3.md) 5 | - 1.4. [Инструменты разработки Go](01.4.md) 6 | - 1.5. [Итоги](01.5.md) 7 | - 2.[Go - базовая информация](02.0.md) 8 | - 2.1. ["Hello, Go"](02.1.md) 9 | - 2.2. [Основы Go](02.2.md) 10 | - 2.3. [Контрольные выражения и функции](02.3.md) 11 | - 2.4. [Структуры struct](02.4.md) 12 | - 2.5. [Объектно-ориентированное программирование](02.5.md) 13 | - 2.6. [Интерфейсы](02.6.md) 14 | - 2.7. [Параллелизм](02.7.md) 15 | - 2.8. [Итоги](02.8.md) 16 | - 3.[Основы Web](03.0.md) 17 | - 3.1. [Принципы функционирования Web](03.1.md) 18 | - 3.2. [Простейший Web-сервер](03.2.md) 19 | - 3.3. [Как Go работает с Web](03.3.md) 20 | - 3.4. [Вступление в модуль http](03.4.md) 21 | - 3.5. [Итоги](03.5.md) 22 | - 4.[Пользовательские формы](04.0.md) 23 | - 4.1. [Обработка форм](04.1.md) 24 | - 4.2. [Проверка ввода](04.2.md) 25 | - 4.3. [Межсайтовый скриптинг](04.3.md) 26 | - 4.4. [Дублирование посылок](04.4.md) 27 | - 4.5. [Загрузка файлов](04.5.md) 28 | - 4.6. [Итоги](04.6.md) 29 | - 5.[Базы данных](05.0.md) 30 | - 5.1. [Интерфейсы database/sql](05.1.md) 31 | - 5.2. [MySQL](05.2.md) 32 | - 5.3. [SQLite](05.3.md) 33 | - 5.4. [PostgreSQL](05.4.md) 34 | - 5.5. [Разработка ORM на основе beedb](05.5.md) 35 | - 5.6. [NoSQL база данных](05.6.md) 36 | - 5.7. [Итоги](05.7.md) 37 | - 6.[Сессии и хранение данных](06.0.md) 38 | - 6.1. [Сессии и куки](06.1.md) 39 | - 6.2. [Как использовать сессии в Go](06.2.md) 40 | - 6.3. [Хранилище сессий](06.3.md) 41 | - 6.4. [Предотвращение угона сессии](06.4.md) 42 | - 6.5. [Итоги](06.5.md) 43 | - 7.[Текстовые файлы](07.0.md) 44 | - 7.1. [XML](07.1.md) 45 | - 7.2. [JSON](07.2.md) 46 | - 7.3. [Regexp](07.3.md) 47 | - 7.4. [Шаблоны](07.4.md) 48 | - 7.5. [Файлы](07.5.md) 49 | - 7.6. [Строки](07.6.md) 50 | - 7.7. [Итоги](07.7.md) 51 | - 8.[Web-сервисы](08.0.md) 52 | - 8.1. [Сокеты](08.1.md) 53 | - 8.2. [Web-сокеты](08.2.md) 54 | - 8.3. [REST](08.3.md) 55 | - 8.4. [RPC](08.4.md) 56 | - 8.5. [Итоги](08.5.md) 57 | - 9.[Безопасность и шифрование](09.0.md) 58 | - 9.1. [CSRF атаки](09.1.md) 59 | - 9.2. [Фильтрация ввода](09.2.md) 60 | - 9.3. [XSS атаки](09.3.md) 61 | - 9.4. [SQL инъекции](09.4.md) 62 | - 9.5. [Хранение паролей](09.5.md) 63 | - 9.6. [Шифрование и дешифрование данных](09.6.md) 64 | - 9.7. [Итоги](09.7.md) 65 | - 10.[Интернационализация и локализация](10.0.md) 66 | - 10.1 [Часовые пояса](10.1.md) 67 | - 10.2 [Локализированные ресурсы](10.2.md) 68 | - 10.3 [Международные сайты](10.3.md) 69 | - 10.4 [Итоги](10.4.md) 70 | - 11.[Обработка ошибок, дебаггинг и тестирование](11.0.md) 71 | - 11.1. [Обработка ошибок](11.1.md) 72 | - 11.2. [Дебаггинг с использованием GDB](11.2.md) 73 | - 11.3. [Тестирование](11.3.md) 74 | - 11.4. [Итоги](11.4.md) 75 | - 12.[Развертывание и обслуживание](12.0.md) 76 | - 12.1. [Логи](12.1.md) 77 | - 12.2. [Ошибки и поломки](12.2.md) 78 | - 12.3. [Развертывание](12.3.md) 79 | - 12.4. [Создание резервной копии и восстановление данных](12.4.md) 80 | - 12.5. [Итоги](12.5.md) 81 | - 13.[Сборка web-фреймворка](13.0.md) 82 | - 13.1. [Программа проекта](13.1.md) 83 | - 13.2. [Индивидуальные маршрутизаторы](13.2.md) 84 | - 13.3. [Разработка контролеров](13.3.md) 85 | - 13.4. [Логи и конфигурация](13.4.md) 86 | - 13.5. [Добавление, удаление и обновление блога](13.5.md) 87 | - 13.6. [Итоги](13.6.md) 88 | - 14.[Разработка web-фреймворка](14.0.md) 89 | - 14.1. [Статичные файлы](14.1.md) 90 | - 14.2. [Сессии](14.2.md) 91 | - 14.3. [Формы](14.3.md) 92 | - 14.4. [Проверка пользователя](14.4.md) 93 | - 14.5. [Многоязычность](14.5.md) 94 | - 14.6. [pprof](14.6.md) 95 | - 14.7. [Итоги](14.7.md) 96 | - Приложение A [Ссылки](ref.md) -------------------------------------------------------------------------------- /ref.md: -------------------------------------------------------------------------------- 1 | # Приложение А: ссылки 2 | 3 | Эта книга является обобщением моего опыта в языке Go, полученного благодаря этим книгам и блогам. Спасибо им! 4 | 5 | 1. [golang blog](http://blog.golang.org) 6 | 2. [Russ Cox blog](http://research.swtch.com/) 7 | 3. [go book](http://go-book.appsp0t.com/) 8 | 4. [golangtutorials](http://golangtutorials.blogspot.com) 9 | 5. [轩脉刃de刀光剑影](http://www.cnblogs.com/yjf512/) 10 | 6. [Go Programming Language](http://golang.org/doc/) 11 | 7. [Network programming with Go](http://jan.newmarch.name/go/) 12 | 8. [setup-the-rails-application-for-internationalization](http://guides.rubyonrails.org/i18n.html#setup-the-rails-application-for-internationalization) 13 | 9. [The Cross-Site Scripting (XSS) FAQ](http://www.cgisecurity.com/xss-faq.html) 14 | 15 | ## Ссылки 16 | 17 | - [Содержание](preface.md) 18 | --------------------------------------------------------------------------------