Перед установкой golang выполняем обновление ОС GNU/Linux.
Для ubuntu, debian/kalilinux:
# apt update && apt upgrade -y
Для AltLinux:
# apt-get update && apt-get dist-upgrade -y
1. Подготовка окружения для разработки
1.1. Установка golang
Для ubuntu, debian/kalilinux:
# apt install golang -y
Для AltLinux:
# apt-get install golang gcc -y
1.2. Первая программа
Создаём каталог тестового проекта и переходим в него:
# mkdir -p ~/develop/golang/test && cd ~/develop/golang/test
Создаем go-файл `test.go` со следующим содержанием:
# vim test.go
package main
import (
"fmt"
)
func main() {
fmt.Println("test string")
}
Запускаем тестовый код в режиме интерпретатора:
# go run test.go
...если на экране отобразился текст "test string", значит установка прошла правильно.
2. Многофайловые проекты
2.1. Разделение кодовой базы в разных файла одного каталога
Создаем каталог проекта и переходим в него:
# mkdir -p ~/develop/golang/test2 && cd ~/develop/golang/test2
Создаем главный файл проекта следующего содержания:
# vim main.go
package main
import (
"fmt"
)
func func01() {
fmt.Println("func01 from main.go file")
}
func main() {
func01()
func02()
}
Создаем дополнительный файл с функцией func02 следующего содержания:
# vim func02.go
package main
import (
"fmt"
)
func func02() {
fmt.Println("func02 from func02.go file")
}
Запускаем код в режиме интерпретации кода:
# go run main.go func02.go
...на экране должны отобразиться две строки.
Пишем скрипт для запуска следующего содержания:
# vim run.sh
go run main.go func02.go
Назначаем скрипту атрибут исполняемого файла:
# chmod +x run.sh
Теперь этот проект можно запускать файлом run.sh:
# ./run.sh
2.2. Импорт кода/данных из файлов, расположенных в разных каталогах одного из наших проектов
Все проекты программ разрабатываемые нами на языке golang мы храним в домашнем каталоге "~/develop/golang". Также в среде разработки golang есть служебный каталог (/usr/lib/golang/src), в котором хранятся пакеты стандартной библиотеки golang, такие как "fmt" которая использовалась выше, и те, которые мы закачиваем из внешних репозиториев, на пример с github.ru/gorilla/mux.
Если попробовать в файле `main.go` выполнить импорт, например, пакета "mylib9087", то при попытке выполнения программы мы получим сообщение похожее на "main.go:8:2: package mylib9087 is not in std (/usr/lib/golang/src/mylib9087").
Один из возможных вариантов выполнять импорт наших пакетов которые находятся в структуре каталога "~/develop/golang" это создать на него ссылку в каталоге "/usr/lib/golang/src":
# ln -s ~/develop/golang /usr/lib/golang/src/myapps
В результате, при следующей структуре каталогов наших проектов:
~/develop/golang
/project1
/app
main.go
/modules
mymodule.go
далее, из файла `main.go` мы можем выполнить импорт кодовой базы или данных из файла `mymodule.go` следующим образом:
#vim ~/develop/golang/project1/modules/mymodule.go
package modules
import (
"fmt"
)
func func02() {
fmt.Println("text from go-file mymodule.go")
}
#vim ~/develop/golang/project1/app/main.go
package main
import (
"fmt"
"myapps/project1/modules"
)
func main() {
fmt.Println("text from go-file main.go")
func02()
}
При выполнении файла `main.go` в режиме интерпретации мы увидим 2 строки текста, первая из которых будет выведена из файла `main.go`, вторая из файла `func02.go`:
# go run ~/develop/golang/project1/app/main.go
3. Автоматическое добавление зависимостей
При использовании зависимостей в проекте, которые не входят в состав стандартной библиотеки языка программирования используем команду `go mod tidy`, также необходимо использование инициализации проекта при создании, например, при создании проекта `mserv-1`. В файле `...\mserv-1\main.go` добавляем внешнюю записимость `gorilla/mux`:
package main
import {
...
"github.com/gorilla/mux"
}
3.1. Выполняем инициализацию проекта:
$ ~\develop\golang\mserv-1\go mod init [project-name]
3.2. Выполняем автоматическое добавление зависимостей:
$ ~\develop\golang\mserv-1\go mod tidy
3.3. При прописании в go-файл новых внешних зависимостей, снова выполняем `go mod tidy`