четверг, 29 февраля 2024 г.

golang, начало

Перед установкой 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`

Docker. Первые контейнеры

Источник:  php.dragomano.ru Структура каталогов: ~/develop/web/project/                  nginx/      - сервис web-сервера                php...