🛠️

MacでGo開発環境を準備する

2022/03/15に公開

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のバージョンアップが行われる可能性があります。

https://go.dev/doc/install

インストーラーでインストールした場合はパスの設定が必要です。
/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

現在時刻を表示するだけの簡単なコードを書きます。

main.go
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にプッシュできました。

https://github.com/y16ra/now

GOPATH配下に作業用リポジトリを取得する

以下の記事を参考にghqコマンドとpecoコマンドの設定をしておくと便利です。

https://zenn.dev/lilpacy/articles/68adb372f67e67

この設定をして上記のnowモジュールをGOPATH配下に取得する場合以下のようになります。

ghq get y16ra/now

picoの設定をしておくことで以下のようにインクリメンタルサーチでリポジトリを選択してcdできます。
image

まとめ

これで無事にGoの環境が整ったので実際の開発を進めていきましょう!

Happy Coding!

脚注
  1. 自分はGOPATHを $HOME/go に設定していますが任意のディレクトリで構いません。 ↩︎

GitHubで編集を提案

Discussion