2021.02.22

Go開発環境セットアップ on Mac

go の開発環境を作る。1,2 年触ってなかった。今はどうなってるのか。。

Install

とりあえずバージョン管理したくなるやろなのでgoenvを入れる。 homebrew で入れると古いバージョンになる問題あるとのことなので、git で入れる。 Installation | goenv

git clone https://github.com/syndbg/goenv.git ~/.goenv

zsh 環境なので.zshenvに以下を記述

export GOPATH=$HOME/go
export GOENV_ROOT=$HOME/.goenv
export PATH="$GOENV_ROOT/bin:$PATH"
eval "$(goenv init -)"
export PATH=$PATH:$GOPATH/bin
export PATH="$GOROOT/bin:$PATH"
export PATH="$PATH:$GOPATH/bin"

確認

type -p goenv # bash -> which goenv
goenv is /Users/gollowars/.goenv/bin/goenv

goenv install -l # インストール可能な version のリストを表示

goenv install 1.16.0 # とりあえず最新を install

goenv global 1.16.0 # てな感じなのでnodenvとかrubyenvとかpyenvを使ってる人からするとおなじみ

OK


Package 管理

go でも npm 的なのがあるが、以前はdepを使っていた。今は GoModules がスタンダード。2021 現在ネットの情報がとっちらかっているけどGoModulesを使え!とのこと。

go modules が登場したのでプロジェクトの場所は$GOPATH/src配下でなくてよくなったとのこと。 これは地味にかなり嬉しいぞ!

環境変数に以下を追加すると module モードで動くらしいが、1.13 以降はデフォなので設定不要

export GO11MODULE=on

なんやかんやここにまとめられているので読む 他言語から来た人が Go を使い始めてすぐハマったこととその答え

プロジェクト初期化

go mod init github.com/${GITHUB_USER}/${PROJECT_NAME}
# ex ) go mod init github.com/gollowars/test-go

初期化はgo mod init ここに名前 とのことだけど名前のところには慣習的に repository を記述するぽい。

.
├── Makefile
├── go.mod
├── hoge
│   └── hoge.go
└── main.go

最小構成だとこんな感じ

hoge/hoge.go
package hoge

import "fmt"

func PrintHoge(){
	fmt.Println("hogehogehoge machine")
}
main.go
package main

import "github.com/gollowars/test-go/hoge"

func main(){
	hoge.PrintHoge()
}
go run ./main.go
hogehogehoge machine

はい。これで開発スタートできる。