MacでGo開発環境を準備する
Overview
Goのインストールから簡単なモジュールをGithubで公開するところまでの作業ログです。
Install Golang
Homebrewでインストールしました。
$ brew install go
$ go version
go version go1.17.6 darwin/amd64
homebrewでインストールすると以下のディレクトリにインストールされます。
/opt/homebrew/Cellar/go/{goのバージョン}/
そして上記のディレクトリ /opt/homebrew/bin/go
からシンボリックリンクが貼られていました。
実態は /opt/homebrew/opt/go/libexec
にあり /opt/homebrew/Cellar/go/{goのバージョン}/bin
からシンボリックリンクが貼られているようです。
なので GOROOT
は /opt/homebrew/opt/go/libexec
に設定されていました。
この辺は特に気にしなくても利用できますが参考までに。
補足
公式サイトで配布されているインストーラーを使ってインストールするのでも良いと思います。
バージョンアップを任意のタイミングで行いたい場合はこちらの方が良いかもしれません。
homebrewでインストールした場合 brew upgrade
で意図せずgoのバージョンアップが行われる可能性があります。
インストーラーでインストールした場合はパスの設定が必要です。
/usr/local/go
にインストールされるので以下を .zshrc
に追記します。
export PATH=$PATH:/usr/local/go/bin
Set GOPATH environment variable
.zshrc ファイルに以下を記載します。[1]
# Go
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin
GOPATHを確認する
$ go env GOPATH
$GOPATH
の配下には bin, pkg, src ディレクトリが置かれます。モジュール対応モードでは src は無くても良いです。
GOPATHモードとモジュール対応モード
Goのバージョン1.10まではGOPATH配下にプロジェクトを置いて開発する必要がありました。
その後、プロジェクトを任意のディレクトリで作成できるモジュール対応モードがデフォルトで有効になるように変更がありました。
それが GO111MODULE
という環境変数の設定でこれを on
にするといった記載のある記事も多くありますが今から最新のバージョンのGoで開発を始めるにあたっては気にしなくてよさそうです。
ということで現在では GOPATH
配下にプロジェクトを置いて開発する必要はありませんが今回はあえて $GOPATH/src
にプロジェクトを作ることにしましたので以下のコマンドでディレクトリを作成します。
$ mkdir -p $GOPATH/src/github.com/{user}/{repository}
そしてプロジェクトを初期化します。
$ cd $GOPATH/src/github.com/{user}/{repository}
$ go mod init
GOPATHにプロジェクトを置いて go mod init
すると任意のディレクトリで go mod init github.com/{user}/{repository}
と実行したのと同じ効果が得られます。
これで開発環境の準備ができました。
実際に簡単なプロジェクトを作って動かしてみます。
Example Project
$ GOPATH/src/github.com/y16ra/now
$ go mod init
go: creating new go.mod: module github.com/y16ra/now
現在時刻を表示するだけの簡単なコードを書きます。
package main
import (
"fmt"
"time"
)
func main() {
fmt.Println(time.Now())
}
実行すると以下のように表示されました。
$ now go run main.go
2022-03-15 09:38:16.026851 +0900 JST m=+0.000071584
ここで go install
を実行すると now
コマンドが利用できるようになります。
$ go install
コマンドを実行すると $GOPATH/bin
の下に now という実行可能ファイルが作成されています。
$GOPATH/bin
にパスを通してあるので now とコンソールで打つと現在時刻が表示されるのが確認できます。
Publish now module
この実際にGithubに公開してみます。
ただ現在日時を表示するだけのモジュールなので公開しても利用価値はないですが。
$ git config --global init.defaultBranch main
$ git init
$ git add .
$ git commit -m "first commit"
$ git remote add origin https://github.com/y16ra/now.git
$ git push -u origin main
これでGithubにプッシュできました。
GOPATH配下に作業用リポジトリを取得する
以下の記事を参考にghqコマンドとpecoコマンドの設定をしておくと便利です。
この設定をして上記のnowモジュールをGOPATH配下に取得する場合以下のようになります。
ghq get y16ra/now
picoの設定をしておくことで以下のようにインクリメンタルサーチでリポジトリを選択してcdできます。
まとめ
これで無事にGoの環境が整ったので実際の開発を進めていきましょう!
Happy Coding!
-
自分はGOPATHを
$HOME/go
に設定していますが任意のディレクトリで構いません。 ↩︎
Discussion