20
ru/01.0.md
Normal file
@@ -0,0 +1,20 @@
|
||||
# 1 Настройка окружения Go
|
||||
|
||||
Добро пожаловать в мир Go! Давайте начнем.
|
||||
|
||||
Go - это язык программирования, характерными чертами которого являюся быстрое время компиляции, сборка мусора и многопоточность. Вот список преимуществ Go:
|
||||
|
||||
- Большие проекты компилируюстя за несколько секунд.
|
||||
- Модель разработки в Go легко объяснима, Go позволяет избежать большинства проблем, связанных с заголовочными файлами в стиле языка C.
|
||||
- Это статически типизированный язык программирования, в системе типов которого не поддерживается иерархия уровней, поэтому пользователю не нужно тратить время на выяснение отношений между типами. Go, скорее, "легковесный" объектно-ориентированный язык программирования.
|
||||
- Go обеспечивает сборку мусора. Он предлагает встроенную поддержку конкарентности и протоколов связи.
|
||||
- Разработан для многоядерных процессоров.
|
||||
|
||||
Go - компилируемый язык. Он сочетает в себе эффективность разработки интерпретируемых или динамически типизированных языков и безопасность статически типизируемых языков. Его задача - стать оптимальным вариантом среди языков программирования для современных многоядерных компьютеров, работающих в сети. Чтобы стать таким языком, нужно решить несколько задач, таких как поддержка богатой, выразительной и легкой системы типизации, поддержка одновременности выполнения процедур "из коробки" и точно регулируемая сборка мусора. Иногда при программировании на каком-либо языке оказывалось так, что пакетов для решения всех этих задач практичным способом просто не было. Это и явилось причиной появления языка Go.
|
||||
|
||||
В этой главе я покажу, как установить и настроить среду разработки на Go.
|
||||
|
||||
## Ссылки
|
||||
|
||||
- [Содержание](preface.md)
|
||||
- Следующий раздел: [Установка](01.1.md)
|
||||
120
ru/01.1.md
Normal file
@@ -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
|
||||
|
||||
Если Вы видите следуюую информацию, все настроено правильно:
|
||||
|
||||

|
||||
|
||||
Рисунок 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)
|
||||
151
ru/01.2.md
Normal file
@@ -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)
|
||||
106
ru/01.3.md
Normal file
@@ -0,0 +1,106 @@
|
||||
#1.3 Утилиты Go
|
||||
|
||||
## Утилиты Go
|
||||
|
||||
Язык Go имеет в своем распоряжении полный набор утилит, выполняемых из командной строки. Вы можете исполнить в терминале команду `go`, чтобы увидеть их:
|
||||
|
||||

|
||||
|
||||
Рисунок 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)
|
||||
409
ru/01.4.md
Normal file
@@ -0,0 +1,409 @@
|
||||
# Инструменты разработки для Go
|
||||
|
||||
В этом разделе я ознакомлю Вас с несколькими средами разработки (IDE), которые помогут Вам более эффективно программировать. Они обладают такими возможностями как умное автодополнение и автоформатирование. Все они кроссплатформенные, поэтому шаги по настройке, которые я покажу, не будут слишком отличаться в зависимости от операционной системы, которую Вы используете.
|
||||
|
||||
## LiteIDE
|
||||
|
||||
LiteIDE - нетребовательный к ресурсам системы IDE с открытым исходным кодом, который предназначен для разработки проектов только на Go. Он разработан visualfc.
|
||||
|
||||

|
||||
|
||||
Рисунок 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. И вот почему:
|
||||
|
||||
- Умное автодополнение
|
||||
|
||||

|
||||
|
||||
Рисунок 1.5 Умное автодополнение Sublime.
|
||||
|
||||
- Автоформатирование исходных кодов
|
||||
- Управление проектами
|
||||
|
||||

|
||||
|
||||
Рисунок 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".
|
||||
|
||||

|
||||
|
||||
Рисунок 1.7 Sublime Package Control
|
||||
2. Для установки GoSublime, SidebarEnhancements и Go Build, нажмите `Ctrl+Shift+p`, чтобы открыть управление пакетами, затем напечатайте `pcip` (сокращение от "Package Control: Install Package").
|
||||
|
||||

|
||||
|
||||
Рисунок 1.8 Установка пакетов Sublime
|
||||
|
||||
Теперь введите "GoSublime", нажмите OK для установки пакета и повторите те же шаги для установки SidebarEnhancements и Go Build. По завершении установки снова перезапустите редактор.
|
||||
|
||||
3. Чтобы проверить, успешно ли прошла установка, откройте Sublime, откройте файл `main.go` и проверьте, правильно ли подсвечивается синтаксис. Напечатайте `import` и проверьте, правильно ли работает автодополнение кода. После того, как Вы ввели `import "fmt"`, напечатайте `fmt.` где-нибудь после выражения `import` и проверьте, работает ли автодополнение для функций.
|
||||
|
||||
Если все работает, это значит, что Вы все настроили правильно.
|
||||
|
||||
Если нет, еще раз проверьте значение переменной $PATH. Откройте терминал, выполните `gocode`. Если запуск не произошел, переменная $PATH настроена неправильно.
|
||||
|
||||
## Vim
|
||||
|
||||
Vim - это популярный текстовый редактор для программистов, происшедший от своего предшественника Vi. У него есть функции умного автодополнения, компиляции и перехода к ошибкам.
|
||||
|
||||

|
||||
|
||||
Рисунок 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.
|
||||
|
||||

|
||||
|
||||
Рисунок 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 "<standard input>" 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.
|
||||
|
||||

|
||||
|
||||
Рисунок 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.
|
||||
|
||||

|
||||
|
||||
Рисунок 1.12 Настройки Go в Eclipse
|
||||
|
||||
(2).Настройте gocode (если нужно), установите путь к gocode туда, где находится gocode.exe.
|
||||
|
||||

|
||||
|
||||
Рисунок 1.13 Настройки gocode
|
||||
|
||||
(3).Настройте gdb (по желанию), установите путь к gdb туда, где находится gdb.exe.
|
||||
|
||||

|
||||
|
||||
Рисунок 1.14 Установки gdb
|
||||
|
||||
6. Проверьте правильность установки:
|
||||
|
||||
Создайте новый проект Go и файл hello.go как на рисунке:
|
||||
|
||||

|
||||
|
||||
Рисунок 1.15 Создание нового проекта и файла
|
||||
|
||||
Протестируйте установку так (Вам нужно напечатать команду в консоли Eclipse):
|
||||
|
||||

|
||||
|
||||
Рисунок 1.16 Тестирование программы Go в Eclipse
|
||||
|
||||
## IntelliJ IDEA
|
||||
|
||||
Те, кто работал с Java, должны быть знакомы с этой IDE. Она поддерживает подсветку синтаксиса Go и умное автодополнение кода посредством плагина.
|
||||
|
||||
1. Скачайте IDEA, подойдут версии и Ultimate, и Community.
|
||||
|
||||

|
||||
|
||||
2. Установите плагин Go. Выберите `File - Setting - Plugins`, затем выберите `Browser repo`.
|
||||
|
||||

|
||||
|
||||
3. Выберите `golang`, затем двойным щелчком мыши `download and install` и подождите, пока завершится загрузка.
|
||||
|
||||

|
||||
|
||||
Нажмите `Apply`, затем перезапустите приложение.
|
||||
|
||||
4. Теперь можно создавать проект Go.
|
||||
|
||||

|
||||
|
||||
Введите расположение 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)
|
||||
9
ru/01.5.md
Normal file
@@ -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)
|
||||
BIN
ru/images/1.1.cmd.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
ru/images/1.1.linux.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
ru/images/1.1.mac.png
Normal file
|
After Width: | Height: | Size: 84 KiB |
BIN
ru/images/1.3.go.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
ru/images/1.4.eclipse1.png
Normal file
|
After Width: | Height: | Size: 92 KiB |
BIN
ru/images/1.4.eclipse2.png
Normal file
|
After Width: | Height: | Size: 213 KiB |
BIN
ru/images/1.4.eclipse3.png
Normal file
|
After Width: | Height: | Size: 51 KiB |
BIN
ru/images/1.4.eclipse4.png
Normal file
|
After Width: | Height: | Size: 104 KiB |
BIN
ru/images/1.4.eclipse5.png
Normal file
|
After Width: | Height: | Size: 224 KiB |
BIN
ru/images/1.4.eclipse6.png
Normal file
|
After Width: | Height: | Size: 285 KiB |
BIN
ru/images/1.4.emacs.png
Normal file
|
After Width: | Height: | Size: 299 KiB |
BIN
ru/images/1.4.idea1.png
Normal file
|
After Width: | Height: | Size: 66 KiB |
BIN
ru/images/1.4.idea2.png
Normal file
|
After Width: | Height: | Size: 79 KiB |
BIN
ru/images/1.4.idea3.png
Normal file
|
After Width: | Height: | Size: 109 KiB |
BIN
ru/images/1.4.idea4.png
Normal file
|
After Width: | Height: | Size: 123 KiB |
BIN
ru/images/1.4.idea5.png
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
ru/images/1.4.liteide.png
Normal file
|
After Width: | Height: | Size: 134 KiB |
BIN
ru/images/1.4.sublime1.png
Normal file
|
After Width: | Height: | Size: 92 KiB |
BIN
ru/images/1.4.sublime2.png
Normal file
|
After Width: | Height: | Size: 55 KiB |
BIN
ru/images/1.4.sublime3.png
Normal file
|
After Width: | Height: | Size: 8.4 KiB |
BIN
ru/images/1.4.sublime4.png
Normal file
|
After Width: | Height: | Size: 67 KiB |
BIN
ru/images/1.4.vim.png
Normal file
|
After Width: | Height: | Size: 82 KiB |
BIN
ru/images/13.1.flow.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
ru/images/13.1.gopath.png
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
ru/images/13.1.gopath2.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
ru/images/13.4.beego.png
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
ru/images/14.1.bootstrap.png
Normal file
|
After Width: | Height: | Size: 193 KiB |
BIN
ru/images/14.1.bootstrap2.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
ru/images/14.1.bootstrap3.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
ru/images/14.4.github.png
Normal file
|
After Width: | Height: | Size: 9.6 KiB |
BIN
ru/images/14.4.github2.png
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
ru/images/14.4.github3.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
ru/images/14.6.pprof.png
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
ru/images/14.6.pprof2.png
Normal file
|
After Width: | Height: | Size: 240 KiB |
BIN
ru/images/14.6.pprof3.png
Normal file
|
After Width: | Height: | Size: 97 KiB |
BIN
ru/images/2.2.array.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
ru/images/2.2.basic.png
Normal file
|
After Width: | Height: | Size: 47 KiB |
BIN
ru/images/2.2.makenew.png
Normal file
|
After Width: | Height: | Size: 141 KiB |
BIN
ru/images/2.2.slice.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
ru/images/2.2.slice2.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
ru/images/2.3.init.png
Normal file
|
After Width: | Height: | Size: 93 KiB |
BIN
ru/images/2.4.student_struct.png
Normal file
|
After Width: | Height: | Size: 98 KiB |
BIN
ru/images/2.5.rect_func_without_receiver.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
ru/images/2.5.shapes_func_with_receiver_cp.png
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
ru/images/2.5.shapes_func_without_receiver.png
Normal file
|
After Width: | Height: | Size: 67 KiB |
BIN
ru/images/3.1.dns2.png
Normal file
|
After Width: | Height: | Size: 190 KiB |
BIN
ru/images/3.1.dns_hierachy.png
Normal file
|
After Width: | Height: | Size: 30 KiB |
BIN
ru/images/3.1.dns_inquery.png
Normal file
|
After Width: | Height: | Size: 60 KiB |
BIN
ru/images/3.1.http.png
Normal file
|
After Width: | Height: | Size: 8.1 KiB |
BIN
ru/images/3.1.httpPOST.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
ru/images/3.1.response.png
Normal file
|
After Width: | Height: | Size: 62 KiB |
BIN
ru/images/3.1.web.png
Normal file
|
After Width: | Height: | Size: 361 KiB |
BIN
ru/images/3.1.web2.png
Normal file
|
After Width: | Height: | Size: 67 KiB |
BIN
ru/images/3.2.goweb.png
Normal file
|
After Width: | Height: | Size: 8.1 KiB |
BIN
ru/images/3.3.http.png
Normal file
|
After Width: | Height: | Size: 51 KiB |
BIN
ru/images/3.3.illustrator.png
Normal file
|
After Width: | Height: | Size: 66 KiB |
BIN
ru/images/4.1.login.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
ru/images/4.1.slice.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
ru/images/4.3.escape.png
Normal file
|
After Width: | Height: | Size: 5.5 KiB |
BIN
ru/images/4.4.token.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
ru/images/4.5.upload.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
ru/images/4.5.upload2.png
Normal file
|
After Width: | Height: | Size: 6.4 KiB |
BIN
ru/images/5.6.mongodb.png
Normal file
|
After Width: | Height: | Size: 243 KiB |
BIN
ru/images/6.1.cookie.png
Normal file
|
After Width: | Height: | Size: 100 KiB |
BIN
ru/images/6.1.cookie2.png
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
ru/images/6.1.session.png
Normal file
|
After Width: | Height: | Size: 35 KiB |
BIN
ru/images/6.4.cookie.png
Normal file
|
After Width: | Height: | Size: 69 KiB |
BIN
ru/images/6.4.hijack.png
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
ru/images/6.4.hijacksuccess.png
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
ru/images/6.4.setcookie.png
Normal file
|
After Width: | Height: | Size: 66 KiB |
BIN
ru/images/7.4.template.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
ru/images/8.1.socket.png
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
ru/images/8.2.websocket.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
ru/images/8.2.websocket2.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
ru/images/8.2.websocket3.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
ru/images/8.3.rest.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
ru/images/8.3.rest2.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
ru/images/8.3.rest3.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
ru/images/8.4.rpc.png
Normal file
|
After Width: | Height: | Size: 55 KiB |
BIN
ru/images/9.1.csrf.png
Normal file
|
After Width: | Height: | Size: 78 KiB |
BIN
ru/images/cover.png
Normal file
|
After Width: | Height: | Size: 123 KiB |
BIN
ru/images/ebook.jpg
Normal file
|
After Width: | Height: | Size: 50 KiB |
BIN
ru/images/navi1.png
Normal file
|
After Width: | Height: | Size: 33 KiB |
BIN
ru/images/navi10.png
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
ru/images/navi11.png
Normal file
|
After Width: | Height: | Size: 35 KiB |
BIN
ru/images/navi12.png
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
ru/images/navi13.png
Normal file
|
After Width: | Height: | Size: 47 KiB |
BIN
ru/images/navi14.png
Normal file
|
After Width: | Height: | Size: 44 KiB |
BIN
ru/images/navi2.png
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
ru/images/navi3.png
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
ru/images/navi4.png
Normal file
|
After Width: | Height: | Size: 39 KiB |
BIN
ru/images/navi5.png
Normal file
|
After Width: | Height: | Size: 53 KiB |
BIN
ru/images/navi6.png
Normal file
|
After Width: | Height: | Size: 39 KiB |
BIN
ru/images/navi7.png
Normal file
|
After Width: | Height: | Size: 41 KiB |