Π Π°Π·Π½ΠΎΠ΅

Gopath golang: Всё, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π·Π½Π°Ρ‚ΡŒ ΠΏΡ€ΠΎ GOPATH ΠΈ GOROOT / Π₯Π°Π±Ρ€

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

Всё, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π·Π½Π°Ρ‚ΡŒ ΠΏΡ€ΠΎ GOPATH ΠΈ GOROOT / Π₯Π°Π±Ρ€

НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Go считаСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· самых Π»Π΅Π³ΠΊΠΈΡ… для Π²Ρ…ΠΎΠ΄Π° языков, приходится рСгулярно ΡΠ»Ρ‹ΡˆΠ°Ρ‚ΡŒ: Β«ΠΊΠ°ΠΊ-Ρ‚ΠΎ всС нСпонятно, ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ GOROOT ΠΈ GOPATH Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒΒ». И хотя Ρ‚Π΅ΠΌΠ° ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ раскрыта Π½Π° ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ сайтС Go, Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ лишним ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ совсСм простым языком.

TL;DR

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρ‡ΡƒΡ‚ΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅:

GOROOT

GOROOT β€” это пСрСмСнная, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π°Ρ, Π³Π΄Π΅ Π»Π΅ΠΆΠΈΡ‚, собствСнно, вся бинарная сборка Go ΠΈ исходныС ΠΊΠΎΠ΄Ρ‹. Π§Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ JAVA_HOME. Π£ΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ эту ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ€ΡƒΡ‡ΠΊΠ°ΠΌΠΈ Π½ΡƒΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚Π΅Ρ… случаях, Ссли Π²Ρ‹ ставитС Go ΠΏΠΎΠ΄ Windows Π½Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ MSI-инсталлСра, Π° ΠΈΠ· zip-Π°Ρ€Ρ…ΠΈΠ²Π°. Ну, ΠΈΠ»ΠΈ Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ нСсколько вСрсий Go, каТдая Π² своСй Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ.

РаньшС (Π΄ΠΎ Go 1.0) эта пСрСмСнная Π±Ρ‹Π»Π° Π½ΡƒΠΆΠ½Π° β€” Π΅Ρ‘ использовали скрипты сборки, Ρ€Π°Π²Π½ΠΎ ΠΊΠ°ΠΊ ΠΈ GOARCH ΠΈ GOOS. Но послС Go 1.0 Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ измСнилась внутрСнняя Π»ΠΎΠ³ΠΈΠΊΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ go tool ΠΈ сСйчас Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ GOROOT хардкодится Π½Π° этапС сборки ΠΈΠ»ΠΈ инсталляции. Π’ΠΎΠ΅ΡΡ‚ΡŒ, go β€” Π΄Π΅Ρ„ΠΎΠ»Ρ‚Π½ΠΎ проинсталлированный β€” Π·Π½Π°Π΅Ρ‚ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ Ρ‚Π°ΠΊ. Π•Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

go env GOROOT

Π’ MacOS X это /usr/local/go/, Π² Linux Ρ‚ΠΎΠΆΠ΅ (хотя ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ дистрибутива), Π² Windows β€” Π‘:\Go.

GOPATH

А Π²ΠΎΡ‚ пСрСмСнная GOPATH ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½Π° ΠΈ Π½ΡƒΠΆΠ½Π° ΠΈ Π΅Ρ‘ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π²ΠΏΡ€ΠΎΡ‡Π΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·. Π­Ρ‚ΠΎ ваш workspace, Π³Π΄Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π»Π΅ΠΆΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΠΈ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ всСго с Ρ‡Π΅ΠΌ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π² Go Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π²Ρ‹Π±ΠΈΡ€Π°ΠΉΡ‚Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ Π²Π°ΠΌ ΠΏΡƒΡ‚ΡŒ ΠΈ сохраняйтС Π΅Π³ΠΎ Π² GOPATH. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ:

export GOPATH=~/go
export GOPATH=~/gocode
export GOPATH=~/Devel/go
export GOPATH=~/Projects/go

Ну ΠΈ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ это сохранитС Π² .profile ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ Π²Ρ‹ Ρ‚Π°ΠΌ сохраняСтС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅:

echo "export GOPATH=~/go" >> ~/.profile (ΠΈΠ»ΠΈ .bash_profile)

Всё, сдСлайтС это ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΈ Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ эту Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ, Ссли Π΅Ρ‘ Π΅Ρ‰Π΅ ΠΈ Π½Π΅Ρ‚, ΠΈ Π½Π° этом Π³ΠΎΡ‚ΠΎΠ²ΠΎ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ любой Π²Ρ‹Π·ΠΎΠ² go get github.com/someuser/somelib автоматичСски Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΊΠ°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ исходники Π² $GOPATH/src, Π° Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ компиляции ΡΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ Π² $GOPATH/pkg ΠΈΠ»ΠΈ $GOPATH/bin (для Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈ исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ² соотвСтствСнно).

PATH

Π­Ρ‚ΠΎ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ, Π½ΠΎ ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ сразу Ρ‚ΠΎΠΆΠ΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Ρ€Π°Π· ΡƒΠΆ Π²Ρ‹ взялись Π·Π° настройку срСды. Π Π°Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ·Π΄Π½ΠΎ Π²Ρ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊΠΈΠΌΠΈ-Ρ‚ΠΎ Go-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π»Π΅ΠΆΠ°Ρ‚ΡŒ Π² вашСй GOPATH/bin. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡ… Π±Π΅Π· Π»ΠΈΡˆΠ½ΠΈΡ… Ρ‚Π΅Π»ΠΎΠ΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΊ PATH Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ $GOPATH/bin:

export PATH=$PATH:$GOPATH/bin

Команда go install собираСт ΠΈ инсталлируСт Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² эту Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ, поэтому это ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ для удобства.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Workspace

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π° структуру Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ GOPATH. Π’ΠΎΠ·ΡŒΠΌΡƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ· ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ:

bin/
    hello                 # ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° hello
pkg/
    linux_amd64/          # ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ этого уровня опрСдСляСт ось ΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ для Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²
        github.com/user/
            stringutil.a  # ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΏΠ°ΠΊΠ΅Ρ‚Π° stringutil
src/
    github.com/user/
        hello/
            hello.go      # исходный ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ hello
        stringutil/
            reverse.go    # исходный ΠΊΠΎΠ΄ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ stringutil

Достаточно просто, Π½Π΅ Ρ‚Π°ΠΊ Π»ΠΈ? Π’Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ обязываСт Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ Π² src/ ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρƒ. МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ src/test/my_first_app/main.go ΠΈ src/anyname/main.go β€” Π½ΠΎ Ссли Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ с систСмами контроля вСрсий (Π° Π²Ρ‹ Ρ‚Π°ΠΊΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅)), Ρ‚ΠΎ Π²Π°ΠΌ это бСсспорно станСт ΡƒΠ΄ΠΎΠ±Π½ΠΎ β€” ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ go get/install ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ это соглашСния наимСнования, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ с систСмами контроля вСрсий Π±Π΅Π·Π±ΠΎΠΆΠ½ΠΎ простой.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ GOPATH Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Π° стандартной PATH β€” ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ нСсколько Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉ, Ρ‡Π΅Ρ€Π΅Π· ‘:’. GOPATH=~/go:~/other_workspace. Π­Ρ‚ΠΎ Π² ΠΎΡ‡Π΅Π½ΡŒ Ρ€Π΅Π΄ΠΊΠΈΡ… случаях Π±Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с внСшними ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π°ΠΌΠΈ зависимостСй Π²Ρ€ΠΎΠ΄Π΅ gpm), Π½ΠΎ Π² 99% это Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ, ΠΈ просто Ρ‚Π°ΠΊ рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Ρƒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ Π² GOPATH.

Π’ ΠΊΠΎΠ½Ρ†Π΅-ΠΊΠΎΠ½Ρ†ΠΎΠ², Ссли Π²Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ Ρ€Π°Π·Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ workspace-Ρ‹, всСгда ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ GOPATH Π½Π° Π½ΡƒΠΆΠ½ΡƒΡŽ (Π² скриптС сборки, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ). Π’Π°ΠΊ, собствСнно, ΠΈ Π΄Π΅Π»Π°ΡŽΡ‚.

Бсылки

golang.org/doc/install
golang.org/doc/code.html
dave.cheney.net/2013/06/14/you-dont-need-to-set-goroot-really

Установка Go Π½Π° Windows 10 Π‘ΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Ρ‹ + Π’ΠΈΠ΄Π΅ΠΎ

Go являСтся простым языком программирования ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ лишним Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² Π²Π°ΡˆΡƒ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ ΠΈΠ·ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… языков. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ стартовал Π² 2007 Π³ΠΎΠ΄Ρƒ, ΠΈ благодаря усилиям Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Google, стал Ρ‚Π΅ΠΌ языком Go, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ сСгодня. Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡƒΠ΄Π΅Π»ΡΠ»ΠΎΡΡŒ лСгкости ΠΈ согласованности языка, Π΅Π³ΠΎ инструмСнтов ΠΈ стандартных Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, дСлая Go простым ΠΈ занятным Π² использовании.

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ

Π£ Go ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ исходный ΠΊΠΎΠ΄, Ρ‡Ρ‚ΠΎ Π·Π΄ΠΎΡ€ΠΎΠ²ΠΎ. И Π½Π΅ Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅ β€” Π΄Π°Π½Π½Ρ‹ΠΉ язык чувствитСлСн ΠΊ рСгистру.

Π€ΠΎΡ€ΡƒΠΌ Π“ΠΎΡ„Π΅Ρ€ΠΎΠ²

ΠœΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ Π½Π°Π΄ Ρ„ΠΎΡ€ΡƒΠΌΠΎΠΌ для программистов Π½Π° Golang. ΠžΡ‡Π΅Π½ΡŒ Π½ΡƒΠΆΠ½Ρ‹ ΠΌΠΎΠ΄Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ хотят ΠΏΠΎΠΌΠΎΡ‡ΡŒ с ΠΎΡ‚Π²Π΅Ρ‚Π°ΠΌΠΈ для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ² ΠΈ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π² Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠΈ Go-сообщСства.

Go Π½Π° Π€ΠΎΡ€ΡƒΠΌ

Π£Ρ€ΠΎΠΊΠΈ, ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΈ Π’ΠΈΠ΄Π΅ΠΎ

ΠœΡ‹ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ΅ΠΌ Π² ΠΏΠ°Π±Π»ΠΈΠΊΠ΅ Π’Πš ΠΈ Telegram качСствСнныС ΠΎΠ±ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠ΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ для быстрого изучСния Go. ΠŸΠΎΠ΄ΠΏΠΈΡˆΠΈΡ‚Π΅ΡΡŒ Π½Π° нас Π² Π’Πš ΠΈ Π² Telegram. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΡ‚Π΅ сообщСство Go программистов.

Go Π² Π’Πš

Go Π² Telegram

Π Π°Π·Π±Π΅Ρ€Π΅ΠΌ процСсс установки Go Π½Π° Windows 10. Π’Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΊΠ°ΠΊ это просто β€” достаточно Π±Π°Π·ΠΎΠ²Ρ‹Ρ… Π·Π½Π°Π½ΠΈΠΉ ΠΎ GitHub ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкой. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, это Π½Π΅ СдинствСнный способ установки, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ простым для Ρ‚Π΅Ρ…, Ρ‡ΡŒΠΈ знания кодирования ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹. ΠŸΡ€ΠΎΡΡ‚ΠΎ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°ΠΉΡ‚Π΅ΡΡŒ Π΄Π°Π½Π½Ρ‹Ρ… инструкций.

Π‘Π»Π΅Π΄ΡƒΠΉΡ‚Π΅ указаниям, ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡΡΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ порядка, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡ‚ΠΎΠΌ Π½Π΅ ΠΌΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΈ Π½Π΅ ΠΈΡΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ошибки, возникшиС Π²ΠΎ врСмя процСсса инсталляции.

Β 

Установка элСмСнтов Π² ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ порядкС

  1. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ Go ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ бСсплатныС Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ, сначала ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ Git, пСрСйдя ΠΏΠΎ ссылкС;
  2. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π° сайт инсталляции Go ΠΏΠΎ ссылкС. Π‘ΠΊΠ°Ρ‡Π°ΠΉΡ‚Π΅ ΠΈ установитС послСдний 64-Π±ΠΈΡ‚Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ Go для Microsoft Windows OS;
  3. Π‘Π»Π΅Π΄ΡƒΠΉΡ‚Π΅ инструкциям ΠΏΠΎ установкС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Go;
  4. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡƒΡŽ строку cmd ΠΈ Π½Π°Π±Π΅Ρ€ΠΈΡ‚Π΅ go version;
  5. Π’Ρ‹Π²ΠΎΠ΄ послС Π²Π²ΠΎΠ΄Π° go version Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ (Π² зависимости ΠΎΡ‚ вСрсии, ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρƒ вас другая):

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ пространства Go

Для Π½Π°Ρ‡Π°Π»Π° ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚ΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ Go. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ ПанСль УправлСния, Π·Π°Ρ‚Π΅ΠΌ слСдуйтС Π² БистСма ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ > БистСма > Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ систСмы. ΠšΠ»ΠΈΠΊΠ½ΠΈΡ‚Π΅ Π½Π° ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π‘Ρ€Π΅Π΄Ρ‹ с ΠΏΡ€Π°Π²ΠΎΠΉ Π½ΠΈΠΆΠ½Π΅ΠΉ стороны. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Ρƒ Path Π² БистСмныС ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π΅ΡΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ C:\Go\bin.

Π—Π°Ρ‚Π΅ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‡Π΅Π΅ пространство Go. Оно Π±ΡƒΠ΄Π΅Ρ‚ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ Π½ΠΎΠ²ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅ ΠΎΡ‚ Ρ‚ΠΎΠΉ, Π³Π΄Π΅ сохранСны ΠΈ установлСны Ρ„Π°ΠΉΠ»Ρ‹ Go. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ваши установлСнныС Ρ„Π°ΠΉΠ»Ρ‹ Go ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΏΠΎ ΠΏΡƒΡ‚ΠΈ C:\Go, Π° ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‡Π΅Π΅ пространство Go ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎ адрСсу C:\Projects\Go.

Π’ Π½ΠΎΠ²ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅ Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ пространства Go настраиваСм Ρ‚Ρ€ΠΈ Π½ΠΎΠ²Ρ‹Π΅ ΠΏΠ°ΠΏΠΊΠΈ β€” bin, pkg, src:

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ срСды GOPATH

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ GOPATH ΠΈ свяТСм Π΅Π΅ с Π½Π΅Π΄Π°Π²Π½ΠΎ созданным Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌ пространством Go. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² ПанСль УправлСния, Π·Π°Ρ‚Π΅ΠΌ Π² БистСма ΠΈ ΠΏΠΎΡ‚ΠΎΠΌ Π½Π° ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ срСды. Π—Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠ΄ БистСмныС ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Π½Π° Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ.

Рядом с Имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π²Π²Π΅Π΄ΠΈΡ‚Π΅ GOPATH, Π° рядом с Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π²Π²Π΅Π΄ΠΈΡ‚Π΅ C:\Projects\Go:

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, установлСны Π»ΠΈ ΠΏΡƒΡ‚ΠΈ Π²Π΅Ρ€Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ‡Π΅Ρ€Π΅Π· Π²Π²ΠΎΠ΄ echo %GOPATH% Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС.

ВСстированиС установки Golang Π² Windows

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»ΠΈ всС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡƒΡŽ строку ΠΈ Π½Π°Π±Π΅Ρ€ΠΈΡ‚Π΅: go get github.com/golang/example/hello.

ΠŸΠΎΠ΄ΠΎΠΆΠ΄ΠΈΡ‚Π΅, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ скомпилировано (Π½Π° это ΡƒΠΉΠ΄Π΅Ρ‚ ΠΏΠ°Ρ€Ρƒ сСкунд), Π·Π°Ρ‚Π΅ΠΌ Π½Π°Π±Π΅Ρ€ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ: %GOPATH%/bin/hello.

Если установка Π±Ρ‹Π»Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ сообщСниС: β€œHello, Go examples!”

НадСюсь, Ρƒ вас всС ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ. Если ΠΆΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ ошибки ΠΈΠ»ΠΈ появились нСпонятныС сообщСния, Π½Π°Π±Π΅Ρ€ΠΈΡ‚Π΅ Π²Π½ΠΈΠ·Ρƒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки: β€œgo env”.

ΠŸΡ€ΠΈ составлСнии Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ использовались ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π½ΠΈΠΆΠ΅ рСсурсы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ ΠΏΡ€ΠΈ настройкС Go Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС Windows: Wade Wegner’s visually-simple & stylistic article.

ΠŸΠΎΠ½Ρ€Π°Π²ΠΈΠ»Π°ΡΡŒ ΡΡ‚Π°Ρ‚ΡŒΡ?

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈ наш ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ большС Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°!

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ установки Go Π½Π° Ubuntu 20.04

Go являСтся соврСмСнным языком программирования, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΌ с участиСм Google. Он становится всС Π±ΠΎΠ»Π΅Π΅ популярным Π² сфСрС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΠΎΠ±ΡˆΠΈΡ€Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. Π’ Π΄Π°Π½Π½ΠΎΠΌ руководствС Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ послСднюю Π²Π΅Ρ€ΡΠΈΡŽ Go (вСрсия Go 1.15 Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ тСкста), Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ простоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Hello World.

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ

Для использования Π΄Π°Π½Π½ΠΎΠ³ΠΎ руководства Ρƒ вас Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ доступ ΠΊ систСмС Ubuntu 20.04, настроСнной для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π±Π΅Π· ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ root с привилСгиями sudo.

Π€ΠΎΡ€ΡƒΠΌ Π“ΠΎΡ„Π΅Ρ€ΠΎΠ²

ΠœΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ Π½Π°Π΄ Ρ„ΠΎΡ€ΡƒΠΌΠΎΠΌ для программистов Π½Π° Golang. ΠžΡ‡Π΅Π½ΡŒ Π½ΡƒΠΆΠ½Ρ‹ ΠΌΠΎΠ΄Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ хотят ΠΏΠΎΠΌΠΎΡ‡ΡŒ с ΠΎΡ‚Π²Π΅Ρ‚Π°ΠΌΠΈ для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ² ΠΈ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π² Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠΈ Go-сообщСства.

Go Π½Π° Π€ΠΎΡ€ΡƒΠΌ

Π£Ρ€ΠΎΠΊΠΈ, ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΈ Π’ΠΈΠ΄Π΅ΠΎ

ΠœΡ‹ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ΅ΠΌ Π² ΠΏΠ°Π±Π»ΠΈΠΊΠ΅ Π’Πš ΠΈ Telegram качСствСнныС ΠΎΠ±ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠ΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ для быстрого изучСния Go. ΠŸΠΎΠ΄ΠΏΠΈΡˆΠΈΡ‚Π΅ΡΡŒ Π½Π° нас Π² Π’Πš ΠΈ Π² Telegram. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΡ‚Π΅ сообщСство Go программистов.

Go Π² Π’Πš

Go Π² Telegram

Установка Go Π½Π° Ubuntu

Для установки Π²Π°ΠΌ потрСбуСтся послСдняя вСрсии Go 1.15, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Π½Π° ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ страницС. На сайтС Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ URL для Ρ‚Π°Ρ€Π±ΠΎΠ»Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ Ρ€Π΅Π»ΠΈΠ·Π° вмСстС с Π΅Π³ΠΎ Ρ…Π΅ΡˆΠ΅ΠΌ SHA256.

ΠŸΠΎΡΠ΅Ρ‚ΠΈΡ‚Π΅ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ страницу скачиваний Go ΠΈ Π½Π°ΠΉΠ΄ΠΈΡ‚Π΅ URL для Ρ‚Π°Ρ€Π±ΠΎΠ»Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ Ρ€Π΅Π»ΠΈΠ·Π° вмСстС с Π΅Π³ΠΎ Ρ…Π΅ΡˆΠ΅ΠΌ SHA256. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ΡΡŒ Π² домашнСй Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ curl для получСния Ρ‚Π°Ρ€Π±ΠΎΠ»Π°:

cd ~
curl -O https://dl.google.com/go/go1.15.linux-amd64.tar.gz

cd ~

curl -O https://dl.google.com/go/go1.15.linux-amd64.tar.gz

Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ sha256sumΒ  для утвСрТдСния Ρ‚Π°Ρ€Π±ΠΎΠ»Π°:

sha256sum go1.15.linux-amd64.tar.gz

sha256sum go1.15.linux-amd64.tar.gz

ΠžΠ±Ρ€Π°Π·Π΅Ρ† Π²Ρ‹Π²ΠΎΠ΄Π°:

go1.15.linux-amd64.tar.gz
2d75848ac606061efe52a8068d0e647b35ce487a15bb52272c427df485193602 go1.15.linux-amd64.tar.gz

go1.15.linux-amd64.tar.gz

2d75848ac606061efe52a8068d0e647b35ce487a15bb52272c427df485193602Β Β go1.15.linux-amd64.tar.gz

Π’Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Ρ…Π΅Ρˆ, ΠΊΠ°ΠΊ Ρ‚ΠΎΡ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π΄Π΅Π»Π΅Π½ Π² Π²Ρ‹Π²ΠΎΠ΄Π΅ Π²Ρ‹ΡˆΠ΅. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ совпадаСт с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ находится Π½Π° страницС Π·Π°Π³Ρ€ΡƒΠ·ΠΎΠΊ.

Β 

Π—Π°Ρ‚Π΅ΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ tar для извлСчСния Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ· Ρ‚Π°Ρ€Π±ΠΎΠ»Π°. Π€Π»Π°Π³ x Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ tar ΠΎΠ± ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠΈ, v сообщаСт, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ ΠΏΠΎΠ»Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ c ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ Ρ„Π°ΠΉΠ»Π°Ρ… (список ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²), Π° f Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΡƒΡ‚ΠΎΡ‡Π½ΠΈΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°.

tar xvf go1.15.linux-amd64.tar.gz

tar xvf go1.15.linux-amd64.tar.gz

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π² домашнСй ΠΏΠ°ΠΏΠΊΠ΅ Ρƒ вас Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ дирСктория ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ go. РСкурсивно ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π° ΠΏΠ°ΠΏΠΊΠΈ go ΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΊ root, ΠΈ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² /usr/local:

sudo chown -R root:root ./go
sudo mv go /usr/local

sudo chown -R root:root ./go

sudo mv go /usr/local

На Π·Π°ΠΌΠ΅Ρ‚ΠΊΡƒ: Π₯отя рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΎΠΊΠ°Ρ†ΠΈΡŽ /usr/local/go, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Π²Ρ‹Π±ΠΈΡ€Π°ΡŽΡ‚ мСсто ΠΏΠΎ своСму ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Π½ΠΈΡŽ.

Настройка GOPATH Π² Ubuntu

На Π΄Π°Π½Π½ΠΎΠΌ этапС ΠΌΡ‹ настроим Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ вашСй срСды.

Для Π½Π°Ρ‡Π°Π»Π° установим Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, которая сообщаСт Go, Π³Π΄Π΅ ΠΈΡΠΊΠ°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹.

Π’ ΠΊΠΎΠ½Ρ†Π΅ Ρ„Π°ΠΉΠ»Π° Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ строку:

export GOPATH=$HOME/work
export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin

export GOPATH=$HOME/work

export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin

Если Π²Ρ‹ Π²Ρ‹Π±Π΅Ρ€Π΅Ρ‚Π΅ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ мСсто установки Go, Ρ‚ΠΎ ΠΈ Π² Ρ„Π°ΠΉΠ»Π΅ Π²Ρ‹ΡˆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ ваши ΠΏΡƒΡ‚ΠΈ ΠΊ Go. Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ настройки Π½Π° Ρ‚ΠΎΡ‚ случай, Ссли Go установлСн Π² домашнСй Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ:

export GOROOT=$HOME/go
export GOPATH=$HOME/work
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

export GOROOT=$HOME/go

export GOPATH=$HOME/work

export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚Π΅ ΠΈ Π·Π°ΠΊΡ€ΠΎΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ». Π—Π°Ρ‚Π΅ΠΌ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŒ, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ²:

ВСстированиС Go послС установки

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Go установлСн ΠΈ ΠΏΡƒΡ‚ΠΈ настроСны, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ провСсти тСсты, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Go Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π½ΠΎΠ²ΡƒΡŽ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ для Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ пространства Go, ΠΊΡƒΠ΄Π° Go Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ созданныС Ρ„Π°ΠΉΠ»Ρ‹:

Π—Π°Ρ‚Π΅ΠΌ создайтС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠΈ Ρ‡Π΅Ρ€Π΅Π· Π΄Π°Π½Π½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ тСстовый Ρ„Π°ΠΉΠ». Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ user своим ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π½Π° GitHub, Ссли Π²Ρ‹ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Git для ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² ΠΈ хранСния ΠΊΠΎΠ΄Π° Go Π½Π° GitHub. Если Π²Ρ‹ Π½Π΅ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ GitHub для хранСния ΠΈ управлСния ΠΊΠΎΠ΄ΠΎΠΌ, структура вашСй ΠΏΠ°ΠΏΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ ~/my_project.

mkdir -p work/src/github.com/user/hello

mkdir -p work/src/github.com/user/hello

Π—Π°Ρ‚Π΅ΠΌ создаСм простой Go Ρ„Π°ΠΉΠ» Β«Hello WorldΒ».

nano ~/work/src/github.com/user/hello/hello.go

nano ~/work/src/github.com/user/hello/hello.go

Π’Π½ΡƒΡ‚Ρ€ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° Π²ΡΡ‚Π°Π²ΡŒΡ‚Π΅ Π½ΠΈΠΆΠ΅ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Go, ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ содСрТимого, ΠΈ создаСт Π½ΠΎΠ²ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для Π²Ρ‹Π²ΠΎΠ΄Π° β€œHello, World” ΠΏΡ€ΠΈ запускС.

package main

import «fmt»

func main() {
fmt.Printf(«hello, world\n»)
}

package main

Β 

import «fmt»

Β 

func main() {

Β Β Β Β fmt.Printf(«hello, world\n»)

}

Данная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ β€œhello, world” ΠΏΡ€ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΌ запускС, Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Go скомпилированы Π²Π΅Ρ€Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚Π΅ ΠΈ Π·Π°ΠΊΡ€ΠΎΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ», Π·Π°Ρ‚Π΅ΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠΉΡ‚Π΅ Π΅Π³ΠΎ Ρ‡Π΅Ρ€Π΅Π· Π²Ρ‹Π·ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ go install:

go install github.com/user/hello

go install github.com/user/hello

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ скомпилированный Ρ„Π°ΠΉΠ» Ρ‡Π΅Ρ€Π΅Π· простоС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

Если ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ β€œhello, world”, Ρ‚ΠΎΠ³Π΄Π° Go установлСн ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΈ являСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ скомпилированный hello установлСн, использовав ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ which:

Π’Ρ‹Π²ΠΎΠ΄:

/home/user/work/bin/hello

/home/user/work/bin/hello

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ПослС скачивания ΠΈ установки послСднСй вСрсии Go, Π° Ρ‚Π°ΠΊΠΆΠ΅ настройки ΠΏΡƒΡ‚Π΅ΠΉ, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ систСму, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Go-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

ΠŸΠΎΠ½Ρ€Π°Π²ΠΈΠ»Π°ΡΡŒ ΡΡ‚Π°Ρ‚ΡŒΡ?

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈ наш ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ большС Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°!

ΠŸΡ€Π°Π³ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ руководство / Π‘Π»ΠΎΠ³ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ OTUS. Онлайн-ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ / Π₯Π°Π±Ρ€

ВсСм ΠΏΡ€ΠΈΠ²Π΅Ρ‚. Π’ ΠΏΡ€Π΅Π΄Π΄Π²Π΅Ρ€ΠΈΠΈ старта курса Β«Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ GolangΒ» ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΠ»ΠΈ для вас Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ интСрСсный ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄.


ΠœΠΎΠ΄ΡƒΠ»ΠΈ β€” это способ Π±ΠΎΡ€ΡŒΠ±Ρ‹ с зависимостями Π² Go. Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ прСдставлСнныС Π² качСствС экспСримСнта, ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ вывСсти Π½Π° ΠΏΠΎΠ»Π΅ Π² качСствС Π½ΠΎΠ²ΠΎΠ³ΠΎ стандарта для управлСния ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ с вСрсии 1.13.

Π― Π½Π°Ρ…ΠΎΠΆΡƒ эту Ρ‚Π΅ΠΌΡƒ достаточно Π½Π΅ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ², ΠΏΡ€ΠΈΡˆΠ΅Π΄ΡˆΠΈΡ… с Π΄Ρ€ΡƒΠ³ΠΈΡ… языков, ΠΈ поэтому я Ρ€Π΅ΡˆΠΈΠ» ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ здСсь Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сообраТСния ΠΈ совСты, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠΌ, Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΊΠ°ΠΊ я, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ прСдставлСниС ΠΎΠ± ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ Π² Go. ΠœΡ‹ Π½Π°Ρ‡Π½Π΅ΠΌ с ΠΎΠ±Ρ‰Π΅Π³ΠΎ знакомства, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΠΌΠ΅Π½Π΅Π΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΌ аспСктам, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ использованиС ΠΏΠ°ΠΏΠΊΠΈ vendor, использованиС ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ с Docker Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅, зависимости инструмСнтов ΠΈ Ρ‚. Π΄.

Если Π²Ρ‹ ΡƒΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с модулями Go ΠΈ Π·Π½Π°Π΅Ρ‚Π΅ Wiki, ΠΊΠ°ΠΊ свои ΠΏΡΡ‚ΡŒ ΠΏΠ°Π»ΡŒΡ†Π΅Π², эта ΡΡ‚Π°Ρ‚ΡŒΡ, вСроятно, Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ для вас ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ. Но для ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ…, ΠΎΠ΄Π½Π°ΠΊΠΎ, ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ нСсколько часов ΠΏΡ€ΠΎΠ± ΠΈ ошибок.

Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Ссли Π²Π°ΠΌ ΠΏΠΎ ΠΏΡƒΡ‚ΠΈ, Π·Π°ΠΏΡ€Ρ‹Π³ΠΈΠ²Π°ΠΉΡ‚Π΅ ΠΈ Π½Π°ΡΠ»Π°ΠΆΠ΄Π°ΠΉΡ‚Π΅ΡΡŒ ΠΏΠΎΠ΅Π·Π΄ΠΊΠΎΠΉ.

Быстрый запуск

Если Π² ваш ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΡƒΠΆΠ΅ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ вСрсиями, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ просто Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ

go mod init

Или ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. Π­Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ ΠΈΠΌΠ΅Π½ΠΈ, URL ΠΈ ΠΏΡƒΡ‚ΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° для вашСго ΠΏΠ°ΠΊΠ΅Ρ‚Π°:

go mod init github.com/you/hello

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° создаст Ρ„Π°ΠΉΠ» go.mod, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ опрСдСляСт трСбования ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ Π»ΠΎΡ‡ΠΈΡ‚ зависимости Π½Π° ΠΈΡ… ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ вСрсии (Π² качСствС Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ для вас, это ΠΊΠ°ΠΊ package.json ΠΈ package-lock.json, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Π½Ρ‹Π΅ Π² ΠΎΠ΄ΠΈΠ½ Ρ„Π°ΠΉΠ»):

module github.com/you/hello
go 1.12

ЗапуститС go get, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ Π² ваш ΠΏΡ€ΠΎΠ΅ΠΊΡ‚:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ хотя Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ вСрсий с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ go get, Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ Π²Ρ‹ здСсь опрСдСляСтС, это Π½Π΅ конкрСтная, Π° минимальная вСрсия. Как ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ ΠΏΠΎΠ·ΠΆΠ΅, Π΅ΡΡ‚ΡŒ способ изящно Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ зависимости Π² соотвСтствии с semver.

# use Git tags
go get github.com/go-chi/[email protected]
# or Git branch name
go get github.com/go-chi/chi@master
# or Git commit hash
go get github.com/go-chi/chi@08c92af

Π’Π΅ΠΏΠ΅Ρ€ΡŒ наш Ρ„Π°ΠΉΠ» go.mod выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

module github.com/you/hello
go 1.12
require github.com/go-chi/chi v4.0.2+incompatible // indirect

Буффикс +incompatible добавляСтся ΠΊΠΎ всСм ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅Ρ‰Π΅ Π½Π΅ настроСны ΠΏΠΎΠ΄ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Go ΠΈΠ»ΠΈ Π½Π°Ρ€ΡƒΡˆΠ°ΡŽΡ‚ ΠΈΡ… ΠΏΡ€Π°Π²ΠΈΠ»Π° управлСния вСрсиями.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ Π΅Ρ‰Π΅ Π½ΠΈΠ³Π΄Π΅ Π² нашСм ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Π½Π΅ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ этот ΠΏΠ°ΠΊΠ΅Ρ‚, ΠΎΠ½ Π±Ρ‹Π» ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½ ΠΊΠ°ΠΊ // indirect. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ привСсти это Π² порядок с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

go mod tidy

Π’ зависимости ΠΎΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ состояния вашСго рСпозитория, ΠΎΠ½Π° Π»ΠΈΠ±ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, Π»ΠΈΠ±ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ // indirect.

Если какая-Π»ΠΈΠ±ΠΎ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ сама ΠΏΠΎ сСбС Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ go.mod (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΠ½Π° Π΅Ρ‰Π΅ Π½Π΅ настроСна ΠΏΠΎΠ΄ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ), Ρ‚ΠΎΠ³Π΄Π° всС Π΅Π΅ зависимости Π±ΡƒΠ΄ΡƒΡ‚ записаны Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Ρ„Π°ΠΉΠ» go.mod (ΠΊΠ°ΠΊ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, ваш Ρ„Π°ΠΉΠ» go.mod) вмСстС с ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅ΠΌ // indirect, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Ρ‚Π°ΠΌ Π½Π΅ ΠΎΡ‚ прямого ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° Π² ваш ΠΌΠΎΠ΄ΡƒΠ»ΡŒ.

Π’ глобальном ΠΏΠ»Π°Π½Π΅ Ρ†Π΅Π»ΡŒ go mod tidy состоит Ρ‚Π°ΠΊΠΆΠ΅ Π² Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π»ΡŽΠ±Ρ‹Ρ… зависимостСй, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΉ ОБ, Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ ΠΈ Ρ‚Π΅Π³ΠΎΠ² сборки. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ запускайтС Π΅Π΅ ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ Ρ€Π΅Π»ΠΈΠ·ΠΎΠΌ.

Π‘Π»Π΅Π΄ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π·Π° Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ послС добавлСния зависимости Π±Ρ‹Π» создан Ρ„Π°ΠΉΠ» go.sum. Π’Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ это lock-Ρ„Π°ΠΉΠ». Но Π½Π° самом Π΄Π΅Π»Π΅ go.mod ΡƒΠΆΠ΅ прСдоставляСт достаточно ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ для Π½Π° 100% воспроизводимых сборок. Π€Π°ΠΉΠ» go.sum создаСтся Π² ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΡ‡Π½Ρ‹Ρ… цСлях: ΠΎΠ½ содСрТит ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹Π΅ криптографичСскиС ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅ суммы содСрТимого ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… вСрсий модуля.

ΠžΡ‚Ρ‡Π°ΡΡ‚ΠΈ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ go.sum Π½Π΅ являСтся lock-Ρ„Π°ΠΉΠ»ΠΎΠΌ, ΠΎΠ½ сохраняСт записанныС ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅ суммы для вСрсии модуля Π΄Π°ΠΆΠ΅ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ пСрСстанСтС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот ΠΌΠΎΠ΄ΡƒΠ»ΡŒ. Π­Ρ‚ΠΎ позволяСт ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅ суммы, Ссли Π²Ρ‹ ΠΏΠΎΠ·ΠΆΠ΅ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ Π΅Π³ΠΎ использованиС, Ρ‡Ρ‚ΠΎ обСспСчиваСт Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ.

Волько Ρ‡Ρ‚ΠΎ ΠΌΠΈΠ³Ρ€ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ mkcert Π² ΠΌΠΎΠ΄ΡƒΠ»ΠΈ (с vendor/ для ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости) ΠΈ всС ΠΏΡ€ΠΎΡˆΠ»ΠΎ Π³Π»Π°Π΄ΠΊΠΎ
https://github.com/FiloSottile/mkcert/commit/26ac5f35395fb9cba3805faf1a5a04d260271291

$ GO111MODULE=on go1.11rc1 mod init
$ GO111MODULE=on go1.11rc1 mod vendor
$ git add go.mod go.sum vendor
$ git rm Gopkg.lock Gopkg.toml Makefile

FAQ: Π”ΠΎΠ»ΠΆΠ΅Π½ Π»ΠΈ я ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΈΡ‚ΡŒ go.sum Π² git?

A: ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎ Π΄Π°. Π‘ Π½ΠΈΠΌ обладатСлям Π²Π°ΡˆΠΈΡ… источников Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠΌ рСпозиториям GitHub ΠΈ Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π°ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… ΠΏΡƒΡ‚Π΅ΠΉ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°. Π£ΠΆΠ΅ Π½Π° ΠΏΡƒΡ‚ΠΈ ΠΊ Π½Π°ΠΌ Π½Π΅Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΡˆΠ΅, Π½Ρƒ Π° ΠΏΠΎΠΊΠ° это Ρ‚Π° ΠΆΠ΅ модСль, Ρ‡Ρ‚ΠΎ ΠΈ Ρ…ΡΡˆΠΈ Π² lock-Ρ„Π°ΠΉΠ»Π°Ρ….

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ go build ΠΈ go test, автоматичСски загрузят всС ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ зависимости, хотя Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это явно с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ go mod download, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ кэши, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌΠΈ для CI.

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ всС наши ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΈΠ· всСх ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ $GOPATH/pkg/mod. ΠœΡ‹ обсудим это ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΏΠΎΠ·ΠΆΠ΅.

ОбновлСниС вСрсий ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ go get -u ΠΈΠ»ΠΈ go get -u=patch для обновлСния зависимостСй Π΄ΠΎ послСднСй ΠΌΠΈΠ½ΠΎΡ€Π½ΠΎΠΉ вСрсии ΠΈΠ»ΠΈ ΠΏΠ°Ρ‚Ρ‡Π° соотвСтствСнно.

Но Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ Ρ‚Π°ΠΊ Π΄ΠΎ ΠΌΠ°ΠΆΠΎΡ€Π½Ρ‹Ρ… вСрсий. Код, Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹ΠΉ Π² ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Go, Π΄ΠΎΠ»ΠΆΠ΅Π½ тСхничСски ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ:

  • Π‘ΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ semver (ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π΅Π³Π° VCS v1.2.3).
  • Если ΠΌΠΎΠ΄ΡƒΠ»ΡŒ вСрсии v2 ΠΈΠ»ΠΈ Π²Ρ‹ΡˆΠ΅, маТорная вСрсия модуля Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° ΠΊΠ°ΠΊ /vN Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΏΡƒΡ‚ΠΈ модуля, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Π² Ρ„Π°ΠΉΠ»Π΅ go.mod, ΠΈ Π² ΠΏΡƒΡ‚ΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π°:
import "github.com/you/hello/v2"

По-Π²ΠΈΠ΄ΠΈΠΌΠΎΠΌΡƒ, это сдСлано для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Π½Ρ‹Π΅ вСрсии ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹Ρ‚ΡŒ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π² ΠΎΠ΄Π½ΠΎΠΉ сборкС (см. diamond dependency problem).

Π’ Π΄Π²ΡƒΡ… словах, Go ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ ΠΏΡ€ΠΈ внСсСнии ΠΌΠ°ΠΆΠΎΡ€Π½Ρ‹Ρ… вСрсий.

Π—Π°ΠΌΠ΅Π½Π° ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ для своСго собствСнного Ρ„ΠΎΡ€ΠΊΠ° ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ локального ΠΏΡƒΡ‚ΠΈ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ replace:

go mod edit -replace github.com/go-chi/chi=./packages/chi

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

module github.com/you/hello
go 1.12
require github.com/go-chi/chi v4.0.2+incompatible
replace github.com/go-chi/chi => ./packages/chi

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ строку Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΈΠ»ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ:

go mod edit -dropreplace github.com/go-chi/chi

ΠŸΠΎΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π½ΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ зависимостями

Π˜ΡΡ‚ΠΎΡ€ΠΈΡ‡Π΅ΡΠΊΠΈ вСсь ΠΊΠΎΠ΄ Go хранился Π² ΠΎΠ΄Π½ΠΎΠΌ гигантском ΠΌΠΎΠ½ΠΎΡ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊ Google ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ свою ΠΊΠΎΠ΄ΠΎΠ²ΡƒΡŽ Π±Π°Π·Ρƒ, ΠΈ это сказываСтся Π½Π° Π΄ΠΈΠ·Π°ΠΉΠ½Π΅ языка.

ΠœΠΎΠ΄ΡƒΠ»ΠΈ Go β€” это своСго Ρ€ΠΎΠ΄Π° отступлСниС ΠΎΡ‚ этого ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°. Π’Π°ΠΌ большС Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ всС свои ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ Π² $GOPATH.

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, тСхничСски всС ваши Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Π΅ зависимости всС Π΅Ρ‰Π΅ ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² $GOPATH/pkg/mod. Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Docker-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΏΡ€ΠΈ локальной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅, это ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ зависимости хранятся Π²Π½Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΎΠ½ΠΈ просто Π½Π΅ Π²ΠΈΠ΄Π½Ρ‹ Π² вашСй IDE.

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ это Π½Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° для Π΄Ρ€ΡƒΠ³ΠΈΡ… языков, Π½ΠΎ это Ρ‚ΠΎ, с Ρ‡Π΅ΠΌ я Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ столкнулся ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·ΠΎΠΉ Go.

К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Π΅ΡΡ‚ΡŒ нСсколько (Π½Π΅Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ…) способов Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹.

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ 1. УстановитС GOPATH Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

На ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π½Π΅Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌ, Π½ΠΎ Ссли Π²Ρ‹ запускаСтС Go ΠΈΠ· ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΅Π³ΠΎ GOPATH, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π» Π½Π° ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Π±Ρ‹Π»ΠΈ доступны ΠΈΠ· хоста:

version: '3.7'

services:
  app:
    command: tail -f /dev/null
    image: golang:1.12.6-stretch
    environment:
      # ВсС ваши зависимости Π±ΡƒΠ΄ΡƒΡ‚ располоТСны прямо здСсь - /code/.go/pkg/mod
      - GOPATH=/code/.go
    ports:
      - 8000:8000
    volumes:
      - ./:/code:cached
    working_dir: /code

ΠŸΠΎΠΏΡƒΠ»ΡΡ€Π½Ρ‹Π΅ IDE Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ GOPATH Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° (Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ области):

ЕдинствСнный нСдостаток этого ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° β€” отсутствиС взаимодСйствия со срСдой выполнСния Go Π½Π° хост-ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅. Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ всС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Go Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°.

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ 2: Π’Π΅Π½Π΄ΠΎΡ€ΠΈΠ½Π³ Π²Π°ΡˆΠΈΡ… зависимостСй

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ способ β€” ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ зависимости вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π² ΠΏΠ°ΠΏΠΊΡƒ vendor:

go mod vendor

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ сразу ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ: ΠΌΡ‹ НЕ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅ΠΌ Go ΠΏΡ€ΡΠΌΡƒΡŽ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ² Π² ΠΏΠ°ΠΏΠΊΡƒ vendor: с модулями это Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. ΠœΡ‹ просто ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ ΡƒΠΆΠ΅ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹.

К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅, Ссли Π²Ρ‹ ΠΎΡ‚Π²Π΅Π½Π΄ΠΎΡ€ΠΈΡ‚Π΅ свои зависимости, ΠΊΠ°ΠΊ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅, Π·Π°Ρ‚Π΅ΠΌ очиститС $GOPATH/pkg/mod, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ нСсколько Π½ΠΎΠ²Ρ‹Ρ… зависимостСй Π² ваш ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

  1. Go пСрСстроит кэш Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ для всСх ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΏΠΎ $GOPATH/pkg/mod/cache.
  2. ВсС Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ скопированы Π² $GOPATH/pkg/mod.
  3. И, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Go скопируСт эти ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π² vendor ΠΏΠ°ΠΏΠΊΡƒ, удаляя ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, тСсты ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ‹ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π½Π΅ зависитС.

Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Π² этой Π½Π΅Π΄Π°Π²Π½ΠΎ созданной vendor-ΠΏΠ°ΠΏΠΊΠ΅ отсутствуСт ΠΌΠ½ΠΎΠ³ΠΎ Π²Π΅Ρ‰Π΅ΠΉ:

Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Docker Compose выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ (ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° привязки Ρ‚ΠΎΠΌΠΎΠ²):

version: '3.7'

services:
  app:
    command: tail -f /dev/null
    image: golang:1.12.6-stretch
    ports:
      - 8000:8000
    volumes:
     # Π­Ρ‚ΠΎ кэш ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ go, Π±Π΅Π· Π½Π΅Π³ΠΎ Π²Π°ΠΌ придСтся ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ всС зависимости послС пСрСзапуска ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°
      - modules:/go/pkg/mod/cache
      - ./:/code:cached
    working_dir: /code 

volumes:
  modules:
    driver: local

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ я НЕ ΠΊΠΎΠΌΠΈΡ‡Ρƒ эту vendor -ΠΏΠ°ΠΏΠΊΡƒ Π² систСму контроля вСрсий ΠΈΠ»ΠΈ Π½Π΅ ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π΅. Π­Ρ‚ΠΎ строго Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ сцСнарий Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄Ρ€ΡƒΠ³ΠΈΡ… языках.

Однако, ΠΊΠΎΠ³Π΄Π° я Ρ‡ΠΈΡ‚Π°ΡŽ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠ΅ΠΉΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Go ΠΈ Π½Π΅ΠΊΠΎΡ‚Ρ€ΠΎΡ‹Π΅ прСдлоТСния, связанныС с частичным Π²Π΅Π½Π΄ΠΎΡ€ΠΈΠ½Π³ΠΎΠΌ (Π§Π•?), Ρƒ мСня складываСтся Π²ΠΏΠ΅Ρ‡Π°Ρ‚Π»Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ эта Ρ„ΠΈΡ‡Π° ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π°Π»Π°ΡΡŒ Π½Π΅ для этого юзкСйса.

Один ΠΈΠ· ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠ² Π½Π° reddit ΠΏΠΎΠΌΠΎΠ³ ΠΌΠ½Π΅ ΠΏΡ€ΠΎΠ»ΠΈΡ‚ΡŒ свСт Π½Π° это:

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ люди вСндорят свои зависимости ΠΏΠΎ Ρ‚Π°ΠΊΠΈΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ, ΠΊΠ°ΠΊ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ ΠΈΠΌΠ΅Ρ‚ΡŒ Π³Π΅Ρ€ΠΌΠ΅Ρ‚ΠΈΡ‡Π½Ρ‹Π΅ сборки Π±Π΅Π· доступа ΠΊ сСти, Π° Ρ‚Π°ΠΊΠΆΠ΅ наличия ΠΊΠΎΠΏΠΈΠΈ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… зависимостСй Π² случаС ΠΎΡ‚ΠΊΠ°Π·Π° github ΠΈΠ»ΠΈ исчСзновСния рСпозитория, ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Π»Π΅Π³ΠΊΠΎΠ³ΠΎ Π°ΡƒΠ΄ΠΈΡ‚Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² зависимостях с использованиСм стандартных инструмСнтов VCS ΠΈ Ρ‚. Π΄.

Π”Π°, Π½Π΅ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ ΠΈΠ· Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ мСня Π·Π°ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΠΎΠ²Π°Ρ‚ΡŒ.

Богласно ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Go, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ запросто ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π²Π΅Π½Π΄ΠΎΡ€ΠΈΠ½Π³, установив ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ срСды GOFLAGS=-mod=vendor. Π― Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ Ρ‚Π°ΠΊ Π΄Π΅Π»Π°Ρ‚ΡŒ. ИспользованиС Ρ„Π»Π°Π³ΠΎΠ² просто сломаСт go get Π±Π΅Π· прСдоставлСния ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… прСимущСств для вашСго Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½ΠΎΠ³ΠΎ Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ процСсса:

На самом Π΄Π΅Π»Π΅, СдинствСнноС мСсто Π³Π΄Π΅ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π²Π΅Π½Π΄ΠΎΡ€ΠΈΠ½Π³ β€” это вашС IDE:

ПослС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΡ€ΠΎΠ± ΠΈ ошибок я ΠΏΡ€ΠΈΡˆΠ΅Π» ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ для добавлСния Π²Π΅Π½Π΄ΠΎΡ€Π½Ρ‹Ρ… зависимостСй Π² этом ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅.

Π¨Π°Π³ 1. Π’Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ go get:

go get github.com/rs/[email protected]

Π¨Π°Π³ 2. Π˜ΠΌΠΏΠΎΡ€Ρ‚

Π—Π°Ρ‚Π΅ΠΌ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ Π΅Π³ΠΎ ΠΊΡƒΠ΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π² своСм ΠΊΠΎΠ΄Π΅:

import (
   _ "github.com/rs/zerolog"
)

Π¨Π°Π³ 3. Π’Π΅Π½Π΄ΠΎΡ€ΠΈΠ½Π³

НаконСц, ΠΎΡ‚Π²Π΅Π½Π΄ΠΎΡ€ΠΈΡ‚Π΅ ваши зависимости Π·Π°Π½ΠΎΠ²ΠΎ:

go mod vendor

БущСствуСт ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰Π΅Π΅ рассмотрСния ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ go mod vendor ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ (Π° ΠΌΠΎΠ³ΡƒΡ‚ ΠΈ Π½Π΅ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ) Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ связанныС с этим Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌ процСссом.

go mod vendor ΡƒΠΆΠ΅ автоматичСски Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Π΅ ΠΈΠΌΠΏΠΎΡ€Ρ‚Ρ‹, поэтому шаг 1 являСтся Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π² этом Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ процСссС (Ссли Π²Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ограничСния вСрсии). Однако, Π±Π΅Π· шага 2 ΠΎΠ½Π° Π½Π΅ ΠΏΠΎΠ΄Ρ…Π²Π°Ρ‚ΠΈΡ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚.

Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π»ΡƒΡ‡ΡˆΠ΅ взаимодСйствуСт с хост-систСмой, Π½ΠΎ ΠΎΠ½ довольно Π·Π°ΠΏΡƒΡ‚Π°Π½, ΠΊΠΎΠ³Π΄Π° Π΄Π΅Π»ΠΎ Π΄ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Π΄ΠΎ рСдактирования Π²Π°ΡˆΠΈΡ… зависимостСй.


Π›ΠΈΡ‡Π½ΠΎ я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ GOPATH являСтся Π±ΠΎΠ»Π΅Π΅ чистым ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ Π½Π΅ ΠΆΠ΅Ρ€Ρ‚Π²ΡƒΠ΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ go get. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, я Ρ…ΠΎΡ‚Π΅Π» ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎΠ±Π΅ стратСгии, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΏΠ°ΠΏΠΊΠ° vendor ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Π΅Π΅ для людСй, ΠΏΡ€ΠΈΡˆΠ΅Π΄ΡˆΠΈΡ… с Π΄Ρ€ΡƒΠ³ΠΈΡ… языков, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ PHP, Ruby, Javascript ΠΈ Ρ‚. Π΄. Как Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΈΠ· ΠΌΠ°Ρ…ΠΈΠ½Π°Ρ†ΠΈΠΉ, описанных Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅, это Π½Π΅ особСнно Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ Π²Ρ‹Π±ΠΎΡ€ для Go.

Зависимости инструмСнтов

Нам ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ инструмСнты Π½Π° основС Go, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ, Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ срСды Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. ΠŸΡ€ΠΎΡΡ‚Ρ‹ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ Ρ‚Π°ΠΊΠΎΠ³ΠΎ инструмСнта являСтся CompileDaemon, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ Π·Π° вашим ΠΊΠΎΠ΄ΠΎΠΌ Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ tools.go Ρ„Π°ΠΉΠ»Π°(имя Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ значСния) со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ содСрТаниСм:

// +build tools
package tools
import (
_ "github.com/githubnemo/CompileDaemon"
)

  • ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ // +build tools Π½Π΅ позволяСт вашим ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ сборкам фактичСски ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ваш инструмСнт.
  • Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ import позволяСт ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌ go Ρ‚ΠΎΡ‡Π½ΠΎ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ вСрсии Π²Π°ΡˆΠΈΡ… инструмСнтов Π² Ρ„Π°ΠΉΠ» go.mod вашСго модуля.

Ну Π²ΠΎΡ‚ ΠΈ всС. Π― надСюсь, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΎΠ·Π°Π΄Π°Ρ‡Π΅Π½Ρ‹, ΠΊΠ°ΠΊ я, ΠΊΠΎΠ³Π΄Π° я Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π½Π°Ρ‡Π°Π» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Go. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡΠ΅Ρ‚ΠΈΡ‚ΡŒ Go Modules wiki для получСния Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.


Π£ΡΠΏΠ΅Ρ‚ΡŒ Π½Π° курс.


Как ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ простой микросСрвис Π½Π° Golang ΠΈ gRPC ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΡŽ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Docker

ΠŸΡ€ΠΈΠ²Π΅Ρ‚, Π₯Π°Π±Ρ€! ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽ Π²Π°ΡˆΠ΅ΠΌΡƒ вниманию ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΡΡ‚Π°Ρ‚ΡŒΠΈ Β«Go, gRPC and DockerΒ» Π°Π²Ρ‚ΠΎΡ€Π° Mat Evans.

БущСствуСт мноТСство статСй ΠΎ совмСстном использовании Go ΠΈ Docker. Π‘ΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, способныС Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ собой, ΠΎΡ‡Π΅Π½ΡŒ Π»Π΅Π³ΠΊΠΎ. Π”Π°Π»Π΅Π΅ слСдуСт нСбольшой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ это дСлаСтся Π½Π° Π±Π°Π·ΠΎΠ²ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅.

Π§Ρ‚ΠΎ ΠΌΡ‹ создаСм?

ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ простыС ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΈ сСрвСр, Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ собой ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ gRPC. Π‘Π΅Ρ€Π²Π΅Ρ€ ΠΏΡ€ΠΈ этом Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ Docker-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π»Π΅Π³ΠΊΠΎ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ сСрвис, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° строку ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π² ΠΎΡ‚Π²Π΅Ρ‚ строку с ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½Π½Ρ‹ΠΌ порядком символов. НапримСр, посылаСм Β«ΠΊΠΎΡ‚Β» ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π² ΠΎΡ‚Π²Π΅Ρ‚ Β«Ρ‚ΠΎΠΊΒ».

.proto-Ρ„Π°ΠΉΠ»

.proto-Ρ„Π°ΠΉΠ» описысываСт, ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ наш сСрвис Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ ΠΈ ΠΊΠ°ΠΊΠΈΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΎΠ½ ΠΏΡ€ΠΈ этом Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°Ρ‚ΡŒΡΡ. Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΏΠ°ΠΏΠΊΡƒ proto, Π° Π² Π½Π΅ΠΉ β€” Ρ„Π°ΠΉΠ» reverse.proto

syntax = "proto3";

package reverse;

service Reverse {
    rpc Do(Request) returns (Response) {}
}

message Request {
    string message = 1;
}

message Response {
    string message = 1;
}

Ѐункция, которая вызываСтся ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎ Π½Π° сСрвСрС ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ, помСчаСтся ΠΊΠ°ΠΊ rpc. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, слуТащиС для ΠΎΠ±ΠΌΠ΅Π½Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΡƒΠ·Π»Π°ΠΌΠΈ, ΠΏΠΎΠΌΠ΅Ρ‡Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ message. ΠšΠ°ΠΆΠ΄ΠΎΠΌΡƒ полю сообщСния Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ порядковый Π½ΠΎΠΌΠ΅Ρ€. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС наша функция ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° сообщСния Ρ‚ΠΈΠΏΠ° Request ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ сообщСния Ρ‚ΠΈΠΏΠ° Response.
Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΡ‹ создали .proto-Ρ„Π°ΠΉΠ», Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ .go-Ρ„Π°ΠΉΠ» нашСго сСрвиса. Для этого Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡΠ΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠ½ΡΠΎΠ»ΡŒΠ½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π² ΠΏΠ°ΠΏΠΊΠ΅ proto:

$ protoc -I . reverse.proto --go_out=plugins=grpc:.

РазумССтся, сначала Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ сборку gRPC.
Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π²Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ создаст Π½ΠΎΠ²Ρ‹ΠΉ .go-Ρ„Π°ΠΉΠ», содСрТащий ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для создания ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, сСрвСра ΠΈ сообщСний, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΎΠ½ΠΈ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ. Если ΠΌΡ‹ Π²Ρ‹Π·ΠΎΠ²Π΅ΠΌ godoc, Ρ‚ΠΎ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

$ godoc .
PACKAGE DOCUMENTATION

package reverse
    import "."

Package reverse is a generated protocol buffer package.

It is generated from these files:

reverse.proto

It has these top-level messages:

Request
 Response
....

ΠšΠ»ΠΈΠ΅Π½Ρ‚

Π‘Ρ‹Π»ΠΎ Π±Ρ‹ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ, Ссли Π±Ρ‹ наш ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Π» Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:

reverse "this is a test"
tset a si siht

Π’ΠΎΡ‚ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаСт gRPC-ΠΊΠ»ΠΈΠ΅Π½Ρ‚, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ структуры Π΄Π°Π½Π½Ρ‹Ρ…, сгСнСрированныС ΠΈΠ· .proto-Ρ„Π°ΠΉΠ»Π°:

package main

import (
    "context"
    "fmt"
    "os"    
     pb "github.com/matzhouse/go-grpc/proto"
    "google.golang.org/grpc"
    "google.golang.org/grpc/grpclog"
)

func main() {
    opts := []grpc.DialOption{
        grpc.WithInsecure(),
    }
    args := os.Args
    conn, err := grpc.Dial("127.0.0.1:5300", opts...)

    if err != nil {
        grpclog.Fatalf("fail to dial: %v", err)
    }

    defer conn.Close()

    client := pb.NewReverseClient(conn)
    request := &pb.Request{
        Message: args[1],
    }
    response, err := client.Do(context.Background(), request)

    if err != nil {
        grpclog.Fatalf("fail to dial: %v", err)
    }

   fmt.Println(response.Message)
}

Π‘Π΅Ρ€Π²Π΅Ρ€

Π‘Π΅Ρ€Π²Π΅Ρ€ испозуСт Ρ‚ΠΎΡ‚ ΠΆΠ΅ самый сгСнСрированный .go-Ρ„Π°ΠΉΠ». Однако ΠΎΠ½ опрСдСляСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ интСрфСйс сСрвСра, Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΆΠ΅ Π½Π°ΠΌ придСтся Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ:

package main

import (
    "net"
    pb "github.com/matzhouse/go-grpc/proto"
    "golang.org/x/net/context"
    "google.golang.org/grpc"
    "google.golang.org/grpc/grpclog"
)

func main() {
    listener, err := net.Listen("tcp", ":5300")

    if err != nil {
        grpclog.Fatalf("failed to listen: %v", err)
    }

    opts := []grpc.ServerOption{}
    grpcServer := grpc.NewServer(opts...)

    pb.RegisterReverseServer(grpcServer, &server{})
    grpcServer.Serve(listener)
}

type server struct{}

func (s *server) Do(c context.Context, request *pb.Request)
(response *pb.Response, err error) {
    n := 0
    // Π‘reate an array of runes to safely reverse a string.
    rune := make([]rune, len(request.Message))

    for _, r := range request.Message {
        rune[n] = r
        n++
    }

    // Reverse using runes.
    rune = rune[0:n]

    for i := 0; i < n/2; i++ {
        rune[i], rune[n-1-i] = rune[n-1-i], rune[i]
    }

    output := string(rune)
    response = &pb.Response{
        Message: output,
    }

    return response, nil    
}

Docker

Π― ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡŽ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Docker ΠΈ для Ρ‡Π΅Π³ΠΎ ΠΎΠ½ Π½ΡƒΠΆΠ΅Π½. Π’ΠΎΡ‚ наш Dockerfile:

FROM golang:1.12

ADD . /go/src/github.com/matzhouse/go-grpc/server

RUN go install github.com/matzhouse/go-grpc/server

ENTRYPOINT ["/go/bin/server"]

EXPOSE 5300

Π—Π΄Π΅ΡΡŒ прописан ΠΊΠΎΠ΄ сборки Docker-ΠΎΠ±Ρ€Π°Π·Π°. Π Π°Π·Π±Π΅Ρ€Π΅ΠΌ Π΅Π³ΠΎ построчно.

FROM golang:1.12

Π­Ρ‚ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· нашСго прилоТСния Π½Π° основС Π·Π°Ρ€Π°Π½Π΅Π΅ созданного ΠΎΠ±Ρ€Π°Π·Π°, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ golang. Π­Ρ‚ΠΎ Docker-ΠΎΠ±Ρ€Π°Π· с ΡƒΠΆΠ΅ настроСнной срСдой для сборки ΠΈ запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, написанных Π½Π° Go.

ADD . /go/src/github.com/matzhouse/go-grpc/server

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ исходный ΠΊΠΎΠ΄ нашСго прилоТСния Π² GOPATH/src ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°.

RUN go install github.com/matzhouse/go-grpc/server

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° собираСт нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ· скопированных Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ исходников ΠΈ устанавливаСт Π΅Π³ΠΎ Π² ΠΏΠ°ΠΏΠΊΡƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° GOPATH/bin.

ENTRYPOINT ["/go/bin/server"]

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π» ΠΊΠ°ΠΊ исполнимая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°. Π’ Π½Π΅ΠΉ ΠΌΡ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ ΠΏΡƒΡ‚ΡŒ ΠΊ исполнимому Ρ„Π°ΠΉΠ»Ρƒ прилоТСния ΠΈ, ΠΏΡ€ΠΈ нСобходимости, Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки.

EXPOSE 5300

Π­Ρ‚ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΠΌΡ‹ сообщаСм ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΠΎΡ€Ρ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ доступны ΠΈΠ·Π²Π½Π΅.

Запуск сСрвСра

Нам Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ с нашим сСрвСрным ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ.
Π‘Π½Π°Ρ‡Π°Π»Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π· Π½Π° основС инструкций ΠΈΠ· Dockerfile:

$ sudo docker build -t matzhouse/grpc-server .
Sending build context to Docker daemon 31.76 MB
Step 1/5 : FROM golang
 ---> a0c61f0b0796
Step 2/5 : ADD . /go/src/github.com/matzhouse/go-grpc
 ---> 9508be6501c1
Removing intermediate container 94dc6e3a9a20
Step 3/5 : RUN go install github.com/matzhouse/go-grpc/server
 ---> Running in f3e0b993a420
 ---> f7a0370b7f7d
Removing intermediate container f3e0b993a420
Step 4/5 : ENTRYPOINT /go/bin/server
 ---> Running in 9c9619e45df4
 ---> fb34dfe1c0ea
Removing intermediate container 9c9619e45df4
Step 5/5 : EXPOSE 5300
 ---> Running in 0403390af135
 ---> 008e09b9aebd
Removing intermediate container 0403390af135
Successfully built 008e09b9aebd

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π· Π² спискС:

$ docker images
REPOSITORY                         TAG              IMAGE ID
...    
matzhouse/grpc-server              latest           008e09b9aebd
... 

ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ! Π£ нас Π΅ΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π· нашСго сСрвСрного прилоТСния, ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ с помошью ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

$ docker run -it -p 5300:5300 matzhouse/grpc-server

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС выполняСтся Ρ‚.Π½. проброс ΠΏΠΎΡ€Ρ‚ΠΎΠ². Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ для Π½Π΅Π³ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ ΠΊΠ°ΠΊ инструкция EXPOSE, Ρ‚Π°ΠΊ ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ -p.

Запуск ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π½Π΅ даст Π±ΠΎΠ»ΡŒΡˆΠΈΡ… прСимущСств, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ запустим Π΅Π³ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ способом:

$ go build -o reverse
$ ./reverse "this is a test"
tset a si siht

Бпасибо Π·Π° ΠΏΡ€ΠΎΡ‡Ρ‚Π΅Π½ΠΈΠ΅!

Как ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ Go (с GOPATH)

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅


Если Π²Ρ‹ Π½ΠΎΠ²ΠΈΡ‡ΠΎΠΊ Π² Go, просмотритС Π±ΠΎΠ»Π΅Π΅ свСТиС
Как Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ Go.

Π­Ρ‚ΠΎΡ‚ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ дСмонстрируСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ простого ΠΏΠ°ΠΊΠ΅Ρ‚Π° Go ΠΈ
прСдставляСт инструмСнт go, стандартный способ получСния,
сборка ΠΈ установка ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ Go.

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ go Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ свой ΠΊΠΎΠ΄ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ
ΠΏΡƒΡ‚ΡŒ. ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, ΠΏΡ€ΠΎΡ‡Ρ‚ΠΈΡ‚Π΅ этот Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ.Π’ Π½Π΅ΠΌ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ самый простой способ Π½Π°Ρ‡Π°Ρ‚ΡŒ установку Go.

ПодобноС объяснСниС доступно ΠΊΠ°ΠΊ
скринкаст.

Код ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ

ΠžΠ±Π·ΠΎΡ€

  • ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚Ρ‹ Go ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ хранят вСсь свой ΠΊΠΎΠ΄ Go Π² ΠΎΠ΄Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ области .
  • Π Π°Π±ΠΎΡ‡Π΅Π΅ пространство содСрТит мноТСство Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰ контроля вСрсий
    (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Git).
  • ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ содСрТит ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² .
  • ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚ состоит ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… исходных Ρ„Π°ΠΉΠ»ΠΎΠ² Go Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅.
  • ΠŸΡƒΡ‚ΡŒ ΠΊ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Ρƒ ΠΏΠ°ΠΊΠ΅Ρ‚Π° опрСдСляСт Π΅Π³ΠΎ ΠΏΡƒΡ‚ΡŒ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° .

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ это отличаСтся ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… срСд программирования, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ
ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‡ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ, ΠΈ Ρ€Π°Π±ΠΎΡ‡ΠΈΠ΅ области тСсно привязаны ΠΊ вСрсии
ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ рСпозиториями.

Π Π°Π±ΠΎΡ‡ΠΈΠ΅ мСста

Π Π°Π±ΠΎΡ‡Π΅Π΅ пространство — это иСрархия ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² с двумя ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°ΠΌΠΈ Π² ΠΊΠΎΡ€Π½Π΅:

  • src содСрТит исходныС Ρ„Π°ΠΉΠ»Ρ‹ Go ΠΈ
  • bin содСрТит исполняСмыС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹.

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ go создаСт ΠΈ устанавливаСт Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ bin .

ΠŸΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ src ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ содСрТит нСсколько элСмСнтов управлСния вСрсиями.
Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для Git ΠΈΠ»ΠΈ Mercurial), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°ΡŽΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΎΠ΄Π½ΠΎΠ³ΠΎ
ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ исходных ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ².

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π°Ρ‚ΡŒ Π²Π°ΠΌ прСдставлСниС ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ выглядит Ρ€Π°Π±ΠΎΡ‡Π΅Π΅ пространство Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅:

bin /
    ΠΏΡ€ΠΈΠ²Π΅Ρ‚ # исполняСмый Ρ„Π°ΠΉΠ» ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹
    outyet # исполняСмый Ρ„Π°ΠΉΠ» ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹
src /
    github.com / golang / example /
        .git / # ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ рСпозитория Git
ЗдравствуйтС/
hello.go # источник ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹
Outyet /
main.go # источник ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹
main_test.go # тСстовый источник
stringutil /
reverse.go # источник ΠΏΠ°ΠΊΠ΅Ρ‚Π°
reverse_test.go # тСстовый источник
    golang.org/x/image/
        .git / # ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ рСпозитория Git
BMP /
reader.go # источник ΠΏΠ°ΠΊΠ΅Ρ‚Π°
writer.go # источник ΠΏΠ°ΠΊΠ΅Ρ‚Π°
    ... (ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΎΠΏΡƒΡ‰Π΅Π½Ρ‹) ...
 

Π’ Π΄Π΅Ρ€Π΅Π²Π΅ Π²Ρ‹ΡˆΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Ρ€Π°Π±ΠΎΡ‡Π΅Π΅ пространство, содСрТащСС Π΄Π²Π° рСпозитория.
(, ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ).
Π Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ example содСрТит Π΄Π²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ( hello
ΠΈ outyet ) ΠΈ ΠΎΠ΄Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ( stringutil ).
Π Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ содСрТит ΠΏΠ°ΠΊΠ΅Ρ‚ bmp
ΠΈ нСсколько Π΄Ρ€ΡƒΠ³ΠΈΡ….

Π’ΠΈΠΏΠΈΡ‡Π½ΠΎΠ΅ Ρ€Π°Π±ΠΎΡ‡Π΅Π΅ пространство содСрТит мноТСство исходных Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π², содСрТащих мноТСство
ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹.Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ программистов Π½Π° Go ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ ΠΈ всС исходного ΠΊΠΎΠ΄Π° Go.
ΠΈ зависимости Π² Π΅Π΄ΠΈΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ области.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ символичСскиС ссылки , Π° Π½Π΅ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для связывания Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ»ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² Π² вашСм Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ пространствС.

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ построСны ΠΈΠ· Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² исходных ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ².
ΠœΡ‹ обсудим это Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ ΠΏΠΎΠ·ΠΆΠ΅.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ срСды GOPATH

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ срСды GOPATH ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ мСстополоТСниС вашСго
Π Π°Π±ΠΎΡ‡Π΅Π΅ пространство.По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ это ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ с ΠΈΠΌΠ΅Π½Π΅ΠΌ go Π²Π½ΡƒΡ‚Ρ€ΠΈ вашСго домашнСго ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°,
Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ $ HOME / go Π½Π° Unix,
$ Π΄ΠΎΠΌΠΎΠΉ / Π²ΠΏΠ΅Ρ€Π΅Π΄ Π½Π° План 9,
ΠΈ % USERPROFILE% \ go (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ C: \ Users \ YourName \ go ) Π² Windows.

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ мСстС, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚
Π½Π°Π±ΠΎΡ€ GOPATH
ΠΊ ΠΏΡƒΡ‚ΠΈ ΠΊ этому ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Ρƒ.
(Π”Ρ€ΡƒΠ³ΠΎΠΉ распространСнный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ — ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ GOPATH = $ HOME .)
ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ GOPATH Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ , Π° Π½Π΅ .
Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΏΡƒΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈ ваша установка Go.

Команда go env GOPATH
ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ‚ΠΎΠΊ GOPATH ;
ΠΎΠ½ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ мСстополоТСниС ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ссли пСрСмСнная срСды Π½Π΅ установлСна.

Для удобства Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ bin Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ области
на ваш PATH :

$  экспорт PATH = $ PATH: $ (go env GOPATH) / bin 
 

Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΈ Π² ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΉ части этого Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ $ GOPATH
вмСсто $ (go env GOPATH) для краткости .Π§Ρ‚ΠΎΠ±Ρ‹ скрипты Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»ΠΈΡΡŒ ΠΊΠ°ΠΊ написано
Ссли Π²Ρ‹ Π½Π΅ установили GOPATH,
Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ эти ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π½Π° $ HOME / go
ΠΈΠ»ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ:

$  экспорт GOPATH = $ (go env GOPATH) 
 

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ срСды GOPATH , см.
«Помоги Π³ΠΎΠΏΠ°Ρ‚ΡƒΒ» .

ΠŸΡƒΡ‚ΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°

ΠŸΡƒΡ‚ΡŒ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° — это строка, которая ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠ°ΠΊΠ΅Ρ‚.
ΠŸΡƒΡ‚ΡŒ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π° соотвСтствуСт Π΅Π³ΠΎ Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ области
ΠΈΠ»ΠΈ Π² ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ (объяснСно Π½ΠΈΠΆΠ΅).

ΠŸΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΈΠ· стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠ΅ ΠΏΡƒΡ‚ΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ
"fmt" ΠΈ "net / http" .
Для Π²Π°ΡˆΠΈΡ… собствСнных ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ вряд Π»ΠΈ
ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒΡΡ с Π±ΡƒΠ΄ΡƒΡ‰ΠΈΠΌΠΈ дополнСниями ΠΊ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ внСшним
Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.

Если Π²Ρ‹ Ρ…Ρ€Π°Π½ΠΈΡ‚Π΅ свой ΠΊΠΎΠ΄ Π³Π΄Π΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ с исходными ΠΊΠΎΠ΄Π°ΠΌΠΈ, Π²Π°ΠΌ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ
ΠΊΠΎΡ€Π΅Π½ΡŒ этого исходного рСпозитория Π² качСствС Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡƒΡ‚ΠΈ.
НапримСр, Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ учСтная запись GitHub ΠΏΠΎ адрСсу
Π³ΠΈΡ‚Ρ…Π°Π±.com / user , это Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ваш Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ свой ΠΊΠΎΠ΄ Π² ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ
ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ это. Π­Ρ‚ΠΎ просто Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡ΠΊΠ° ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ свой ΠΊΠΎΠ΄ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ Π²Ρ‹
ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΡƒΡŽ это ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ. На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ любоС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ΅ имя ΠΏΡƒΡ‚ΠΈ,
ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΡƒΠ½ΠΈΠΊΠ°Π»Π΅Π½ для стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ большСй экосистСмы Go.

ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ github.com/user Π² качСствС основного ΠΏΡƒΡ‚ΠΈ. Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³
Π²Π½ΡƒΡ‚Ρ€ΠΈ вашСго Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ пространства, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ исходный ΠΊΠΎΠ΄:

$  mkdir -p $ GOPATH / src / github.com / ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ 
 

Π’Π°ΡˆΠ° пСрвая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, сначала Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΏΠ°ΠΊΠ΅Ρ‚Ρƒ (ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ
github.com/user/hello ) ΠΈ создайтС ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΏΠ°ΠΊΠ΅Ρ‚Π°
Π²Π½ΡƒΡ‚Ρ€ΠΈ вашСго Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ пространства:

$  mkdir $ GOPATH / src / github.com / user / hello 
 

Π—Π°Ρ‚Π΅ΠΌ создайтС Π²Π½ΡƒΡ‚Ρ€ΠΈ этого ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ hello.go ,
содСрТащий ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ Go.

основной ΠΏΠ°ΠΊΠ΅Ρ‚

ΠΈΠΌΠΏΠΎΡ€Ρ‚ "fmt"

func main () {
fmt.Println ("ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€.")
}
 

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ инструмСнта go :

 Π΄ΠΎΠ»Π»Π°Ρ€ΠΎΠ² ΠΈΠ΄ΠΈ ΠΈ установи github.com/user/hello 
 

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ эту ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΈΠ· любой Ρ‚ΠΎΡ‡ΠΊΠΈ вашСй систСмы. Π’
go Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ исходный ΠΊΠΎΠ΄, ΠΈΡ‰Π°
github.com/user/hello ΠΏΠ°ΠΊΠ΅Ρ‚ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ области, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ
Π“ΠžΠŸΠΠ’ .

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΏΠ°ΠΊΠ΅Ρ‚Ρƒ, Ссли Π²Ρ‹ запуститС go install ΠΈΠ·
ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΏΠ°ΠΊΠ΅Ρ‚Π°:

$  cd $ GOPATH / src / github.com / user / hello 
$  ΠΈΠ΄ΠΈ ΠΈ установи 
 

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° создаСт ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ hello , создавая исполняСмый Ρ„Π°ΠΉΠ»
Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ. Π—Π°Ρ‚Π΅ΠΌ ΠΎΠ½ устанавливаСт этот Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π² bin Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ пространства.
ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΊΠ°ΠΊ hello (ΠΈΠ»ΠΈ Π² Windows hello.exe ).
Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ это Π±ΡƒΠ΄Π΅Ρ‚ $ GOPATH / bin / hello , Ρ‡Ρ‚ΠΎ
$ HOME / go / bin / hello .

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ go Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ошибки, поэтому, Ссли
эти ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π½Π΅ производят Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ Π²Ρ‹Π²ΠΎΠ΄Π°, Ссли ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ввСдя ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ ΠΊ Π½Π΅ΠΉ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС:

$  $ GOPATH / Π±ΡƒΠ½ΠΊΠ΅Ρ€ / ΠΏΡ€ΠΈΠ²Π΅Ρ‚ 
ΠŸΡ€ΠΈΠ²Π΅Ρ‚ ΠΌΠΈΡ€.
 

Или, Ссли Π²Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ $ GOPATH / bin Π² свой PATH ,
просто Π²Π²Π΅Π΄ΠΈΡ‚Π΅ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ΅ имя:

$  ΠΏΡ€ΠΈΠ²Π΅Ρ‚ 
ΠŸΡ€ΠΈΠ²Π΅Ρ‚ ΠΌΠΈΡ€.
 

Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ систСму управлСния вСрсиями, сСйчас самоС подходящСС врСмя для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ
Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ зафиксируйтС ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅. ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, этот шаг
Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ: Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ систСму управлСния вСрсиями для написания ΠΊΠΎΠ΄Π° Go.

$  cd $ GOPATH / src / github.com / user / hello 
$  git init 
Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ пустой Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Git Π² /home/user/go/src/github.com/user/hello/.git/
$  git add hello.go 
$  git commit -m "Π½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ фиксация" 
[master (root-commit) 0b4507d] Π½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ фиксация
 1 Ρ„Π°ΠΉΠ» ΠΈΠ·ΠΌΠ΅Π½Π΅Π½, 7 ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΎΠΊ (+)
 ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ€Π΅ΠΆΠΈΠΌ 100644 hello.go
 

ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° ΠΊΠΎΠ΄Π° Π² ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ оставлСна ​​в качСствС упраТнСния для читатСля.

Π’Π°ΡˆΠ° пСрвая Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°

НапишСм Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ΠΈ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ Сю ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ hello .

ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ шаг — Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΏΠ°ΠΊΠ΅Ρ‚Ρƒ (ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ
github.com/user/stringutil ) ΠΈ создайтС ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΏΠ°ΠΊΠ΅Ρ‚Π°:

$  mkdir $ GOPATH / src / github.com / user / stringutil 
 

Π—Π°Ρ‚Π΅ΠΌ создайтС Π² этом ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ reverse.go с
ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ содСрТаниС.

// ΠŸΠ°ΠΊΠ΅Ρ‚ stringutil содСрТит слуТСбныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со строками.
ΠΏΠ°ΠΊΠ΅Ρ‚ stringutil

// РСвСрс Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ строку Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², ΠΏΠ΅Ρ€Π΅Π²Π΅Ρ€Π½ΡƒΡ‚ΡƒΡŽ ΠΏΠΎ Ρ€ΡƒΠ½Π°ΠΌ слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ.func Reverse (s string) string {
r: = [] Ρ€ΡƒΠ½Π° (ΠΈ)
для i, j: = 0, len (r) -1; я 

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚ компилируСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ go build :

 Π΄ΠΎΠ»Π»Π°Ρ€ΠΎΠ² Π½Π° сборку github.com/user/stringutil 
 

Или, Ссли Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ Π² исходном ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π°, просто:

$  ΠΏΠΎΠΉΡ‚ΠΈ сборка 
 

Π­Ρ‚ΠΎ Π½Π΅ создаст Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ„Π°ΠΉΠ».
ВмСсто этого ΠΎΠ½ сохраняСт скомпилированный ΠΏΠ°ΠΊΠ΅Ρ‚ Π² локальном кэшС сборки.

ПослС подтвСрТдСния сборки ΠΏΠ°ΠΊΠ΅Ρ‚Π° stringutil ,
ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ исходный hello.go (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ находится Π²
$ GOPATH / src / github.com / user / hello ), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ:

основной ΠΏΠ°ΠΊΠ΅Ρ‚

ΠΈΠΌΠΏΠΎΡ€Ρ‚ (
"fmt"

 "github.com/user/stringutil" 
)

func main () {
fmt.Println (stringutil.Reverse ("! oG, olleH"))
}
 

УстановитС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ hello :

 Π΄ΠΎΠ»Π»Π°Ρ€ΠΎΠ² ΠΈΠ΄ΠΈ ΠΈ установи github.com/user/hello 
 

Запустив Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ ΠΏΠ΅Ρ€Π΅Π²Π΅Ρ€Π½ΡƒΡ‚ΠΎΠ΅ сообщСниС:

$  ΠΏΡ€ΠΈΠ²Π΅Ρ‚ 
ΠŸΡ€ΠΈΠ²Π΅Ρ‚, Π²ΠΏΠ΅Ρ€Π΅Π΄!
 

ПослС описанных Π²Ρ‹ΡˆΠ΅ шагов вашС Ρ€Π°Π±ΠΎΡ‡Π΅Π΅ пространство Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

bin /
    ΠΏΡ€ΠΈΠ²Π΅Ρ‚ # исполняСмый Ρ„Π°ΠΉΠ» ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹
src /
    github.com / user /
        ЗдравствуйтС/
            hello.go # источник ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹
        stringutil /
            reverse.go # источник ΠΏΠ°ΠΊΠ΅Ρ‚Π°
 

Названия ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π² исходном Ρ„Π°ΠΉΠ»Π΅ Go Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ

ΠΏΠ°ΠΊΠ΅Ρ‚  Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ 
 

Π³Π΄Π΅ имя - имя ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°.
(ВсС Ρ„Π°ΠΉΠ»Ρ‹ Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ имя .)

БоглашСниС Go Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ имя ΠΏΠ°ΠΊΠ΅Ρ‚Π° являСтся послСдним элСмСнтом
ΠΏΡƒΡ‚ΡŒ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°: ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ ΠΊΠ°ΠΊ " crypto / rot13 "
слСдуСт Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ rot13 .

Π˜ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ всСгда Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ package main .

НС трСбуСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π±Ρ‹Π»ΠΈ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ.
Π²ΠΎ всСх ΠΏΠ°ΠΊΠ΅Ρ‚Π°Ρ…, связанных Π² ΠΎΠ΄ΠΈΠ½ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»,
Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡƒΡ‚ΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° (ΠΈΡ… ΠΏΠΎΠ»Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²) Π±Ρ‹Π»ΠΈ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ.

Π‘ΠΌ. Effective Go, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС ΠΎ
БоглашСния ΠΎΠ± ΠΈΠΌΠ΅Π½Π°Ρ… Π² Go.

ВСстированиС

Go ΠΈΠΌΠ΅Π΅Ρ‚ Π»Π΅Π³ΠΊΡƒΡŽ срСду тСстирования, ΡΠΎΡΡ‚ΠΎΡΡ‰ΡƒΡŽ ΠΈΠ· go test
ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ testing .

Π’Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ тСст, создавая Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ, Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌΡΡ Π½Π° _test.go
ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с ΠΈΠΌΠ΅Π½Π΅ΠΌ TestXXX с подписью
func (t * тСстированиС.T) .
Π‘Ρ€Π΅Π΄Π° тСстирования запускаСт ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Ρ‚Π°ΠΊΡƒΡŽ β€‹β€‹Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ;
Ссли функция Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ сбоя, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ t.Error ΠΈΠ»ΠΈ
Ρ‚. ΠΠ΅ΠΈΡΠΏΡ€Π°Π²Π½ΠΎΡΡ‚ΡŒ , испытаниС считаСтся Π½Π΅ΡΠΎΡΡ‚ΠΎΡΠ²ΡˆΠΈΠΌΡΡ.

Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ тСст Π² ΠΏΠ°ΠΊΠ΅Ρ‚ stringutil , создав Ρ„Π°ΠΉΠ»
$ GOPATH / src / github.com / user / stringutil / reverse_test.ΠΈΠ΄Ρ‚ΠΈ , содСрТащий
ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ Go.

ΠΏΠ°ΠΊΠ΅Ρ‚ stringutil

ΠΈΠΌΠΏΠΎΡ€Ρ‚Π½ΠΎΠ΅ "тСстированиС"

func TestReverse (t * testing.T) {
case: = [] struct {
Π², Ρ…ΠΎΡ‡Ρƒ строку
} {
{"ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€", "dlrow, olleH"},
{"ΠŸΡ€ΠΈΠ²Π΅Ρ‚,", "η•Œ δΈ–, olleH"},
{"", ""},
}
for _, c: = range case {
ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»: = ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ (c.in)
if got! = c.want {
t.Errorf ("ΠžΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ (% q) ==% q, Ρ…ΠΎΡ‡Ρƒ% q", c.in, got, c.want)
}
}
}
 

Π—Π°Ρ‚Π΅ΠΌ запуститС тСст с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ go test :

 $ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ тСст Π½Π° github.com / user / stringutil 
Ρ…ΠΎΡ€ΠΎΡˆΠΎ github.com/user/stringutil 0.165s
 

Как всСгда, Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ инструмСнт go ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚Π°
ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΏΠ°ΠΊΠ΅Ρ‚Ρƒ:

$  ΠΏΡ€ΠΎΠΉΡ‚ΠΈ тСст 
Ρ…ΠΎΡ€ΠΎΡˆΠΎ github.com/user/stringutil 0.165s
 

ЗапуститС go help test ΠΈ посмотритС
докумСнтация ΠΏΠ°ΠΊΠ΅Ρ‚Π° тСстирования для Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

Π£Π΄Π°Π»Π΅Π½Π½Ρ‹Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹

ΠŸΡƒΡ‚ΡŒ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ исходный ΠΊΠΎΠ΄ ΠΏΠ°ΠΊΠ΅Ρ‚Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ
систСма контроля вСрсий, такая ΠΊΠ°ΠΊ Git ΠΈΠ»ΠΈ Mercurial.Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ go ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚
это свойство для автоматичСской Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΈΠ· ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Ρ… Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π².
НапримСр, ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, описанныС Π² этом Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅, Ρ‚Π°ΠΊΠΆΠ΅ хранятся Π²
Π Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Git, Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π½Ρ‹ΠΉ Π½Π° GitHub
github.com/golang/example .
Если Π²Ρ‹ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ URL-адрСс рСпозитория Π² ΠΏΡƒΡ‚ΡŒ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π°,
go get Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚, собСрСт ΠΈ установит Π΅Π³ΠΎ автоматичСски:

 Π΄ΠΎΠ»Π»Π°Ρ€ΠΎΠ² ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ github.com/golang/example/hello 
$  $ GOPATH / Π±ΡƒΠ½ΠΊΠ΅Ρ€ / ΠΏΡ€ΠΈΠ²Π΅Ρ‚ 
ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΈΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹!
 

Если ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚ отсутствуСт Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ области, ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ
помСстит Π΅Π³ΠΎ Π² ΠΏΠ΅Ρ€Π²ΠΎΠ΅ Ρ€Π°Π±ΠΎΡ‡Π΅Π΅ пространство, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π² GOPATH .(Если ΠΏΠ°ΠΊΠ΅Ρ‚ ΡƒΠΆΠ΅ сущСствуСт, go get пропускаСт ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ
fetch ΠΈ Π²Π΅Π΄Π΅Ρ‚ сСбя Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ go install .)

ПослС выполнСния Π²Ρ‹ΡˆΠ΅ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ go get ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ области
Π΄Π΅Ρ€Π΅Π²ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

bin /
    ΠΏΡ€ΠΈΠ²Π΅Ρ‚ # исполняСмый Ρ„Π°ΠΉΠ» ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹
src /
    github.com/golang/example/
.git / # ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ рСпозитория Git
        ЗдравствуйтС/
            hello.go # источник ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹
        stringutil /
            ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ рСгрСсс.go # источник ΠΏΠ°ΠΊΠ΅Ρ‚Π°
            reverse_test.go # тСстовый источник
    github.com/user/
        ЗдравствуйтС/
            hello.go # источник ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹
        stringutil /
            reverse.go # источник ΠΏΠ°ΠΊΠ΅Ρ‚Π°
            reverse_test.go # тСстовый источник
 

Команда hello , размСщСнная Π½Π° GitHub, зависит ΠΎΡ‚
stringutil Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ. Π˜ΠΌΠΏΠΎΡ€Ρ‚ Π²
hello.go Ρ„Π°ΠΉΠ» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚ΠΎ ΠΆΠ΅ соглашСниС ΠΎ ΠΏΡƒΡ‚ΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°, поэтому
go get Команда ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΉΡ‚ΠΈ ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ зависимый
ΠΏΠ°ΠΊΠ΅Ρ‚ Ρ‚ΠΎΠΆΠ΅.

ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ "github.com/golang/example/stringutil"
 

Π­Ρ‚ΠΎ соглашСниС - самый простой способ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ваши ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Go доступными для
Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.
Π’ΠΈΠΊΠΈ БообщСства
ΠΈ godoc.org
ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ списки Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Go.

Для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… свСдСний ΠΎΠ± использовании ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Ρ… Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π² с инструмСнтом go см.
go help importpath .

Π§Ρ‚ΠΎ дальшС

ΠŸΠΎΠ΄ΠΏΠΈΡˆΠΈΡ‚Π΅ΡΡŒ Π½Π°
голанг-анонс
список рассылки, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ увСдомлСния ΠΎ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ Π½ΠΎΠ²ΠΎΠΉ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠΉ вСрсии Go.

Π‘ΠΌ. Π‘ΠΎΠ²Π΅Ρ‚Ρ‹ ΠΏΠΎ написанию Π² Effective Go.
ясный идиоматичСский ΠΊΠΎΠ΄ Go.

Π‘ΠΎΠ²Π΅Ρ€ΡˆΠΈΡ‚Π΅ ΡΠΊΡΠΊΡƒΡ€ΡΠΈΡŽ ΠΏΠΎ Go, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΡƒΡ‡ΠΈΡ‚ΡŒ язык
собствСнно.

ΠŸΠΎΡΠ΅Ρ‚ΠΈΡ‚Π΅ страницу Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ для получСния ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹Ρ…
ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΎ языкС Go, Π΅Π³ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ… ΠΈ инструмСнтах.

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΠΌΠΎΡ‰ΠΈ

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ сусликам

.

GOROOT ΠΈ GOPATH - Π‘ΠΏΡ€Π°Π²ΠΊΠ°

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹

Go ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠ°ΠΊΠ΅Ρ‚Π° исходного ΠΊΠΎΠ΄Π°. GOROOT ΠΈ GOPATH - ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ срСды, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ этот ΠΌΠ°ΠΊΠ΅Ρ‚.

GOROOT - это пСрСмСнная, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π°Ρ, Π³Π΄Π΅ находится ваш Go SDK. Π’Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ эту ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, Ссли Π²Ρ‹ Π½Π΅ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ вСрсии Go.

GOPATH - это пСрСмСнная, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π°Ρ ΠΊΠΎΡ€Π΅Π½ΡŒ вашСго Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ пространства. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ области - это ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ с ΠΈΠΌΠ΅Π½Π΅ΠΌ go Π² домашнСм ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ вашСго ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ (~ / go для Linux ΠΈ MacOS,% USERPROFILE% / go для Windows).GOPATH Ρ…Ρ€Π°Π½ΠΈΡ‚ Π²Π°ΡˆΡƒ Π±Π°Π·Ρƒ ΠΊΠΎΠ΄Π° ΠΈ всС Ρ„Π°ΠΉΠ»Ρ‹, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для вашСй Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Π² качСствС Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ пространства, настроив GOPATH для Ρ€Π°Π·Π½Ρ‹Ρ… областСй. GOPATH являСтся ΠΊΠΎΡ€Π½Π΅ΠΌ вашСй Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ области ΠΈ содСрТит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠ°ΠΏΠΊΠΈ:

  • src /: располоТСниС исходного ΠΊΠΎΠ΄Π° Go (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, .go, .c, .g, .s).

  • pkg /: располоТСниС ΠΊΠΎΠ΄Π° скомпилированного ΠΏΠ°ΠΊΠ΅Ρ‚Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, .a).

  • bin /: располоТСниС скомпилированных исполняСмых ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, созданных Go.

GOROOT

Настройка GOROOT

Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ копию Go SDK

Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΏΠ°ΠΏΠΊΠ΅ с Go SDK Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΏΠ°ΠΏΠΊΠΈ bin ΠΈ src.

  1. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ настройки ( Ctrl + Alt + S ) ΠΈ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ ΠΊ.

  2. НаТмитС ΠΊΠ½ΠΎΠΏΠΊΡƒ Β«Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ SDKΒ» ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Β«Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉΒ».

  3. Π’ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ ΠΊ вСрсии SDK, которая находится Π½Π° ТСстком дискС.

  4. НаТмитС Β«ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒΒ».

Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ Go SDK

  1. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ настройки ( Ctrl + Alt + S ) ΠΈ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ ΠΊ.

  2. НаТмитС ΠΊΠ½ΠΎΠΏΠΊΡƒ Β«Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ SDKΒ» () ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Β«Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒΒ».

  3. Π’ спискС «ВСрсия» Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π²Π΅Ρ€ΡΠΈΡŽ SDK.

  4. Π’ ΠΏΠΎΠ»Π΅ Β«ΠœΠ΅ΡΡ‚ΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Β» ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ ΠΏΡƒΡ‚ΡŒ ΠΊ SDK. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€, Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ Π·Π½Π°Ρ‡ΠΎΠΊ Β«ΠžΠ±Π·ΠΎΡ€Β».

  5. НаТмитС ОК.

GOPATH

Настройка GOPATH для Ρ€Π°Π·Π½Ρ‹Ρ… областСй дСйствия

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ GOPATH для ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… областСй: Global, Project ΠΈ Module. Если Π²Ρ‹ ΡƒΠΊΠ°Π·Π°Π»ΠΈ всС Ρ‚Ρ€ΠΈ области дСйствия, GoLand сначала Π²Ρ‹Π±Π΅Ρ€Π΅Ρ‚ ΡΠ°ΠΌΡƒΡŽ ΡƒΠ·ΠΊΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ.

  1. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ настройки ( Ctrl + Alt + S ) ΠΈ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ ΠΊ.

  2. Π’ зависимости ΠΎΡ‚ области дСйствия, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ, Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·Π΄Π΅Π» (Global GOPATH, Project GOPATH, Module GOPATH) ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ Β«Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒΒ».

  3. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠ²ΡΠ·Π°Ρ‚ΡŒ с GOPATH.

  4. НаТмитС ОК.

ПослСднСС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅: 19 августа 2020 Π³.

.

Golang Установка, настройка, GOPATH ΠΈ Go Workspace

Go - это статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ язык программирования с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ, созданный Google.

Он сочСтаСт Π² сСбС Π»ΡƒΡ‡ΡˆΠ΅Π΅ ΠΈΠ· языков со статичСской ΠΈ динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ΠΈ Π΄Π°Π΅Ρ‚ Π²Π°ΠΌ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ сочСтаниС эффСктивности ΠΈ простоты программирования. Он Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для создания быстрых, эффСктивных ΠΈ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹Ρ… сСрвСрных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹Ρ… особСнностСй Go -

.

  • Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ: ΠΊΠ°ΠΊ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠ°, Ρ‚Π°ΠΊ ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ памяти.
  • Π₯ΠΎΡ€ΠΎΡˆΠ°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ° ΠΈ ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΈ.
  • ЭффСктивная сборка мусора Π±Π΅Π· Π·Π°Π΄Π΅Ρ€ΠΆΠ΅ΠΊ
  • Высокая ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ компиляции
  • ΠŸΡ€Π΅Π²ΠΎΡΡ…ΠΎΠ΄Π½Π°Ρ ΠΎΠΏΠΎΡ€Π° для инструмСнтов

Π­Ρ‚ΠΎ пСрвая Ρ‡Π°ΡΡ‚ΡŒ нашСй сСрии руководств ΠΏΠΎ Go. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Go Π² Π²Π°ΡˆΡƒ систСму ΠΈ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ срСду Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ для ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Go.

Установка Go

Π”Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ дистрибутивы

Go доступны для всСх основных ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Linux, Windows ΠΈ MacOS.Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Go ΠΈΠ· Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… дистрибутивов ΠΎΡ‡Π΅Π½ΡŒ просто.

Если Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ дистрибутив для вашСй ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы нСдоступСн, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Go ΠΈΠ· исходников.

Mac OS X

ИспользованиС Homebrew

Π‘Π°ΠΌΡ‹ΠΉ простой способ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Go Π² Mac OS - ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Homebrew -

  brew install go
  
ИспользованиС установщика ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² macOS

Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ» послСднСго ΠΏΠ°ΠΊΠ΅Ρ‚Π° Go ( .pkg ) с ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ страницы Π·Π°Π³Ρ€ΡƒΠ·ΠΎΠΊ Go.ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΈ слСдуйтС инструкциям Π½Π° экранС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Go. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Go Π±ΡƒΠ΄Π΅Ρ‚ установлСн Π² / usr / local / go .

Linux

Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ дистрибутив Linux с ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ страницы Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Go ΠΈ распакуйтС Π΅Π³ΠΎ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ / usr / local .

  sudo tar -C / usr / local -xzf go $ VERSION. $ OS- $ ARCH.tar.gz
  

Π—Π°Ρ‚Π΅ΠΌ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ / usr / local / go / bin Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ срСды PATH. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это, Π΄ΠΎΠ±Π°Π²ΠΈΠ² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ строку Π² свой ~ /.bash_profile Ρ„Π°ΠΉΠ» -

  экспорт PATH = $ PATH: / usr / local / go / bin
  

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ / opt / go вмСсто / usr / local для установки Go.

Окна

Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ установочный Ρ„Π°ΠΉΠ» Windows MSI с ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ страницы Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Go. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ установки ΠΈ слСдуйтС инструкциям Π½Π° экранС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Go Π² вашСй систСмС Windows. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° установки устанавливаСт Go Π² C: \ Go

Дистрибутив Go поставляСтся Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Π΅ с инструмСнтом go.Π­Ρ‚ΠΎ инструмСнт ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΈ установка зависимостСй, созданиС ΠΈ тСстированиС ΠΊΠΎΠ΄Π° ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅.

ПослС установки Go , слСдуя инструкциям Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅, Π²Ρ‹ смоТСтС Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ инструмСнт Go , Π½Π°Π±Ρ€Π°Π² go ​​ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС -

  $ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ
Go - это инструмСнт для управлСния исходным ΠΊΠΎΠ΄ΠΎΠΌ Go.

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅:

ΠΊΠΎΠΌΠ°Π½Π΄Π° go [Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹]

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅:

сборка ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΈ зависимостСй
ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹
doc ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ для ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΈΠ»ΠΈ символа
env print Go информация ΠΎ срСдС
ошибка Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΎΡ‚Ρ‡Π΅Ρ‚ ΠΎΠ± ошибкС
ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ, Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ инструмСнт, ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹
fmt Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ gofmt для источников ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²
Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ Go, обрабатывая источник
ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ ΠΈ установку ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΈ зависимостСй
ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΈ зависимости
список списков ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²
Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Go
тСстовыС тСстовыС ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹
инструмСнт Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ инструмСнт go
вСрсия ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ Go вСрсия
Π²Π΅Ρ‚Π΅Ρ€ΠΈΠ½Π°Ρ€ Π±Π΅Π³ΠΈ ΠΈΠ΄ΠΈ инструмСнт Π²Π΅Ρ‚Π΅Ρ€ΠΈΠ½Π°Ρ€ Π½Π° ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠ°Ρ…

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Β«go help [ΠΊΠΎΠΌΠ°Π½Π΄Π°]Β» для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π΅.Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π°Π·Π΄Π΅Π»Ρ‹ справки:

c Π·Π²ΠΎΠ½ΠΊΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Go ΠΈ C
buildmode описаниС Ρ€Π΅ΠΆΠΈΠΌΠΎΠ² сборки
Ρ‚ΠΈΠΏ Ρ„Π°ΠΉΠ»Π° Ρ‚ΠΈΠΏΡ‹ Ρ„Π°ΠΉΠ»ΠΎΠ²
пСрСмСнная срСды gopath GOPATH
ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ срСды срСды
importpath синтаксис ΠΏΡƒΡ‚ΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°
ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ описаниС списков ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²
testflag описаниС Ρ„Π»Π°Π³ΠΎΠ² тСстирования
testfunc описаниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ тСстирования

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Β«go help [topic]Β» для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΏΠΎ этой Ρ‚Π΅ΠΌΠ΅.
  

GOPATH, Ρ€Π°Π±ΠΎΡ‡Π΅Π΅ пространство Go ΠΈ организация ΠΊΠΎΠ΄Π° Go

Go Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ свой ΠΊΠΎΠ΄ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ -

По соглашСнию вСсь ваш ΠΊΠΎΠ΄ Go ΠΈ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚Π΅, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ пространствС .Π Π°Π±ΠΎΡ‡Π΅Π΅ пространство - это Π½Π΅ Ρ‡Ρ‚ΠΎ ΠΈΠ½ΠΎΠ΅, ΠΊΠ°ΠΊ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Π² вашСй Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС, ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ хранится Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ срСды GOPATH .

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ послС ввСдСния ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Go Π² Go 1.11 Π²Π°ΠΌ большС Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ Go Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ области Go. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ свой ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Go Π² любом ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ GOPATH. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ объяснСниС Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ пространства Go Π΄Π°Π½ΠΎ ΠΏΠΎ историчСским ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ ΠΈ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΎ всС Π΅Ρ‰Π΅ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ этот Ρ€Π°Π·Π΄Π΅Π», Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅.

ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ области содСрТит Π² своСм ΠΊΠΎΡ€Π½Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ -

  • src : содСрТит исходныС Ρ„Π°ΠΉΠ»Ρ‹ Go .

    ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ src ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ содСрТит мноТСство Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π² управлСния вСрсиями, содСрТащих ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Go. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ исходный Ρ„Π°ΠΉΠ» Go ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΠΏΠ°ΠΊΠ΅Ρ‚Ρƒ. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π²Ρ‹ создаСтС Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Π²Π½ΡƒΡ‚Ρ€ΠΈ своСго рСпозитория для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π° Go.

  • bin : содСрТит Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹ .

    Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ Go создаСт ΠΈ устанавливаСт Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹ Π² этот ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³. ВсС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Go, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ исполняСмыми, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ исходный Ρ„Π°ΠΉΠ» со ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠΌ main ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΡƒ Π²Ρ…ΠΎΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ main () .

  • pkg : содСрТит Π°Ρ€Ρ…ΠΈΠ²Ρ‹ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Go ( .a ) .

    ВсС нСисполняСмыС ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ (раздСляСмыС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ) хранятся Π² этом ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅. Π’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ эти ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ½ΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… исполняСмых ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ².

  # Π’ΠΈΠΏΠΈΡ‡Π½ΠΎΠ΅ Ρ€Π°Π±ΠΎΡ‡Π΅Π΅ пространство Go
bin /
    myapp # Π˜ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡ‹ΠΉ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»
    hello # Π˜ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡ‹ΠΉ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»
ΠΏΠΊΠ³ /
   github.com / callicoder / ΠΏΡ€ΠΈΠΌΠ΅Ρ€ /
       numbers.a # Архив ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²
       strings.a # Архив ΠΏΠ°ΠΊΠ΅Ρ‚Π°
   github.com/gorilla/
       mux.a # Архив ΠΏΠ°ΠΊΠ΅Ρ‚Π°
   go.uber.org/
       zap.a # Архив ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²
src /
    github.com/callicoder/example/ # Π Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ²
       .git /
       myapp /
          app.go # ИсполняСмая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, содСрТащая основной ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ
       numbers / # Go Package (содСрТит слуТСбныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с числами)
          ΠΏΡ€Π΅ΠΌΡŒΠ΅Ρ€.ΠΈΠ΄Ρ‚ΠΈ
          prime_test.go
       strings / # Go Package (содСрТит слуТСбныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со строками)
          reverse.go
          trim.go
    github.com/gorilla/mux/ # Π‘Ρ‚ΠΎΡ€ΠΎΠ½Π½ΠΈΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚
       #... содСрТимоС ΠΏΠ°ΠΊΠ΅Ρ‚Π°
    go.uber.org/zap/ # Π‘Ρ‚ΠΎΡ€ΠΎΠ½Π½ΠΈΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚
       #... содСрТимоС ΠΏΠ°ΠΊΠ΅Ρ‚Π°
    hello / # Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚ (Π½ΠΈΠ³Π΄Π΅ Π½Π΅ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½)
       ΠΏΡ€ΠΈΠ²Π΅Ρ‚.Π³ΠΎ

# ... (Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΎΠΏΡƒΡ‰Π΅Π½Ρ‹) ...
  

Настройка GOPATH

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ срСды GOPATH ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ располоТСниС вашСй Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ области.По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ прСдполагаСтся, Ρ‡Ρ‚ΠΎ GOPATH составляСт $ HOME / go Π² систСмах Unix ΠΈ % USERPROFILE% \ go Π² Windows. Если вас устраиваСт этот ΠΏΡƒΡ‚ΡŒ, Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ просто ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ своСй Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ области с ΠΈΠΌΠ΅Π½Π΅ΠΌ go ​​ Π²Π½ΡƒΡ‚Ρ€ΠΈ домашнСй ΠΏΠ°ΠΏΠΊΠΈ ΠΈ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ Go.

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ настраиваСмоС мСстополоТСниС Π² качСствС Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ пространства, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ срСды GOPATH , слСдуя инструкциям Π½ΠΈΠΆΠ΅ -

БистСмы Unix (Linux ΠΈ macOS)

Для установки GOPATH Π² ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ°Ρ… bash Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ строку Π² Ρ„Π°ΠΉΠ» ~ /.bash_profile Ρ„Π°ΠΉΠ» -

  экспорт GOPATH = $ HOME / go
  

Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ Zsh , Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ Π²Ρ‹ΡˆΠ΅ строку Π² Ρ„Π°ΠΉΠ» ~ / .zshrc .

БистСма Windows

Допустим, Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ вашСй Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ области находился ΠΏΠΎ адрСсу C: \ go-workspace . Π’ΠΎΡ‚ ΠΊΠ°ΠΊ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ срСды GOPATH для использования этого мСстополоТСния Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ пространства -

  • Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΏΠ°ΠΏΠΊΡƒ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ области ΠΏΠΎ адрСсу C: \ go-workspace .

  • Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ ΠŸΡƒΡΠΊ β†’ Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ПанСль управлСния β†’ Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ БистСма ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ β†’ Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ БистСма .

  • Π’ мСню слСва Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ систСмныС настройки .

  • НаТмитС ΠΊΠ½ΠΎΠΏΠΊΡƒ ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ срСды Π²Π½ΠΈΠ·Ρƒ.

  • Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ Новый ΠΈΠ· Ρ€Π°Π·Π΄Π΅Π»Π° ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ .

  • Π’Π²Π΅Π΄ΠΈΡ‚Π΅ GOPATH Π² ΠΏΠΎΠ»Π΅ Имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ .

  • Π’Π²Π΅Π΄ΠΈΡ‚Π΅ C: \ go-workspace Π² ΠΏΠΎΠ»Π΅ Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ .

  • НаТмитС ОК.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΡƒΡ‚ΡŒ GOPATH Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ ΠΏΡƒΡ‚ΠΈ вашСй установки Go.

ВСстированиС вашСй установки Go с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Hello World

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ создали ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ области Go ΠΏΠΎ адрСсу $ HOME / go . Π—Π°Ρ‚Π΅ΠΌ создайтС Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ src / hello Π²Π½ΡƒΡ‚Ρ€ΠΈ вашСй Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ области.НаконСц, создайтС Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ hello.go со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ -

.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. Начиная с вСрсии Go 1.11, Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π²Π½Π΅ Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ пространства Go.

  ΠΏΠ°ΠΊΠ΅Ρ‚ основной

ΠΈΠΌΠΏΠΎΡ€Ρ‚ "fmt"

func main () {
fmt.Printf ("ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€ \ n")
}
  
  $ cd $ HOME / go / src / ΠΏΡ€ΠΈΠ²Π΅Ρ‚
$ ls
ΠΏΡ€ΠΈΠ²Π΅Ρ‚.Π³ΠΎ
  

Π‘Π°ΠΌΡ‹ΠΉ простой способ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ - ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ go ​​run -

  $ ΠΈΠ΄ΠΈ, Π±Π΅Π³ΠΈ, ΠΏΡ€ΠΈΠ²Π΅Ρ‚.ΠΈΠ΄Ρ‚ΠΈ
ΠŸΡ€ΠΈΠ²Π΅Ρ‚ ΠΌΠΈΡ€
  
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ исполняСмого Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° с использованиСм сборки go ​​

go ​​run Команда ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈ запускаСт Π²Π°ΡˆΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π·Π° ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·. Однако, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΈΠ· исходного ΠΊΠΎΠ΄Π° Go, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ исполняСмый Ρ„Π°ΠΉΠ» Π±Π΅Π· использования инструмСнта Go, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ go ​​build -

  $ cd $ HOME / go / src / ΠΏΡ€ΠΈΠ²Π΅Ρ‚
$ ΠΈΠ΄Ρ‚ΠΈ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ
$ ls
ΠΏΡ€ΠΈΠ²Π΅Ρ‚ ΠΏΡ€ΠΈΠ²Π΅Ρ‚. Π³ΠΎ
  

Команда go ​​build создаСт исполняСмый Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» с Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΈ имя вашСго нСпосрСдствСнного ΠΏΠ°ΠΊΠ΅Ρ‚Π° ( hello ).Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Ρ‚Π°ΠΊ -

  $. / ΠŸΡ€ΠΈΠ²Π΅Ρ‚
ΠŸΡ€ΠΈΠ²Π΅Ρ‚ ΠΌΠΈΡ€
  
Установка ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ bin с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ go ​​install

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ go ​​install для создания ΠΈ установки исполняСмого Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ bin вашСй Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ области -

  $ cd $ HOME / go / src / ΠΏΡ€ΠΈΠ²Π΅Ρ‚
$ go install
  
  $ cd $ HOME / go / bin
$ ls
ЗдравствуйтС
$ ./hello
ΠŸΡ€ΠΈΠ²Π΅Ρ‚ ΠΌΠΈΡ€
  

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ $ HOME / go / bin Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ PATH для запуска исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ² go ΠΈΠ· любого мСста.

НС Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ: go ​​help run , go ​​help build , go ​​help install .

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

На этом всС, рСбята! Π― надСюсь, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΏΠΎΠ³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒΡΡ Π² Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ΅ ΠΏΠΎΠ³Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС ΠΎ языкС программирования Go. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ всС руководства, написанныС Π½Π° Go, Π½Π° страницС ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ Golang.

Бпасибо Π·Π° Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Π΄ΠΎ встрСчи Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΡΡ‚Π°Ρ‚ΡŒΡ: ЗдравствуйтС, Π“ΠΎΠ»Π°Π½Π³: Π½Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ свою ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ для Π“ΠΎΠ»Π°Π½Π³Π°

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π°: github.com / callicoder / golang-tutorials

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ рСсурсы

.

Как Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ Go

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π­Ρ‚ΠΎΡ‚ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ дСмонстрируСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ простого ΠΏΠ°ΠΊΠ΅Ρ‚Π° Go Π²Π½ΡƒΡ‚Ρ€ΠΈ
ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΈ прСдставляСт инструмСнт go, стандартный способ
ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ, ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ ΠΈ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Go.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. Π’ этом Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅ прСдполагаСтся, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Go 1.13 ΠΈΠ»ΠΈ Π½ΠΎΠ²Π΅Π΅ ΠΈ
GO111MODULE пСрСмСнная срСды Π½Π΅ Π·Π°Π΄Π°Π½Π°. Если Π²Ρ‹ ΠΈΡ‰Π΅Ρ‚Π΅
Π±ΠΎΠ»Π΅Π΅ старая вСрсия этого Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π΄ΠΎ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ΠΎΠ½Π° Π·Π°Π°Ρ€Ρ…ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½Π°
Π’ΠΎΡ‚.

Код ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Go ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π² ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹. ΠŸΠ°ΠΊΠ΅Ρ‚ - это коллСкция
исходных Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ скомпилированы вмСстС. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ,
Ρ‚ΠΈΠΏΡ‹, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ константы, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π² ΠΎΠ΄Π½ΠΎΠΌ исходном Ρ„Π°ΠΉΠ»Π΅, Π²ΠΈΠ΄Π½Ρ‹ всСм
Π΄Ρ€ΡƒΠ³ΠΈΠ΅ исходныС Ρ„Π°ΠΉΠ»Ρ‹ Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π΅.

Π Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ содСрТит ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ. ΠœΠΎΠ΄ΡƒΠ»ΡŒ - это сборник
связанных ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Go, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ вмСстС. Π Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Go ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ
содСрТит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, располоТСнный Π² ΠΊΠΎΡ€Π½Π΅ рСпозитория.Π€Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ
go.mod Ρ‚Π°ΠΌ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ ΠΏΡƒΡ‚ΡŒ модуля : ΠΏΡƒΡ‚ΡŒ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°
прСфикс для всСх ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅. ΠœΠΎΠ΄ΡƒΠ»ΡŒ содСрТит ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Π²
ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, содСрТащий Π΅Π³ΠΎ Ρ„Π°ΠΉΠ» go.mod , Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ
этого ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Π΄ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°, содСрТащСго Π΄Ρ€ΡƒΠ³ΠΎΠΉ
go.mod Ρ„Π°ΠΉΠ» (Ссли Π΅ΡΡ‚ΡŒ).

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ свой ΠΊΠΎΠ΄ Π² ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ
ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ это. ΠœΠΎΠ΄ΡƒΠ»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ локально Π±Π΅Π· принадлСТности ΠΊ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΡŽ.Однако Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡ΠΊΠΎΠΉ являСтся систСматизация ΠΊΠΎΠ΄Π° Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ Π²Ρ‹ Π΅Π³ΠΎ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ΅Ρ‚Π΅.
ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ.

ΠŸΡƒΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ модуля Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ слуТит прСфиксом ΠΏΡƒΡ‚ΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° для Π΅Π³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²,
Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΡƒΠ΄Π° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Π° go , Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π΅Π΅.
НапримСр, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ golang.org/x/tools ,
ΠΊΠΎΠΌΠ°Π½Π΄Π° go Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΡŽ, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ
https://golang.org/x/tools (ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ здСсь).

ΠŸΡƒΡ‚ΡŒ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° - это строка, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ для ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π°.ΠŸΠ°ΠΊΠ΅Ρ‚
ΠΏΡƒΡ‚ΡŒ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° - это ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ, соСдинСнный с Π΅Π³ΠΎ ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠΌ Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅.
НапримСр, ΠΌΠΎΠ΄ΡƒΠ»ΡŒ github.com/google/go-cmp содСрТит ΠΏΠ°ΠΊΠ΅Ρ‚
Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ cmp / . ΠŸΡƒΡ‚ΡŒ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° этого ΠΏΠ°ΠΊΠ΅Ρ‚Π°
github.com/google/go-cmp/cmp . ΠŸΠ°ΠΊΠ΅Ρ‚Ρ‹ Π² стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ Π΄Π΅Π»Π°ΡŽΡ‚
Π½Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ прСфикса ΠΏΡƒΡ‚ΠΈ ΠΊ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ.

Π’Π°ΡˆΠ° пСрвая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, сначала Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ (ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ
example.com/user/hello ) ΠΈ создайтС go.mod , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ
заявляСт ΠΎΠ± этом:

$ mkdir hello # Или ΠΊΠ»ΠΎΠ½ΠΈΡ€ΡƒΠΉΡ‚Π΅ Π΅Π³ΠΎ, Ссли ΠΎΠ½ ΡƒΠΆΠ΅ сущСствуСт Π² систСмС контроля вСрсий.
$ cd ΠΏΡ€ΠΈΠ²Π΅Ρ‚
$  go mod init example.com/user/hello 
go: созданиС нового go.mod: module example.com/user/hello
$ cat go.mod
ΠΌΠΎΠ΄ΡƒΠ»ΡŒ example.com/user/hello

ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ 1.14
$
 

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π² исходном Ρ„Π°ΠΉΠ»Π΅ Go Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ
ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠ° Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ . Π˜ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ всСгда Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ
основной ΠΏΠ°ΠΊΠ΅Ρ‚ .

Π—Π°Ρ‚Π΅ΠΌ создайтС Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ hello.ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π²Π½ΡƒΡ‚Ρ€ΡŒ этого ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°, содСрТащСго
ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ Go:

основной ΠΏΠ°ΠΊΠ΅Ρ‚

ΠΈΠΌΠΏΠΎΡ€Ρ‚ "fmt"

func main () {
fmt.Println ("ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€.")
}
 

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ инструмСнта go :

 $ ΠΈΠ΄ΠΈ ΠΈ установи example.com/user/hello 
$
 

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° создаСт ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ hello , создавая исполняСмый Ρ„Π°ΠΉΠ»
Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ. Π—Π°Ρ‚Π΅ΠΌ ΠΎΠ½ устанавливаСт этот Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΊΠ°ΠΊ $ HOME / go / bin / hello (ΠΈΠ»ΠΈ,
ΠΏΠΎΠ΄ Windows % USERPROFILE% \ go \ bin \ hello.exe ).

ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ установки контролируСтся GOPATH
ΠΈ GOBIN срСда
ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅. Если установлСн GOBIN , Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π½Π° Π½Π΅Π³ΠΎ.
ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³. Если установлСн GOPATH , Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π²
ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ bin ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Π²
список GOPATH . Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π²
ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ bin ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ GOPATH
( $ HOME / go ΠΈΠ»ΠΈ % USERPROFILE% \ go ).

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ go env для пСрСносимой установки значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ
для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ срСды для Π±ΡƒΠ΄ΡƒΡ‰ΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄ go :

$ go env -w GOBIN = / Π³Π΄Π΅-Ρ‚ΠΎ / Π΅Ρ‰Π΅ / bin
$
 

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, Ρ€Π°Π½Π΅Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²Π»Π΅Π½Π½ΡƒΡŽ go env -w , ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ go env -u :

$ go env -u Π“ΠžΠ‘Π˜Π
$
 

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ Π²Ρ€ΠΎΠ΄Π΅ go install ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π² контСкстС модуля.
содСрТащий Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³.Если Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ находится Π²Π½Π΅
ΠΌΠΎΠ΄ΡƒΠ»ΡŒ example.com/user/hello , go install ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π°Ρ‚ΡŒ сбой.

Для удобства ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ go ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ ΠΏΡƒΡ‚ΠΈ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅
Π² Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ - ΠΏΠ°ΠΊΠ΅Ρ‚ Π²
Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, Ссли Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡƒΡ‚ΡŒ.
Π˜Ρ‚Π°ΠΊ, Π² нашСм Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ всС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ эквивалСнтны:

$ go install example.com/user/hello
 
$ go install.
 
$ go install
 

Π”Π°Π»Π΅Π΅ запустим ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.Для Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ удобства ΠΌΡ‹
Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ установки Π² наш PATH , Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹
Π»Π΅Π³ΠΊΠΎ:

# ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Windows Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΎΠΊΠΎΠ½ΡΡƒΠ»ΡŒΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠΎ https://github.com/golang/go/wiki/SettingGOPATH
# для установки% PATH%.
$  экспорт PATH = $ PATH: $ (dirname $ (go list -f '{{.Target}}'.)) 
$  ΠΏΡ€ΠΈΠ²Π΅Ρ‚ 
ΠŸΡ€ΠΈΠ²Π΅Ρ‚ ΠΌΠΈΡ€.
$
 

Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ систСму управлСния вСрсиями, сСйчас самоС подходящСС врСмя для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ
Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ зафиксируйтС ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅. ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, этот шаг
Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ: Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ систСму управлСния вСрсиями для написания ΠΊΠΎΠ΄Π° Go.

$  git init 
Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ пустой Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Git Π² /home/user/hello/.git/
$  git add go.mod hello.go 
$  git commit -m "Π½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ фиксация" 
[master (root-commit) 0b4507d] Π½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ фиксация
 1 Ρ„Π°ΠΉΠ» ΠΈΠ·ΠΌΠ΅Π½Π΅Π½, 7 ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΎΠΊ (+)
 ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ€Π΅ΠΆΠΈΠΌ 100644 go.mod hello.go
$
 

Команда go Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, содСрТащий Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ, Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ URL-адрСс HTTPS ΠΈ считывая ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅, встроСнныС Π² ΠΎΡ‚Π²Π΅Ρ‚ HTML (см.
go help importpath ).МногиС слуТбы хостинга ΡƒΠΆΠ΅ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ эти ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ для Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π², содСрТащих
Код Go, поэтому самый простой способ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ваш ΠΌΠΎΠ΄ΡƒΠ»ΡŒ доступным для использования Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ - это
ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ соотвСтствовал URL-адрСсу рСпозитория.

Π˜ΠΌΠΏΠΎΡ€Ρ‚ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΈΠ· вашСго модуля

НапишСм ΠΏΠ°ΠΊΠ΅Ρ‚ morestrings ΠΈ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ ΠΈΠΌ ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ hello .
Π‘Π½Π°Ρ‡Π°Π»Π° создайтС ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ для ΠΏΠ°ΠΊΠ΅Ρ‚Π° с ΠΈΠΌΠ΅Π½Π΅ΠΌ
$ HOME / hello / morestrings , Π° Π·Π°Ρ‚Π΅ΠΌ Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ
рСвСрс.ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² этот ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ содСрТимым:

// ΠŸΠ°ΠΊΠ΅Ρ‚ morestrings Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для управлСния UTF-8
// Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ строки свСрх Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ прСдусмотрСно Π² стандартном ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ "strings".
ΠΏΠ°ΠΊΠ΅Ρ‚ morestrings

// ReverseRunes Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ строку Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², ΠΏΠ΅Ρ€Π΅Π²Π΅Ρ€Π½ΡƒΡ‚ΡƒΡŽ ΠΏΠΎ Ρ€ΡƒΠ½Π°ΠΌ слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ.
func ReverseRunes (s строка) строка {
r: = [] Ρ€ΡƒΠ½Π° (ΠΈ)
для i, j: = 0, len (r) -1; я 

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ наша функция ReverseRunes начинаСтся с Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ рСгистра
письмо, это экспорт ,
ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠ°ΠΊΠ΅Ρ‚Π°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ наши morestrings
ΠΏΠ°ΠΊΠ΅Ρ‚.

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚ компилируСтся с go build :

$ cd $ HOME / hello / morestrings
$  ΠΏΠΎΠΉΡ‚ΠΈ сборка 
$
 

Π­Ρ‚ΠΎ Π½Π΅ создаст Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ„Π°ΠΉΠ». ВмСсто этого ΠΎΠ½ сохраняСт скомпилированный ΠΏΠ°ΠΊΠ΅Ρ‚ Π²
Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ кСш сборки.

УбСдившись, Ρ‡Ρ‚ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚ morestrings компилируСтся, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ ΠΈΠΌ.
ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ hello . Для этого ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ исходный
$ HOME / hello / hello.go для использования ΠΏΠ°ΠΊΠ΅Ρ‚Π° morestrings:

основной ΠΏΠ°ΠΊΠ΅Ρ‚

ΠΈΠΌΠΏΠΎΡ€Ρ‚ (
"fmt"

 "ΠΏΡ€ΠΈΠΌΠ΅Ρ€.com / user / hello / morestrings "
)

func main () {
fmt.Println (morestrings.ReverseRunes ("! oG, olleH"))
}
 

УстановитС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ hello :

 $ ΠΈΠ΄ΠΈ ΠΈ установи example.com/user/hello 
 

Запустив Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ ΠΏΠ΅Ρ€Π΅Π²Π΅Ρ€Π½ΡƒΡ‚ΠΎΠ΅ сообщСниС:

$  ΠΏΡ€ΠΈΠ²Π΅Ρ‚ 
ΠŸΡ€ΠΈΠ²Π΅Ρ‚, Π²ΠΏΠ΅Ρ€Π΅Π΄!
 

Π˜ΠΌΠΏΠΎΡ€Ρ‚ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΈΠ· ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ

ΠŸΡƒΡ‚ΡŒ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ исходный ΠΊΠΎΠ΄ ΠΏΠ°ΠΊΠ΅Ρ‚Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ
систСма контроля вСрсий, такая ΠΊΠ°ΠΊ Git ΠΈΠ»ΠΈ Mercurial.Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ go ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚
это свойство для автоматичСской Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΈΠ· ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Ρ… Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π².
НапримСр, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ github.com/google/go-cmp/cmp Π² вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅:

основной ΠΏΠ°ΠΊΠ΅Ρ‚

ΠΈΠΌΠΏΠΎΡ€Ρ‚ (
"fmt"

"example.com/user/hello/morestrings"
"github.com/google/go-cmp/cmp"
)

func main () {
fmt.Println (morestrings.ReverseRunes ("! oG, olleH"))
fmt.Println (cmp.Diff ("Hello World", "Hello Go"))
}
 

Когда Π²Ρ‹ запускаСтС Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΊΠ°ΠΊ go install , go build ΠΈΠ»ΠΈ
go run , ΠΊΠΎΠΌΠ°Π½Π΄Π° go автоматичСски Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚
ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΈ Π·Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ Π΅Π³ΠΎ Π²Π΅Ρ€ΡΠΈΡŽ Π½Π° свой go.Π€Π°ΠΉΠ» mod :

$ go install example.com/user/hello
go: поиск модуля для ΠΏΠ°ΠΊΠ΅Ρ‚Π° github.com/google/go-cmp/cmp
ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ: Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° github.com/google/go-cmp v0.4.0
go: нашСл github.com/google/go-cmp/cmp в github.com/google/go-cmp v0.4.0
$ ΠΏΡ€ΠΈΠ²Π΅Ρ‚
ΠŸΡ€ΠΈΠ²Π΅Ρ‚, Π²ΠΏΠ΅Ρ€Π΅Π΄!
  строка (
- 	"ΠŸΡ€ΠΈΠ²Π΅Ρ‚ ΠΌΠΈΡ€",
+ "Hello Go",
  )
$ cat go.mod
ΠΌΠΎΠ΄ΡƒΠ»ΡŒ example.com/user/hello

ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ 1.14

  трСбуСтся github.com/google/go-cmp v0.4.0 
$
 

Зависимости ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ автоматичСски Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ Π² pkg / mod .
ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ срСдой GOPATH
пСрСмСнная.Π—Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠ΅ содСрТимоС для Π΄Π°Π½Π½ΠΎΠΉ вСрсии модуля являСтся ΠΎΠ±Ρ‰ΠΈΠΌ
срСди всСх Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ этой вСрсии, поэтому
ΠΊΠΎΠΌΠ°Π½Π΄Π° go ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π΅Ρ‚ эти Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ ΠΊΠ°ΠΊ доступныС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния. Π§Ρ‚ΠΎΠ±Ρ‹
ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ всС Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Ρ„Π»Π°Π³ -modcache
Π΄ΠΎ ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ :

$ go clean -modcache
$
 

ВСстированиС

Go ΠΈΠΌΠ΅Π΅Ρ‚ Π»Π΅Π³ΠΊΡƒΡŽ срСду тСстирования, ΡΠΎΡΡ‚ΠΎΡΡ‰ΡƒΡŽ ΠΈΠ· go test .
ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ testing .

Π’Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ тСст, создавая Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ, Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌΡΡ Π½Π° _test.go
ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с ΠΈΠΌΠ΅Π½Π΅ΠΌ TestXXX с подписью
func (t * testing.T) .
Π‘Ρ€Π΅Π΄Π° тСстирования запускаСт ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Ρ‚Π°ΠΊΡƒΡŽ β€‹β€‹Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ;
Ссли функция Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ сбоя, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ t. Ошибка ΠΈΠ»ΠΈ
Ρ‚. ΠžΡ‚ΠΊΠ°Π· , испытаниС считаСтся Π½Π΅ΡƒΠ΄Π°Π²ΡˆΠΈΠΌΡΡ.

Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ тСст Π² ΠΏΠ°ΠΊΠ΅Ρ‚ morestrings , создав Ρ„Π°ΠΉΠ»
$ HOME / ΠΏΡ€ΠΈΠ²Π΅Ρ‚ / morestrings / reverse_test.ΠΈΠ΄Ρ‚ΠΈ , содСрТащий
ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ Go.

ΠΏΠ°ΠΊΠ΅Ρ‚ morestrings

ΠΈΠΌΠΏΠΎΡ€Ρ‚Π½ΠΎΠ΅ "тСстированиС"

func TestReverseRunes (t * testing.T) {
case: = [] struct {
Π², Ρ…ΠΎΡ‡Ρƒ строку
} {
{"ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€", "dlrow, olleH"},
{"ΠŸΡ€ΠΈΠ²Π΅Ρ‚,", "η•Œ δΈ–, olleH"},
{"", ""},
}
for _, c: = range case {
ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»: = ReverseRunes (c.in)
if got! = c.want {
t.Errorf ("ReverseRunes (% q) ==% q, Ρ…ΠΎΡ‡Ρƒ% q", c.in, got, c.want)
}
}
}
 

Π—Π°Ρ‚Π΅ΠΌ запуститС тСст с go test :

$  ΠΏΡ€ΠΎΠΉΡ‚ΠΈ тСст 
ПРОΠ₯ΠžΠ”Π˜Π’Π¬
Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€.com / user / morestrings 0.165s
$
 

ЗапуститС go help test ΠΈ посмотритС
докумСнтация ΠΏΠ°ΠΊΠ΅Ρ‚Π° тСстирования для Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

Π§Ρ‚ΠΎ дальшС

ΠŸΠΎΠ΄ΠΏΠΈΡˆΠΈΡ‚Π΅ΡΡŒ Π½Π°
голанг-анонс
список рассылки, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ увСдомлСния ΠΎ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ Π½ΠΎΠ²ΠΎΠΉ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠΉ вСрсии Go.

Π‘ΠΌ. Π‘ΠΎΠ²Π΅Ρ‚Ρ‹ ΠΏΠΎ написанию Π² Effective Go.
ясный идиоматичСский ΠΊΠΎΠ΄ Go.

Π’Π·ΡΡ‚ΡŒ
Экскурсия ΠΏΠΎ Π³ΠΎ
Π²Ρ‹ΡƒΡ‡ΠΈΡ‚ΡŒ язык
собствСнно.

ΠŸΠΎΡΠ΅Ρ‚ΠΈΡ‚Π΅ страницу Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ для получСния ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹Ρ…
ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΎ языкС Go, Π΅Π³ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ… ΠΈ инструмСнтах.

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΠΌΠΎΡ‰ΠΈ

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, спроситС ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… сусликов Π² сообщСствС.
сСрвСр Slack сусликов
(Π²ΠΎΠ·ΡŒΠΌΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ³Π»Π°ΡˆΠ΅Π½ΠΈΠ΅ здСсь).

ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ список рассылки для обсуТдСния языка Π³ΠΎ:
Π‘Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ с ΡƒΠΌΠ°.

Π‘ΠΎΠΎΠ±Ρ‰Π°ΠΉΡ‚Π΅ ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ
ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π² систСму отслСТивания ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

.

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *