diff --git a/ru/01.0.md b/ru/01.0.md new file mode 100644 index 00000000..d71b4a1d --- /dev/null +++ b/ru/01.0.md @@ -0,0 +1,20 @@ +# 1 Настройка окружения Go + +Добро пожаловать в мир Go! Давайте начнем. + +Go - это язык программирования, характерными чертами которого являюся быстрое время компиляции, сборка мусора и многопоточность. Вот список преимуществ Go: + +- Большие проекты компилируюстя за несколько секунд. +- Модель разработки в Go легко объяснима, Go позволяет избежать большинства проблем, связанных с заголовочными файлами в стиле языка C. +- Это статически типизированный язык программирования, в системе типов которого не поддерживается иерархия уровней, поэтому пользователю не нужно тратить время на выяснение отношений между типами. Go, скорее, "легковесный" объектно-ориентированный язык программирования. +- Go обеспечивает сборку мусора. Он предлагает встроенную поддержку конкарентности и протоколов связи. +- Разработан для многоядерных процессоров. + +Go - компилируемый язык. Он сочетает в себе эффективность разработки интерпретируемых или динамически типизированных языков и безопасность статически типизируемых языков. Его задача - стать оптимальным вариантом среди языков программирования для современных многоядерных компьютеров, работающих в сети. Чтобы стать таким языком, нужно решить несколько задач, таких как поддержка богатой, выразительной и легкой системы типизации, поддержка одновременности выполнения процедур "из коробки" и точно регулируемая сборка мусора. Иногда при программировании на каком-либо языке оказывалось так, что пакетов для решения всех этих задач практичным способом просто не было. Это и явилось причиной появления языка Go. + +В этой главе я покажу, как установить и настроить среду разработки на Go. + +## Ссылки + +- [Содержание](preface.md) +- Следующий раздел: [Установка](01.1.md) diff --git a/ru/01.1.md b/ru/01.1.md new file mode 100644 index 00000000..4c865d9c --- /dev/null +++ b/ru/01.1.md @@ -0,0 +1,120 @@ +# 1.1 Установка + +## 3 способа установить Go + +Существует несколько способов установить Go, можете выбирать, какой Вам больше нравится. 3 наиболее распространенных таковы: + +- Установка из пакетов. + - Команда разработчиков Go предлагает установочные пакеты для Windows, Linux, Mac и других операционных систем. Это, вероятно, наиболее легкий путь. +- Установка из исходного кода. + - Это метод популярен среди разработчиков, которые знакомы с работой в Unix-подобных системах. +- Установка с использованием сторонних инструментов. + - Существует множество сторонних инструментов и менеджеров пакетов для установки Go, таких как apt-get в Ubuntu и homebrew для Mac. + +В случае, если Вы собираетесь установить несколько версий Go на одном компьютере, советую Вам ознакомиться с инструментом [GVM](https://github.com/moovweb/gvm). Это лучший инструмент для решения этой задачи, который я когда-либо встречал. Впрочем, решать Вам. + +## Установка из исходного кода + +Поскольку Go частично написан на Plan 9 C и AT&T assembler, Вам нужно установить компилятор C перед тем, как продолжить. + +На Mac у Вас есть компилятор, если на компьютере установлен Xcode. + +На Unix-подобных системах Вам нужно установить gcc или подобный ему компилятор. Например, используя пакетный менеджер apt-get, по умолчанию включенный в Ubuntu, можно установить требуемые пакеты следующей командой: + + `sudo apt-get install gcc libc6-dev` + +На Windows для установки gcc Вам нужно сначала установить MinGW. Не забудьте настроить переменные окружения после завершения установки. ( ***Все, что выглядит таким образом - здесь и далее добавлено переводчиком на английский - если Вы используете 64-битную Windows, Вам нужно будет установить 64-битную версию MiniGW*** ) + +Итак, для того, чтобы скачать исходные коды Go и скомпилировать их, выполните следующие команды ( ***При этом исходники скачаются в тот каталог, в которой Вы находитесь. Для того, чтобы скачать их в другой каталог, сначала перейдите в нее.***): + + git clone https://go.googlesource.com/go + cd go/src + ./all.bash + +В случае успешной установки по ее завершении появится сообщение "ALL TESTS PASSED." + +На Windows то же самое можно сделать с помощью запуска файла `all.bat`. + +Если Вы используете Windows, установщик настроит переменные окружения автоматически. В Unix-подобных системах Вам нужно будет настроить их самому следующим образом ( ***Если устанавливаемая версия Go больше 1.0, настраивать переменную $GOBIN не надо, она автоматически будет равна $GOROOT/bin, о чем мы поговорим в следующем разделе***): + + export GOROOT=$HOME/go + export GOBIN=$GOROOT/bin + export PATH=$PATH:$GOROOT/bin + +Если Вы видите следуюую информацию, все настроено правильно: + +![](images/1.1.mac.png?raw=true) + +Рисунок 1.1 Информация после установки из исходных кодов. + +Если Вы видите информацию о том, как пользоваться Go (Usage), это значит, что Вы успешно установили Go. Если же выдается "no such command", проверьте переменную $PATH на предмет содержания в ней пути к каталогу установки Go. + +## Установка, используя стандартные установочные пакеты + +Для каждой из поддерживаемых операционных систем в Go имеются установочные пакеты, из которых можно легко произвести установку одним щелчком мыши. Они установят Go в каталог `/usr/local/go` (`c:\Go` в Windows) по умлочанию. Конечно, Вы можете изменить путь установки, но в этом случае Вам придется изменить также и значения переменных окружения так, как было показано выше. + +### Как проверить, 32-битная или 64-битная у Вас операционная система? + +Следующий наш шаг зависит от разрядности Вашей операционной системы, поэтому перед загрузкой пакетов нам надо ее узнать. + +Если у Вас Windows, нажмите `Win+R` и запустите командную строку. Выполните команду `systeminfo`, которая выдаст Вам информацию о системе. Найдите строку, содержащую "system type" - если Вы видите "x64-based PC", это означает 64-битную ОС, в другом случае - 32-битную. + +Я настоятельно рекомендую использовать 64-битный пакет, если Вы - пользователь Mac, так как Go больше не поддерживает 32-битные процессоры на Mac OSX. + +Пользователям Linux можно выполнить команду `uname -a` в терминале для того, чтобы ознакомиться с информацией о системе. +64-битная ОС покажет следующее: + + <...некоторая информация...> x86_64 x86_64 x86_64 GNU/Linux + // некоторые ОС типа Ubuntu 10.04 покажут следующее: + x86_64 GNU/Linux + +32-битная ОС - следующее: + + <...информация...> i686 i686 i386 GNU/Linux + +### Mac + +Зайдите на [страницу загрузки](https://golang.org/dl/), выберите `go1.4.2.darwin-386.pkg` для 32-битных систем или `go1.4.2.darwin-amd64.pkg` для 64-битных. Далее жмите все время "next", `~/go/bin` будет добавлен к системной переменной $PATH после того, как установка закончится. Теперь откройте терминал и напечатайте `go`. Вы должны увидеть то же, что показано на рисунке 1.1. + +### Linux + +Зайдите на [страницу загрузки](https://golang.org/dl/), выберите `go1.4.2.linux-386.tar.gz` для 32-битных систем или `go1.4.2.linux-amd64.tar.gz` для 64-битных. Предположим, Вы хотите установить Go в каталог `$GO_INSTALL_DIR`. Распакуйте `tar.gz` в этот каталог командой `tar zxvf go1.4.2.linux-amd64.tar.gz -C $GO_INSTALL_DIR`. Затем измените прееменную $PATH следующим образом: `export PATH=$PATH:$GO_INSTALL_DIR/go/bin`. Теперь откройте терминал и напечатайте `go`. Вы должны увидеть то же, что показано на рисунке 1.1. + +### Windows + +Зайдите на [страницу загрузки](https://golang.org/dl/), выберите `go1.4.2.windows-386.msi` для 32-битных систем или `go1.4.2.windows-amd64.msi` для 64-битных. Далее жмите все время "next", `c:/go/bin` будет добавлен к системной переменной $PATH после того, как установка закончится. Теперь откройте терминал и напечатайте `go`. Вы должны увидеть то же, что показано на рисунке 1.1. + +## Установка с использованием сторонних инструментов + +### GVM + +GVM - это инструмент управления версиями Go, разработанный сторонними разработчиками, наподобие rvm для ruby. Он довольно-таки легок в использовании. Установить gvm можно следующей командой в терминале: + + bash < <(curl -s -S -L https://raw.github.com/moovweb/gvm/master/binscripts/gvm-installer) + +Теперь можно устанавливать Go с помощью следующих команд: + + gvm install go1.4.2 + gvm use go1.4.2 + +На этом процесс установки закончен. + +### apt-get + +Ubuntu - это наиболее распространенный релиз Linux для рабочих станций. Он использует `apt-get` для управления пакетами. С помощью него мы можем установить Go с помощью следующих команд: + + sudo add-apt-repository ppa:gophers/go + sudo apt-get update + sudo apt-get install golang-stable + +### Homebrew + +Homebrew - это инструмент для управления пакетами, используемый в Mac. Используя его, можно установить Go следующей командой: + + brew install go + +## Ссылки + +- [Содержание](preface.md) +- Предыдущий раздел: [Настройка окружения Go](01.0.md) +- Следующий раздел: [$GOPATH и рабочий каталог](01.2.md) diff --git a/ru/01.2.md b/ru/01.2.md new file mode 100644 index 00000000..29dfad0c --- /dev/null +++ b/ru/01.2.md @@ -0,0 +1,151 @@ +#1.2 $GOPATH и рабочий каталог + +## $GOPATH + +Все команды Go зависят от переменной окружения $GOPATH. Имейте в виду, что это не переменная $GOROOT, в которой хранится путь установки Go. Эта переменная указывает на рабочий каталог Go на Вашем компьютере (я использую этот путь у себя на компьютере; Вы можете заменить его по своему усмотрению, если структура каталогов на вашем компьютере другая). + +В Unix-подобных системах переменную можно задать следующим образом: + + export GOPATH=/home/apple/mygo + +В Windows Вам нужно создать новую переменную окружения GOPATH, а затем задать ей значение `c:\mygo`( ***Оно заваисит от того, где расположен Ваш рабочий каталог*** ) + +$GOPATH при Вашем желании может содержать больше одного пути к рабочим каталогам, но помните, что следует использовать знак `:`(или `;` в Windows) для того, чтобы разделять их. В этом случае `go get` будет сохранять содержимое в первый путь из тех, что указаны в $GOPATH. + +В $GOPATH должно находиться три следующих папки: + +- `src` для текстов исходных кодов с расширениями .go, .c, .g, .s. +- `pkg` для скомпилированных файлов с расширением .a. +- `bin` для исполняемых файлов. + +В этой книге я буду использовать `mygo` в качестве единственного пути в $GOPATH. + +## Каталог пакета + +Создайте каталоги и исходные файлы пакетов, такие как `$GOPATH/src/mymath/sqrt.go` (где `mymath` - имя пакета) ( ***Автор использует `mymath` в качестве имени пакета и в качестве имени каталога, где располагаются исходные файлы этого пакета***) + +Каждый раз при создании пакета Вы должны создать новый каталог в каталоге 'src'. Каталог обычно называется так же, как и пакет, который предполагается использовать. Можно использовать многоуровневую структуру каталогов, если нужно. Например, если создать каталог `$GOPATH/src/github.com/astaxie/beedb`, то путь к пакету будет `github.com/astaxie/beedb`. Имя пакета - это имя последнего каталога пути, в данном случае `beedb`. + +Выполните следующие команды: ( ***Сейчас автор возвращается к примеру*** ) + + cd $GOPATH/src + mkdir mymath + +Создайте новый файл `sqrt.go` и поместите туда следующее: + + // Исходный код $GOPATH/src/mymath/sqrt.go + package mymath + + func Sqrt(x float64) float64 { + z := 0.0 + for i := 0; i < 1000; i++ { + z -= (z*z - x) / (2 * x) + } + return z + } + +Сейчас нами создан каталог пакета, в пакете содержится код. Я рекомендую использовать одни и те же названия для пакетов и каталогов, в которых они находятся; таким образом, каталог будет содержать все исходные файлы пакета. + +## Компиляция пакетов + +Мы только что создали пакет, но как нам теперь скомпилировать его для того, чтобы потом использовать? Для этого существуют два способа: + +1. Перейдите в каталог пакета и выполните команду `go install`. +2. Выполните вышеуказанную команду с указанием имени файла, например `go install mymath`. + +После компиляции можно открыть каталог: + + cd $GOPATH/pkg/${GOOS}_${GOARCH} + // Вы увидите созданный файл + mymath.a + +Файл с расширением `.a` - это исполняемый файл нашего пакета. Как его можно использовать? + +Очевидно, что для этого нам нужно создать какое-нибудь приложение. + +Создайте новое приложение под названием `mathapp`. + + cd $GOPATH/src + mkdir mathapp + cd mathapp + vim main.go + +Код: + + //$GOPATH/src/mathapp/main.go source code. + package main + + import ( + "mymath" + "fmt" + ) + + func main() { + fmt.Printf("Hello, world. Sqrt(2) = %v\n", mymath.Sqrt(2)) + } + +Для того, чтобы скомпилировать это приложение, перейдите в каталог с приложением `$GOPATH/src/mathapp`, затем выполните команду `go install`. Вы должны увидеть, как исполняемый файл `mathapp` появился в каталоге `$GOPATH/bin/`. Для запуска приложения выполните команду `./mathapp`. Вы должны увидеть следующее в терминале: + + Hello world. Sqrt(2) = 1.414213562373095 + +## Установка удаленных пакетов + +В Go есть инструмент для установки удаленных пакетов - команда `go get`. Он поддерживает работу с большинством сообществ Open Source, включая Github, Google Code, BitBucket и Launchpad. + + go get github.com/astaxie/beedb + +Чтобы обновить Ваши удаленные пакеты, выполните `go get -u …`, при этом установятся все дополнительные зависимости . + +Для разных Open Source платформ потребуются различные системы контроля версий, например `git` для Github и `hg` для Google Code. Поэтому Вам нужно установить соответствующие системы контроля версий перед использованием `go get`. + +После выполнения команд выше структура каталогов будет выглядеть следующим образом: + + $GOPATH + src + |-github.com + |-astaxie + |-beedb + pkg + |--${GOOS}_${GOARCH} + |-github.com + |-astaxie + |-beedb.a + +Фактически `go get` делает точную копию кода в $GOPATH/src локальной файловой системы, а затем выполняет `go install`. + +Удаленные пакеты можно использовать так же, как и локальные: + + import "github.com/astaxie/beedb" + +## Полная структура каталогов + +Если Вы выполнили все предыдущие шаги, структура каталогов должна выглядеть следующим образом: + + bin/ + mathapp + pkg/ + ${GOOS}_${GOARCH}, например darwin_amd64, linux_amd64 + mymath.a + github.com/ + astaxie/ + beedb.a + src/ + mathapp + main.go + mymath/ + sqrt.go + github.com/ + astaxie/ + beedb/ + beedb.go + util.go + +Можно ясно видеть структуру каталогов: `bin` содержит исполняемые файлы, `pkg` - скомпилированные файлы и `src` - исходные коды пакетов. + +(В Windows переменная окружения называется `%GOPATH%`, однако эта книга следует в основном стилю Unix. Если Вы пользуетесь Windows, замените везде ее название сами.) + +## Ссылки + +- [Содержание](preface.md) +- Предыдущий раздел: [Установка](01.1.md) +- Следующий раздел: [Утилиты Go](01.3.md) diff --git a/ru/01.3.md b/ru/01.3.md new file mode 100644 index 00000000..2ac03d2f --- /dev/null +++ b/ru/01.3.md @@ -0,0 +1,106 @@ +#1.3 Утилиты Go + +## Утилиты Go + +Язык Go имеет в своем распоряжении полный набор утилит, выполняемых из командной строки. Вы можете исполнить в терминале команду `go`, чтобы увидеть их: + +![](images/1.3.go.png?raw=true) + +Рисунок 1.3 Команда Go показывает подробную информацию + +Все эти утилиты могут быть нам полезными. Давайте посмотрим, как пользоваться некоторыми из них. + +## go build + +Эта утилита компилирует тесты. По необходимости она также скомпилирует зависимости. + +- Если имя пакета не `main`, а, например, `mymath` из раздела 1.2, то после того, как Вы выполните `go build`, ничего не скомпилируется. Если Вы хотите скомпилировать файл `.a` в `$GOPATH/pkg`, Вам вместо этого нужно выполнить `go install`. +- Если имя пакета - `main`, то в каталоге, откуда Вы запустили утилиту, будет создан исполняемый файл. Если Вы хотите, чтобы файл был создан в `$GOPATH/bin`, используйте `go install` или `go build -o ${указать путь}/a.exe.` +- Если в каталоге много файлов, но Вы хотите скомпилировать только один, Вам нужно добавить имя файла после `go build`. Например, `go build a.go`. Просто `go build` скомпилирует все файлы в каталоге. +- Вы также можете указать имя исполняемого файла, который будет создан. Например, в проекте `mathapp` (раздел 1.2), команда `go build -o astaxie.exe` создаст `astaxie.exe` вместо `mathapp.exe`. Именем по умолчанию для исполняемого файла является имя каталога (если пакет не main) или название первого файла-исходника (если пакет - main). + +(Согласно [The Go Programming Language Specification](https://golang.org/ref/spec) имя пакета должно следовать после слова `package` в первой строке исходного файла. Оно не обязательно должно быть таким же, как имя каталога, и имя исполняемого файла по умлочанию будет таким же, как и имя каталога.) + +- `go build` не работает с файлами, имя которых начинается на `_` или `.`. +- Если Вам нужно несколько исходных файлов для каждой операционной системы, Вы можете в конце каждого имени файла добавить соответствующий суффикс ОС. Предположим, имеется несколько файлов для загрузки массивов. Можно назвать их следующим образом: + + array_linux.go | array_darwin.go | array_windows.go | array_freebsd.go + +`go build` выберет тот, который соответствует Вашей ОС. Например, в Linux-системах он скомпилирует только array_linux.go, а все остальные файлы, начинающиеся с array_, проигнорирует. + +## go clean + +Эта команда удаляет все файлы, созданные компилятором, включая следующие: + + _obj/ // старый каталог object, созданный Makefiles + _test/ // старый каталог test, созданный Makefiles + _testmain.go // старый каталог gotest, созданный Makefiles + test.out // старый каталог test, созданный Makefiles + build.out // старый каталог test, созданный Makefiles + *.[568ao] // объектные файлы, созданные Makefiles + + DIR(.exe) // создано go build + DIR.test(.exe) // создано go test -c + MAINFILE(.exe) // создано go build MAINFILE.go + +Я обычно пользуюсь этой командой, чтобы почистить свой проект от файлов перед тем, как загрузить его на Github. Эти файлы полезны на этапе тестов, но не нужны для контроля версий. + +## go fmt и gofmt + +Те из вас, которые работают с C/C++, должны знать, что люди часто дискутируют, какой стиль написания кода лучше: K&R-стиль или ANSI-стиль. Однако же в Go есть только один стиль написания кода. Например, левые скобки могут быть только в конце строк, а не на своих отдельных строках, иначе Вы получите ошибку компиляции! К счастью, Вам не нужно запоминать все эти правила. `go fmt` сделает всю работу за Вас. Просто выполните команду `go fmt <Имя файла>.go` в терминале. Я не пользуюсь этой командой часто, поскольку среды разработки делают то же самое автоматически при сохранении проекта. О средах разработки я расскажу подробнее в следующем разделе. + +`go fmt` - это алиас(сокращение) для `gofmt -l -w` для пакетов, указанных в пути команды import. + +Мы обычно используем `gofmt -w` вместо `go fmt`. Последний вариант не переписывает исходники после форматирования кода. `gofmt -w src` форматирует весь проект. + +## go get + +Эта команда служит для установки удаленных пакетов. На данный момент она поддерживает BitBucket, Github, Google Code и Launchpad. При запуске этой команды происходят вещи: первая - Go скачивает исходники пакетов, вторая - исполняется `go install`. Перед использованием этой команды убедитесь, что у Вас установлены соответствующие инструменты: + + BitBucket (Mercurial Git) + Github (git) + Google Code (Git, Mercurial, Subversion) + Launchpad (Bazaar) + +Для того, чтобы использовать эту команду, Вы должны корректно установить эти инструменты. Не забудьте установить переменную `$PATH`. Кстати, эта команда также поддерживает нестандартные доменные имена. Для более детальной информации используйте `go help remote` ( ***Прим. переводчика на русский язык - у меня сработала не эта команда, а `go help importpath`*** ). + +## go install + +Эта команда компилирует все пакеты, создает соответствующие файлы и перемещает их в `$GOPATH/pkg` или `$GOPATH/bin`. + +## go test + +Эта команда загружает все файлы, чьи имена включают в себя `*_test.go` и создает исполняемые файлы тестов, а затем печатает на экране информацию, подобную следующей: + + ok archive/tar 0.011s + FAIL archive/zip 0.022s + ok compress/gzip 0.033s + ... + +По умолчанию она обрабатывает все файлы тестов. Для более подробной информации используйте `go help testflag`. + +## godoc + +Многие говорят, что никакая сторонняя документация для программирования на Go не нужна (вообще я одну сделал - [CHM](https://github.com/astaxie/godoc)). В Go существует мощная утилита для того, чтобы управлять документацией "из коробки". + +Итак, как мы можем ознакомиться с информацией о пакете в документации? Например, если Вы хотите получить подробную информацию о пакете `builtin`, используйте команду `godoc builtin`. Подобным образом Вы можете воспользоваться `godoc net/http` для того, чтобы ознакомиться с документацией по пакету `http`. Если Вам нужно больше деталей об отдельных функциях, выполните `godoc fmt Printf` и `godoc -src fmt Printf`, чтобы увидеть исходный код функции . + +Выполните `godoc -http=:8080`, затем откройте в браузере `127.0.0.1:8080`. Вы должны увидеть локальную версию сайта golang.org. Он покажет не только информацию о стандартных пакетах, но также о пакетах в Вашем `$GOPATH/pkg`. Это здорово для людей, которые страдают от Великого Китайского Файерволла. + +## Другие утилиты + +В Go есть больше утилит, чем те, о которых мы только что говорили: + + go fix // делает апгрейд кода, написанного в версии, старее, чем go1 до новой версии (после go1) + go version // выдает информацию об установленной версии Go + go env // выдает информацию о переменных окружения Go + go list // перечисляет все установленные пакеты + go run // компилирует во временные файлы и запускает приложение + +По этим утилитам есть также более детальная информация. Вы можете воспользоваться `go help <утилита>`, чтобы ознакомиться с ней. + +## Ссылки + +- [Содержание](preface.md) +- Предыдущий раздел: [$GOPATH и рабочий каталог](01.2.md) +- Следующий раздел: [Инструменты разработки для Go](01.4.md) diff --git a/ru/01.4.md b/ru/01.4.md new file mode 100644 index 00000000..c38005e5 --- /dev/null +++ b/ru/01.4.md @@ -0,0 +1,409 @@ +# Инструменты разработки для Go + +В этом разделе я ознакомлю Вас с несколькими средами разработки (IDE), которые помогут Вам более эффективно программировать. Они обладают такими возможностями как умное автодополнение и автоформатирование. Все они кроссплатформенные, поэтому шаги по настройке, которые я покажу, не будут слишком отличаться в зависимости от операционной системы, которую Вы используете. + +## LiteIDE + +LiteIDE - нетребовательный к ресурсам системы IDE с открытым исходным кодом, который предназначен для разработки проектов только на Go. Он разработан visualfc. + +![](images/1.4.liteide.png?raw=true) + +Рисунок 1.4 Главная панель LiteIDE + +Отличительные черты LiteIDE: + +- Кроссплатформенность + - Windows + - Linux + - Mac OS +- Кросскомпилируемость + - Поддерживает разные среды компиляции + - Поддерживает кросс-компиляцию проектов на Go +- Управление проектами + - Представление досументации основано на $GOPATH + - Система компиляции основана на $GOPATH + - Документация API основана на $GOPATH +- Редактор исходного кода Go + - Схема кода + - Полная поддержка gocode + - Доступ к документации Go и содержанию API + - Просмотр выражений языка через `F1` + - Переход к декларациям функций по `F2` + - Поддержка Gdb + - Автоформат через `gofmt` +- Другое + - Поддержка множества языков + - Система плагинов + - Темы текстового редактора + - Поддержка синтаксиса основана на Kate + - Умное полнотекстовое автодополнение + - Настраиваемые сочетания клавиш для быстрого выполнения задач + - Поддержка Markdown + - Предпросмотр в реальном времени + - Настраиваемые CSS + - Экспорт в HTML и PDF + - Конвертация и слияние в HTML и PDF + +### Установка LiteIDE + +- Установите LiteIDE: + - [Страница загрузки](http://code.google.com/p/golangide) + - [Исходные коды](https://github.com/visualfc/liteide) + + Сначала установите Go, затем скачайте версию LiteIDE, соответствующую Вашей операционной системе. Распакуйте скачанный пакет. + +- Установите gocode: + + Для того, чтобы заработало автодополнение, установите gocode. + + go get -u github.com/nsf/gocode + +- Настройте среду компиляции: + + Теперь измените конфигурацию LiteIDE согласно Вашей операционной системе. + В Windows, если Вы используете 64-битную версию Go, Вам нужно выбрать на панели инструментов win64 в качестве среды конфигурации. Затем выберите `opinion`, найдите `LiteEnv` в левом списке и откройте `win64.env` в правом списке. + + GOROOT=c:\go + GOBIN= + GOARCH=amd64 + GOOS=windows + CGO_ENABLED=1 + + PATH=%GOBIN%;%GOROOT%\bin;%PATH% + 。。。 + + Замените `GOROOT=c:\go` на свой путь установки Go, сохраните. Если у Вас есть MinGW64, добавьте в переменную окружения path значение `c:\MinGW64\bin` для поддержки `cgo`. + + В 64-битном Linux нужно выбрать linux64 на панели инструментов в качестве среды конфигурации. Затем выберите `opinion`, найдите `LiteEnv` в левом списке и выберите файл `linux64.env` в правом. + + GOROOT=$HOME/go + GOBIN= + GOARCH=amd64 + GOOS=linux + CGO_ENABLED=1 + + PATH=$GOBIN:$GOROOT/bin:$PATH + 。。。 + + Замените `GOROOT=$HOME/go` на тот, где у Вас установлен Go, сохраните. +- $GOPATH + + $GOPATH - это путь, указывающий на то, где находятся проекты. Для получения подробностей откройте командную строку (или нажмите ``Ctrl+`пробел``в LiteIDE), а затем напечатайте `go help gopath`. + В LiteIDE очень легко увидеть и изменить значение $GOPATH. Для этого зайдите в `View - Setup GOPATH`. + +## Sublime Text + +Сейчас я хочу рассказать про Sublime Text 2 (для краткости Sublime) + GoSublime + gocode + MarGo. И вот почему: + +- Умное автодополнение + + ![](images/1.4.sublime1.png?raw=true) + + Рисунок 1.5 Умное автодополнение Sublime. + +- Автоформатирование исходных кодов +- Управление проектами + + ![](images/1.4.sublime2.png?raw=true) + + Рисунок 1.6 Управление проектами в Sublime + +- Подсветка синтаксиса +- Пробный период без функциональных ограничений навсегда. Вам могут напоминать о том, что нужно приобрести лицензию, но можно это игнорировать, если хотите. Конечно же, если Вы поймете, что Sublime увеличил Вашу производительность, и Вам он нравится, приобретите, пожалуйста, лицензионную копию и поддержите таким образом развитие проекта! + +Сначала скачайте версию [Sublime](http://www.sublimetext.com/), соответствующую Вашей операционной системе. + +1. Нажмите ``Ctrl+`пробел``, откройте командную строку и введите следующие команды: + + 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 'Пожалуйста, перезапустите Sublime Text для завершения установки' + + Когда процесс установки закончится, перезапустите Sublime Text. Затем найдите опцию `Package Control` в меню "Preferences". + + ![](images/1.4.sublime3.png?raw=true) + + Рисунок 1.7 Sublime Package Control +2. Для установки GoSublime, SidebarEnhancements и Go Build, нажмите `Ctrl+Shift+p`, чтобы открыть управление пакетами, затем напечатайте `pcip` (сокращение от "Package Control: Install Package"). + + ![](images/1.4.sublime4.png?raw=true) + + Рисунок 1.8 Установка пакетов Sublime + + Теперь введите "GoSublime", нажмите OK для установки пакета и повторите те же шаги для установки SidebarEnhancements и Go Build. По завершении установки снова перезапустите редактор. + +3. Чтобы проверить, успешно ли прошла установка, откройте Sublime, откройте файл `main.go` и проверьте, правильно ли подсвечивается синтаксис. Напечатайте `import` и проверьте, правильно ли работает автодополнение кода. После того, как Вы ввели `import "fmt"`, напечатайте `fmt.` где-нибудь после выражения `import` и проверьте, работает ли автодополнение для функций. + + Если все работает, это значит, что Вы все настроили правильно. + + Если нет, еще раз проверьте значение переменной $PATH. Откройте терминал, выполните `gocode`. Если запуск не произошел, переменная $PATH настроена неправильно. + +## Vim + +Vim - это популярный текстовый редактор для программистов, происшедший от своего предшественника Vi. У него есть функции умного автодополнения, компиляции и перехода к ошибкам. + +![](images/1.4.vim.png?raw=true) + +Рисунок 1.8 Умное автодополнение для Go в Vim + +1. Установите подсветку ситаксиса для Go: + + cp -r $GOROOT/misc/vim/* ~/.vim/ + +2. Включите подсветку синтаксиса: + + filetype plugin indent on + syntax on + +3. Установите [gocode](https://github.com/nsf/gocode/): + + go get -u github.com/nsf/gocode + + gocode по умолчанию будет установлен в `$GOBIN`. + +4. Настройте [gocode](https://github.com/nsf/gocode/): + + ~ cd $GOPATH/src/github.com/nsf/gocode/vim + ~ ./update.bash + ~ gocode set propose-builtins true + propose-builtins true + ~ gocode set lib-path "/home/border/gocode/pkg/linux_amd64" + lib-path "/home/border/gocode/pkg/linux_amd64" + ~ gocode set + propose-builtins true + lib-path "/home/border/gocode/pkg/linux_amd64" + + Немного о конфигурации gocode: + + propose-builtins: определяет, нужно ли включать умное автодополнение; по умолчанию false. + + lib-path: изначально gocode ищет пакеты в `$GOPATH/pkg/$GOOS_$GOARCH` и `$GOROOT/pkg/$GOOS_$GOARCH`. Эта настройка нужна для добавления дополнительных путей. + +5. Поздравляем! Попробуйте `:e main.go` для погружения в мир Go! + +## Emacs + +Emacs называют оружием Бога. Это не только редактор, но и мощная IDE. + +![](images/1.4.emacs.png?raw=true) + +Рисунок 1.10 Главная панель редактора Go в Emacs + +1. Установите подсветку синтаксиса: + + cp $GOROOT/misc/emacs/* ~/.emacs.d/ + +2. Установите [gocode](https://github.com/nsf/gocode/): + + go get -u github.com/nsf/gocode + + По умолчанию gocode будет установлен в `$GOBIN`. + +3. Настройте [gocode](https://github.com/nsf/gocode/): + + ~ cd $GOPATH/src/github.com/nsf/gocode/vim + ~ ./update.bash + ~ gocode set propose-builtins true + propose-builtins true + ~ gocode set lib-path "/home/border/gocode/pkg/linux_amd64" + lib-path "/home/border/gocode/pkg/linux_amd64" + ~ gocode set + propose-builtins true + lib-path "/home/border/gocode/pkg/linux_amd64" + +4. Установите [автодополнение](http://www.emacswiki.org/emacs/AutoComplete): + + Скачайте и распакуйте: + + ~ make install DIR=$HOME/.emacs.d/auto-complete + + Настройте файл ~/.emacs: + + ;;auto-complete + (require 'auto-complete-config) + (add-to-list 'ac-dictionary-directories "~/.emacs.d/auto-complete/ac-dict") + (ac-config-default) + (local-set-key (kbd "M-/") 'semantic-complete-analyze-inline) + (local-set-key "." 'semantic-complete-self-insert) + (local-set-key ">" 'semantic-complete-self-insert) + + Для более подробной информации пройдите по [ссылке](http://www.emacswiki.org/emacs/AutoComplete). + +5. Настройте файл .emacs: + + ;; golang mode + (require 'go-mode-load) + (require 'go-autocomplete) + ;; speedbar + ;; (speedbar 1) + (speedbar-add-supported-extension ".go") + (add-hook + 'go-mode-hook + '(lambda () + ;; gocode + (auto-complete-mode 1) + (setq ac-sources '(ac-source-go)) + ;; Imenu & Speedbar + (setq imenu-generic-expression + '(("type" "^type *\\([^ \t\n\r\f]*\\)" 1) + ("func" "^func *\\(.*\\) {" 1))) + (imenu-add-to-menubar "Index") + ;; Outline mode + (make-local-variable 'outline-regexp) + (setq outline-regexp "//\\.\\|//[^\r\n\f][^\r\n\f]\\|pack\\|func\\|impo\\|cons\\|var.\\|type\\|\t\t*....") + (outline-minor-mode 1) + (local-set-key "\M-a" 'outline-previous-visible-heading) + (local-set-key "\M-e" 'outline-next-visible-heading) + ;; Menu bar + (require 'easymenu) + (defconst go-hooked-menu + '("Go tools" + ["Go run buffer" go t] + ["Go reformat buffer" go-fmt-buffer t] + ["Go check buffer" go-fix-buffer t])) + (easy-menu-define + go-added-menu + (current-local-map) + "Go tools" + go-hooked-menu) + + ;; Other + (setq show-trailing-whitespace t) + )) + ;; helper function + (defun go () + "run current buffer" + (interactive) + (compile (concat "go run " (buffer-file-name)))) + + ;; helper function + (defun go-fmt-buffer () + "run gofmt on current buffer" + (interactive) + (if buffer-read-only + (progn + (ding) + (message "Buffer is read only")) + (let ((p (line-number-at-pos)) + (filename (buffer-file-name)) + (old-max-mini-window-height max-mini-window-height)) + (show-all) + (if (get-buffer "*Go Reformat Errors*") + (progn + (delete-windows-on "*Go Reformat Errors*") + (kill-buffer "*Go Reformat Errors*"))) + (setq max-mini-window-height 1) + (if (= 0 (shell-command-on-region (point-min) (point-max) "gofmt" "*Go Reformat Output*" nil "*Go Reformat Errors*" t)) + (progn + (erase-buffer) + (insert-buffer-substring "*Go Reformat Output*") + (goto-char (point-min)) + (forward-line (1- p))) + (with-current-buffer "*Go Reformat Errors*" + (progn + (goto-char (point-min)) + (while (re-search-forward "" nil t) + (replace-match filename)) + (goto-char (point-min)) + (compilation-mode)))) + (setq max-mini-window-height old-max-mini-window-height) + (delete-windows-on "*Go Reformat Output*") + (kill-buffer "*Go Reformat Output*")))) + ;; helper function + (defun go-fix-buffer () + "run gofix on current buffer" + (interactive) + (show-all) + (shell-command-on-region (point-min) (point-max) "go tool fix -diff")) +6. Поздравляем, все готово! Панель скорости по умолчанию отключена - для включения удалите символы комментария в строке `;;(speedbar 1)`, или можно сделать это посредством `M-x speedbar`. + +## Eclipse + +Eclipse также является отличным инструментом разработки. Я покажу Вам, как использовать его для того, чтобы писать программы на Go. + +![](images/1.4.eclipse1.png?raw=true) + +Рисунок 1.1 Основная панель Eclipse для редактирования кода на Go + +1. Скачайте и установите [Eclipse](http://www.eclipse.org/). +2. Скачайте [goclipse](https://code.google.com/p/goclipse/) [http://code.google.com/p/goclipse/wiki/InstallationInstructions](http://code.google.com/p/goclipse/wiki/InstallationInstructions). +3. Скачайте gocode: + + gocode на Github: + + https://github.com/nsf/gocode + + В Windows Вам нужно установить git, обычно мы используем [msysgit](https://msysgit.github.com/). + + В командной строке установите gocode: + + go get -u github.com/nsf/gocode + + Если хотите, можете установить его из исходных кодов. + +4. Скачайте и установите [MinGW](http://sourceforge.net/projects/mingw/files/MinGW/). +5. Настройте плагины: + + Windows->Preferences->Go + + (1).Настройте компилятор Go. + + ![](images/1.4.eclipse2.png?raw=true) + + Рисунок 1.12 Настройки Go в Eclipse + + (2).Настройте gocode (если нужно), установите путь к gocode туда, где находится gocode.exe. + + ![](images/1.4.eclipse3.png?raw=true) + + Рисунок 1.13 Настройки gocode + + (3).Настройте gdb (по желанию), установите путь к gdb туда, где находится gdb.exe. + + ![](images/1.4.eclipse4.png?raw=true) + + Рисунок 1.14 Установки gdb + +6. Проверьте правильность установки: + + Создайте новый проект Go и файл hello.go как на рисунке: + + ![](images/1.4.eclipse5.png?raw=true) + + Рисунок 1.15 Создание нового проекта и файла + + Протестируйте установку так (Вам нужно напечатать команду в консоли Eclipse): + + ![](images/1.4.eclipse6.png?raw=true) + + Рисунок 1.16 Тестирование программы Go в Eclipse + +## IntelliJ IDEA + +Те, кто работал с Java, должны быть знакомы с этой IDE. Она поддерживает подсветку синтаксиса Go и умное автодополнение кода посредством плагина. + +1. Скачайте IDEA, подойдут версии и Ultimate, и Community. + + ![](images/1.4.idea1.png?raw=true) + +2. Установите плагин Go. Выберите `File - Setting - Plugins`, затем выберите `Browser repo`. + + ![](images/1.4.idea3.png?raw=true) + +3. Выберите `golang`, затем двойным щелчком мыши `download and install` и подождите, пока завершится загрузка. + + ![](images/1.4.idea4.png?raw=true) + + Нажмите `Apply`, затем перезапустите приложение. + +4. Теперь можно создавать проект Go. + + ![](images/1.4.idea5.png?raw=true) + + Введите расположение Go sdk на следующем шаге - скорее всего, это $GOROOT. + +( ***Смотрите [Пост блога](http://wuwen.org/tips-about-using-intellij-idea-and-go/) об установке и использовании IntelliJ IDEA с Go шаг за шагом*** ) + +## Ссылки + +- [Содержание](preface.md) +- Предыдуший раздел: [Утилиты Go](01.3.md) +- Следующий раздел: [Итоги раздела](01.5.md) diff --git a/ru/01.5.md b/ru/01.5.md new file mode 100644 index 00000000..73dda7d0 --- /dev/null +++ b/ru/01.5.md @@ -0,0 +1,9 @@ +# 1.5 Итоги раздела + +В этом разделе мы поговорили о том, как установить Go тремя различными способами - из исходных кодов, из стандартных пакетов и с помощью сторонних утилит. Затем мы показали, как настроить окружение Go, в основном как установить нужное значение переменной $GOPATH. После этого мы рассказали о последовательности шагов для того, чтобы скомпилировать программу на Go. Мы также поговорили об утилитах командной строки Go, включая утилиты для компилирования, установки, форматирования и тестирования. И, наконец, существует множество инструментов разработки для Go, таких как LiteIDE, Sublime Text, Vim, Emacs, Eclipse, IntelliJ IDEA и т.д. Вы можете выбрать любой из них для того, чтобы исследовать мир Go. + +## Ссылки + +- [Содержание](preface.md) +- Предыдущий раздел: [Инструменты разработки для Go](01.4.md) +- Следующий раздел: [Основы Go](02.0.md) diff --git a/ru/images/1.1.cmd.png b/ru/images/1.1.cmd.png new file mode 100644 index 00000000..0df2504b Binary files /dev/null and b/ru/images/1.1.cmd.png differ diff --git a/ru/images/1.1.linux.png b/ru/images/1.1.linux.png new file mode 100644 index 00000000..539563d9 Binary files /dev/null and b/ru/images/1.1.linux.png differ diff --git a/ru/images/1.1.mac.png b/ru/images/1.1.mac.png new file mode 100644 index 00000000..ad2ceed6 Binary files /dev/null and b/ru/images/1.1.mac.png differ diff --git a/ru/images/1.3.go.png b/ru/images/1.3.go.png new file mode 100644 index 00000000..8155b2d5 Binary files /dev/null and b/ru/images/1.3.go.png differ diff --git a/ru/images/1.4.eclipse1.png b/ru/images/1.4.eclipse1.png new file mode 100644 index 00000000..5b2f10d8 Binary files /dev/null and b/ru/images/1.4.eclipse1.png differ diff --git a/ru/images/1.4.eclipse2.png b/ru/images/1.4.eclipse2.png new file mode 100644 index 00000000..55931f33 Binary files /dev/null and b/ru/images/1.4.eclipse2.png differ diff --git a/ru/images/1.4.eclipse3.png b/ru/images/1.4.eclipse3.png new file mode 100644 index 00000000..3c7bd634 Binary files /dev/null and b/ru/images/1.4.eclipse3.png differ diff --git a/ru/images/1.4.eclipse4.png b/ru/images/1.4.eclipse4.png new file mode 100644 index 00000000..d4ee77af Binary files /dev/null and b/ru/images/1.4.eclipse4.png differ diff --git a/ru/images/1.4.eclipse5.png b/ru/images/1.4.eclipse5.png new file mode 100644 index 00000000..8a89555d Binary files /dev/null and b/ru/images/1.4.eclipse5.png differ diff --git a/ru/images/1.4.eclipse6.png b/ru/images/1.4.eclipse6.png new file mode 100644 index 00000000..7771ec2e Binary files /dev/null and b/ru/images/1.4.eclipse6.png differ diff --git a/ru/images/1.4.emacs.png b/ru/images/1.4.emacs.png new file mode 100644 index 00000000..3dd6845f Binary files /dev/null and b/ru/images/1.4.emacs.png differ diff --git a/ru/images/1.4.idea1.png b/ru/images/1.4.idea1.png new file mode 100644 index 00000000..87d2e51e Binary files /dev/null and b/ru/images/1.4.idea1.png differ diff --git a/ru/images/1.4.idea2.png b/ru/images/1.4.idea2.png new file mode 100644 index 00000000..8059b20f Binary files /dev/null and b/ru/images/1.4.idea2.png differ diff --git a/ru/images/1.4.idea3.png b/ru/images/1.4.idea3.png new file mode 100644 index 00000000..574e1d74 Binary files /dev/null and b/ru/images/1.4.idea3.png differ diff --git a/ru/images/1.4.idea4.png b/ru/images/1.4.idea4.png new file mode 100644 index 00000000..f6e5138d Binary files /dev/null and b/ru/images/1.4.idea4.png differ diff --git a/ru/images/1.4.idea5.png b/ru/images/1.4.idea5.png new file mode 100644 index 00000000..7784a611 Binary files /dev/null and b/ru/images/1.4.idea5.png differ diff --git a/ru/images/1.4.liteide.png b/ru/images/1.4.liteide.png new file mode 100644 index 00000000..f28d755e Binary files /dev/null and b/ru/images/1.4.liteide.png differ diff --git a/ru/images/1.4.sublime1.png b/ru/images/1.4.sublime1.png new file mode 100644 index 00000000..60f2b3db Binary files /dev/null and b/ru/images/1.4.sublime1.png differ diff --git a/ru/images/1.4.sublime2.png b/ru/images/1.4.sublime2.png new file mode 100644 index 00000000..a888636f Binary files /dev/null and b/ru/images/1.4.sublime2.png differ diff --git a/ru/images/1.4.sublime3.png b/ru/images/1.4.sublime3.png new file mode 100644 index 00000000..8b2eb3dc Binary files /dev/null and b/ru/images/1.4.sublime3.png differ diff --git a/ru/images/1.4.sublime4.png b/ru/images/1.4.sublime4.png new file mode 100644 index 00000000..b0fef624 Binary files /dev/null and b/ru/images/1.4.sublime4.png differ diff --git a/ru/images/1.4.vim.png b/ru/images/1.4.vim.png new file mode 100644 index 00000000..27a15c05 Binary files /dev/null and b/ru/images/1.4.vim.png differ diff --git a/ru/images/13.1.flow.png b/ru/images/13.1.flow.png new file mode 100644 index 00000000..b9d6c2f3 Binary files /dev/null and b/ru/images/13.1.flow.png differ diff --git a/ru/images/13.1.gopath.png b/ru/images/13.1.gopath.png new file mode 100644 index 00000000..c948437a Binary files /dev/null and b/ru/images/13.1.gopath.png differ diff --git a/ru/images/13.1.gopath2.png b/ru/images/13.1.gopath2.png new file mode 100644 index 00000000..450b4104 Binary files /dev/null and b/ru/images/13.1.gopath2.png differ diff --git a/ru/images/13.4.beego.png b/ru/images/13.4.beego.png new file mode 100644 index 00000000..96a9d274 Binary files /dev/null and b/ru/images/13.4.beego.png differ diff --git a/ru/images/14.1.bootstrap.png b/ru/images/14.1.bootstrap.png new file mode 100644 index 00000000..13ab7f82 Binary files /dev/null and b/ru/images/14.1.bootstrap.png differ diff --git a/ru/images/14.1.bootstrap2.png b/ru/images/14.1.bootstrap2.png new file mode 100644 index 00000000..753ffc79 Binary files /dev/null and b/ru/images/14.1.bootstrap2.png differ diff --git a/ru/images/14.1.bootstrap3.png b/ru/images/14.1.bootstrap3.png new file mode 100644 index 00000000..460b8183 Binary files /dev/null and b/ru/images/14.1.bootstrap3.png differ diff --git a/ru/images/14.4.github.png b/ru/images/14.4.github.png new file mode 100644 index 00000000..4da4c6f5 Binary files /dev/null and b/ru/images/14.4.github.png differ diff --git a/ru/images/14.4.github2.png b/ru/images/14.4.github2.png new file mode 100644 index 00000000..c3ae04bf Binary files /dev/null and b/ru/images/14.4.github2.png differ diff --git a/ru/images/14.4.github3.png b/ru/images/14.4.github3.png new file mode 100644 index 00000000..e98768c3 Binary files /dev/null and b/ru/images/14.4.github3.png differ diff --git a/ru/images/14.6.pprof.png b/ru/images/14.6.pprof.png new file mode 100644 index 00000000..532f1a76 Binary files /dev/null and b/ru/images/14.6.pprof.png differ diff --git a/ru/images/14.6.pprof2.png b/ru/images/14.6.pprof2.png new file mode 100644 index 00000000..610c93a4 Binary files /dev/null and b/ru/images/14.6.pprof2.png differ diff --git a/ru/images/14.6.pprof3.png b/ru/images/14.6.pprof3.png new file mode 100644 index 00000000..a3b9f7ba Binary files /dev/null and b/ru/images/14.6.pprof3.png differ diff --git a/ru/images/2.2.array.png b/ru/images/2.2.array.png new file mode 100644 index 00000000..5560023b Binary files /dev/null and b/ru/images/2.2.array.png differ diff --git a/ru/images/2.2.basic.png b/ru/images/2.2.basic.png new file mode 100644 index 00000000..9bac6a0f Binary files /dev/null and b/ru/images/2.2.basic.png differ diff --git a/ru/images/2.2.makenew.png b/ru/images/2.2.makenew.png new file mode 100644 index 00000000..00f74179 Binary files /dev/null and b/ru/images/2.2.makenew.png differ diff --git a/ru/images/2.2.slice.png b/ru/images/2.2.slice.png new file mode 100644 index 00000000..119f2141 Binary files /dev/null and b/ru/images/2.2.slice.png differ diff --git a/ru/images/2.2.slice2.png b/ru/images/2.2.slice2.png new file mode 100644 index 00000000..0729a1bf Binary files /dev/null and b/ru/images/2.2.slice2.png differ diff --git a/ru/images/2.3.init.png b/ru/images/2.3.init.png new file mode 100644 index 00000000..abe7cfad Binary files /dev/null and b/ru/images/2.3.init.png differ diff --git a/ru/images/2.4.student_struct.png b/ru/images/2.4.student_struct.png new file mode 100644 index 00000000..7c4f87ac Binary files /dev/null and b/ru/images/2.4.student_struct.png differ diff --git a/ru/images/2.5.rect_func_without_receiver.png b/ru/images/2.5.rect_func_without_receiver.png new file mode 100644 index 00000000..b4b571fd Binary files /dev/null and b/ru/images/2.5.rect_func_without_receiver.png differ diff --git a/ru/images/2.5.shapes_func_with_receiver_cp.png b/ru/images/2.5.shapes_func_with_receiver_cp.png new file mode 100644 index 00000000..2d26a01d Binary files /dev/null and b/ru/images/2.5.shapes_func_with_receiver_cp.png differ diff --git a/ru/images/2.5.shapes_func_without_receiver.png b/ru/images/2.5.shapes_func_without_receiver.png new file mode 100644 index 00000000..112f56fc Binary files /dev/null and b/ru/images/2.5.shapes_func_without_receiver.png differ diff --git a/ru/images/3.1.dns2.png b/ru/images/3.1.dns2.png new file mode 100644 index 00000000..f432edf3 Binary files /dev/null and b/ru/images/3.1.dns2.png differ diff --git a/ru/images/3.1.dns_hierachy.png b/ru/images/3.1.dns_hierachy.png new file mode 100644 index 00000000..8dfeb232 Binary files /dev/null and b/ru/images/3.1.dns_hierachy.png differ diff --git a/ru/images/3.1.dns_inquery.png b/ru/images/3.1.dns_inquery.png new file mode 100644 index 00000000..b95d952e Binary files /dev/null and b/ru/images/3.1.dns_inquery.png differ diff --git a/ru/images/3.1.http.png b/ru/images/3.1.http.png new file mode 100644 index 00000000..25108bf3 Binary files /dev/null and b/ru/images/3.1.http.png differ diff --git a/ru/images/3.1.httpPOST.png b/ru/images/3.1.httpPOST.png new file mode 100644 index 00000000..31d02020 Binary files /dev/null and b/ru/images/3.1.httpPOST.png differ diff --git a/ru/images/3.1.response.png b/ru/images/3.1.response.png new file mode 100644 index 00000000..978de790 Binary files /dev/null and b/ru/images/3.1.response.png differ diff --git a/ru/images/3.1.web.png b/ru/images/3.1.web.png new file mode 100644 index 00000000..5b98b5dc Binary files /dev/null and b/ru/images/3.1.web.png differ diff --git a/ru/images/3.1.web2.png b/ru/images/3.1.web2.png new file mode 100644 index 00000000..a604c217 Binary files /dev/null and b/ru/images/3.1.web2.png differ diff --git a/ru/images/3.2.goweb.png b/ru/images/3.2.goweb.png new file mode 100644 index 00000000..d6a53829 Binary files /dev/null and b/ru/images/3.2.goweb.png differ diff --git a/ru/images/3.3.http.png b/ru/images/3.3.http.png new file mode 100644 index 00000000..40137e33 Binary files /dev/null and b/ru/images/3.3.http.png differ diff --git a/ru/images/3.3.illustrator.png b/ru/images/3.3.illustrator.png new file mode 100644 index 00000000..8159b8bb Binary files /dev/null and b/ru/images/3.3.illustrator.png differ diff --git a/ru/images/4.1.login.png b/ru/images/4.1.login.png new file mode 100644 index 00000000..dfca39df Binary files /dev/null and b/ru/images/4.1.login.png differ diff --git a/ru/images/4.1.slice.png b/ru/images/4.1.slice.png new file mode 100644 index 00000000..3405c147 Binary files /dev/null and b/ru/images/4.1.slice.png differ diff --git a/ru/images/4.3.escape.png b/ru/images/4.3.escape.png new file mode 100644 index 00000000..76ce1245 Binary files /dev/null and b/ru/images/4.3.escape.png differ diff --git a/ru/images/4.4.token.png b/ru/images/4.4.token.png new file mode 100644 index 00000000..b52cc1d1 Binary files /dev/null and b/ru/images/4.4.token.png differ diff --git a/ru/images/4.5.upload.png b/ru/images/4.5.upload.png new file mode 100644 index 00000000..e5766e38 Binary files /dev/null and b/ru/images/4.5.upload.png differ diff --git a/ru/images/4.5.upload2.png b/ru/images/4.5.upload2.png new file mode 100644 index 00000000..06460446 Binary files /dev/null and b/ru/images/4.5.upload2.png differ diff --git a/ru/images/5.6.mongodb.png b/ru/images/5.6.mongodb.png new file mode 100644 index 00000000..6161fbe5 Binary files /dev/null and b/ru/images/5.6.mongodb.png differ diff --git a/ru/images/6.1.cookie.png b/ru/images/6.1.cookie.png new file mode 100644 index 00000000..b94559cf Binary files /dev/null and b/ru/images/6.1.cookie.png differ diff --git a/ru/images/6.1.cookie2.png b/ru/images/6.1.cookie2.png new file mode 100644 index 00000000..2888e392 Binary files /dev/null and b/ru/images/6.1.cookie2.png differ diff --git a/ru/images/6.1.session.png b/ru/images/6.1.session.png new file mode 100644 index 00000000..f538b8f5 Binary files /dev/null and b/ru/images/6.1.session.png differ diff --git a/ru/images/6.4.cookie.png b/ru/images/6.4.cookie.png new file mode 100644 index 00000000..0dad93f1 Binary files /dev/null and b/ru/images/6.4.cookie.png differ diff --git a/ru/images/6.4.hijack.png b/ru/images/6.4.hijack.png new file mode 100644 index 00000000..5ab0753f Binary files /dev/null and b/ru/images/6.4.hijack.png differ diff --git a/ru/images/6.4.hijacksuccess.png b/ru/images/6.4.hijacksuccess.png new file mode 100644 index 00000000..57f48d41 Binary files /dev/null and b/ru/images/6.4.hijacksuccess.png differ diff --git a/ru/images/6.4.setcookie.png b/ru/images/6.4.setcookie.png new file mode 100644 index 00000000..dbb52170 Binary files /dev/null and b/ru/images/6.4.setcookie.png differ diff --git a/ru/images/7.4.template.png b/ru/images/7.4.template.png new file mode 100644 index 00000000..195e24fb Binary files /dev/null and b/ru/images/7.4.template.png differ diff --git a/ru/images/8.1.socket.png b/ru/images/8.1.socket.png new file mode 100644 index 00000000..93dd544d Binary files /dev/null and b/ru/images/8.1.socket.png differ diff --git a/ru/images/8.2.websocket.png b/ru/images/8.2.websocket.png new file mode 100644 index 00000000..b293c653 Binary files /dev/null and b/ru/images/8.2.websocket.png differ diff --git a/ru/images/8.2.websocket2.png b/ru/images/8.2.websocket2.png new file mode 100644 index 00000000..b744c634 Binary files /dev/null and b/ru/images/8.2.websocket2.png differ diff --git a/ru/images/8.2.websocket3.png b/ru/images/8.2.websocket3.png new file mode 100644 index 00000000..ee769c16 Binary files /dev/null and b/ru/images/8.2.websocket3.png differ diff --git a/ru/images/8.3.rest.png b/ru/images/8.3.rest.png new file mode 100644 index 00000000..0c1e5b54 Binary files /dev/null and b/ru/images/8.3.rest.png differ diff --git a/ru/images/8.3.rest2.png b/ru/images/8.3.rest2.png new file mode 100644 index 00000000..b43c0804 Binary files /dev/null and b/ru/images/8.3.rest2.png differ diff --git a/ru/images/8.3.rest3.png b/ru/images/8.3.rest3.png new file mode 100644 index 00000000..1f62b505 Binary files /dev/null and b/ru/images/8.3.rest3.png differ diff --git a/ru/images/8.4.rpc.png b/ru/images/8.4.rpc.png new file mode 100644 index 00000000..0b3fcfe2 Binary files /dev/null and b/ru/images/8.4.rpc.png differ diff --git a/ru/images/9.1.csrf.png b/ru/images/9.1.csrf.png new file mode 100644 index 00000000..54d3a434 Binary files /dev/null and b/ru/images/9.1.csrf.png differ diff --git a/ru/images/cover.png b/ru/images/cover.png new file mode 100644 index 00000000..22bfab44 Binary files /dev/null and b/ru/images/cover.png differ diff --git a/ru/images/ebook.jpg b/ru/images/ebook.jpg new file mode 100644 index 00000000..b2f3710d Binary files /dev/null and b/ru/images/ebook.jpg differ diff --git a/ru/images/navi1.png b/ru/images/navi1.png new file mode 100644 index 00000000..92a7669e Binary files /dev/null and b/ru/images/navi1.png differ diff --git a/ru/images/navi10.png b/ru/images/navi10.png new file mode 100644 index 00000000..94935e27 Binary files /dev/null and b/ru/images/navi10.png differ diff --git a/ru/images/navi11.png b/ru/images/navi11.png new file mode 100644 index 00000000..8eb93cb1 Binary files /dev/null and b/ru/images/navi11.png differ diff --git a/ru/images/navi12.png b/ru/images/navi12.png new file mode 100644 index 00000000..5bdbadfa Binary files /dev/null and b/ru/images/navi12.png differ diff --git a/ru/images/navi13.png b/ru/images/navi13.png new file mode 100644 index 00000000..c797033b Binary files /dev/null and b/ru/images/navi13.png differ diff --git a/ru/images/navi14.png b/ru/images/navi14.png new file mode 100644 index 00000000..3d9d38cc Binary files /dev/null and b/ru/images/navi14.png differ diff --git a/ru/images/navi2.png b/ru/images/navi2.png new file mode 100644 index 00000000..d18526ac Binary files /dev/null and b/ru/images/navi2.png differ diff --git a/ru/images/navi3.png b/ru/images/navi3.png new file mode 100644 index 00000000..23495893 Binary files /dev/null and b/ru/images/navi3.png differ diff --git a/ru/images/navi4.png b/ru/images/navi4.png new file mode 100644 index 00000000..1b4df73a Binary files /dev/null and b/ru/images/navi4.png differ diff --git a/ru/images/navi5.png b/ru/images/navi5.png new file mode 100644 index 00000000..55788152 Binary files /dev/null and b/ru/images/navi5.png differ diff --git a/ru/images/navi6.png b/ru/images/navi6.png new file mode 100644 index 00000000..74cab817 Binary files /dev/null and b/ru/images/navi6.png differ diff --git a/ru/images/navi7.png b/ru/images/navi7.png new file mode 100644 index 00000000..2e1c974e Binary files /dev/null and b/ru/images/navi7.png differ diff --git a/ru/images/navi8.png b/ru/images/navi8.png new file mode 100644 index 00000000..7a52d84e Binary files /dev/null and b/ru/images/navi8.png differ diff --git a/ru/images/navi9.png b/ru/images/navi9.png new file mode 100644 index 00000000..7692e113 Binary files /dev/null and b/ru/images/navi9.png differ diff --git a/ru/images/polling.png b/ru/images/polling.png new file mode 100644 index 00000000..8bd128ec Binary files /dev/null and b/ru/images/polling.png differ diff --git a/ru/preface.md b/ru/preface.md new file mode 100644 index 00000000..c723306a --- /dev/null +++ b/ru/preface.md @@ -0,0 +1,96 @@ +- 1.[Настройка среды разработки на Go](01.0.md) + - 1.1. [Установка](01.1.md) + - 1.2. [$GOPATH и рабочий каталог](01.2.md) + - 1.3. [Утилиты Go](01.3.md) + - 1.4. [Инструменты разработки для Go](01.4.md) + - 1.5. [Итоги раздела](01.5.md) +- 2.[Go basic knowledge](02.0.md) + - 2.1. ["Hello, Go"](02.1.md) + - 2.2. [Go foundation](02.2.md) + - 2.3. [Control statements and functions](02.3.md) + - 2.4. [struct](02.4.md) + - 2.5. [Object-oriented](02.5.md) + - 2.6. [interface](02.6.md) + - 2.7. [Concurrency](02.7.md) + - 2.8. [Summary](02.8.md) +- 3.[Web foundation](03.0.md) + - 3.1. [Web working principles](03.1.md) + - 3.2. [Build a simple web server](03.2.md) + - 3.3. [How Go works with web](03.3.md) + - 3.4. [Get into http package](03.4.md) + - 3.5. [Summary](03.5.md) +- 4.[User form](04.0.md) + - 4.1. [Process form inputs](04.1.md) + - 4.2. [Verification of inputs](04.2.md) + - 4.3. [Cross site scripting](04.3.md) + - 4.4. [Duplicate submissions](04.4.md) + - 4.5. [File upload](04.5.md) + - 4.6. [Summary](04.6.md) +- 5.[Database](05.0.md) + - 5.1. [database/sql interface](05.1.md) + - 5.2. [MySQL](05.2.md) + - 5.3. [SQLite](05.3.md) + - 5.4. [PostgreSQL](05.4.md) + - 5.5. [Develop ORM based on beedb](05.5.md) + - 5.6. [NoSQL database](05.6.md) + - 5.7. [Summary](05.7.md) +- 6.[Data storage and session](06.0.md) + - 6.1. [Session and cookies](06.1.md) + - 6.2. [How to use session in Go](06.2.md) + - 6.3. [Session storage](06.3.md) + - 6.4. [Prevent hijack of session](06.4.md) + - 6.5. [Summary](06.5.md) +- 7.[Text files](07.0.md) + - 7.1. [XML](07.1.md) + - 7.2. [JSON](07.2.md) + - 7.3. [Regexp](07.3.md) + - 7.4. [Templates](07.4.md) + - 7.5. [Files](07.5.md) + - 7.6. [Strings](07.6.md) + - 7.7. [Summary](07.7.md) +- 8.[Web services](08.0.md) + - 8.1. [Sockets](08.1.md) + - 8.2. [WebSocket](08.2.md) + - 8.3. [REST](08.3.md) + - 8.4. [RPC](08.4.md) + - 8.5. [Summary](08.5.md) +- 9.[Security and encryption](09.0.md) + - 9.1. [CSRF attacks](09.1.md) + - 9.2. [Filter inputs](09.2.md) + - 9.3. [XSS attacks](09.3.md) + - 9.4. [SQL injection](09.4.md) + - 9.5. [Password storage](09.5.md) + - 9.6. [Encrypt and decrypt data](09.6.md) + - 9.7. [Summary](09.7.md) +- 10.[Internationalization and localization](10.0.md) + - 10.1 [Time zone](10.1.md) + - 10.2 [Localized resources](10.2.md) + - 10.3 [International sites](10.3.md) + - 10.4 [Summary](10.4.md) +- 11.[Error handling, debugging and testing](11.0.md) + - 11.1. [Error handling](11.1.md) + - 11.2. [Debugging by using GDB](11.2.md) + - 11.3. [Write test cases](11.3.md) + - 11.4. [Summary](11.4.md) +- 12.[Deployment and maintenance](12.0.md) + - 12.1. [Logs](12.1.md) + - 12.2. [Errors and crashes](12.2.md) + - 12.3. [Deployment](12.3.md) + - 12.4. [Backup and recovery](12.4.md) + - 12.5. [Summary](12.5.md) +- 13.[Build a web framework](13.0.md) + - 13.1. [Project program](13.1.md) + - 13.2. [Customized routers](13.2.md) + - 13.3. [Design controllers](13.3.md) + - 13.4. [Logs and configurations](13.4.md) + - 13.5. [Add, delete and update blogs](13.5.md) + - 13.6. [Summary](13.6.md) +- 14.[Develop web framework](14.0.md) + - 14.1. [Static files](14.1.md) + - 14.2. [Session](14.2.md) + - 14.3. [Form](14.3.md) + - 14.4. [User validation](14.4.md) + - 14.5. [Multi-language support](14.5.md) + - 14.6. [pprof](14.6.md) + - 14.7. [Summary](14.7.md) +- Appendix A [References](ref.md)