- Goは2つのモードがある
- GOPATH モード
- バージョン1.10までの(過去の)モード。コード管理とビルドをGOPATHで指定されたディレクトリ以下で行う。
- パッケージはリポジトリの最新リビジョンのみ扱う。
- モジュール対応モード
- パッケージをモジュールとして管理する。コード管理とビルドは任意のディレクトリで可能。
- モジュールはリポジトリのバージョンごとに扱う。
- GOPATHは以前はプロジェクトソース置き場としての役割もあったが、モジュール対応モードでのGOPATHは依存コードとコンパイル済みキャッシュ、バイナリ置き場としての役割に徹する。
- パッケージ
- モジュール
- モジュール対応モードでは、パッケージをモジュールとして扱う。
- go.modファイルのあるディレクトリ以下の全てのパッケージがモジュールの配下となる。
- mainってなに
- プログラムは何らかの package に属している必要があり、そのうちの1つ必ず main でなければならない。
- main パッケージの中で main 関数があれば、必ず実行される。
- 参考
コード
# 最初の設定
$ brew update
$ brew install go
# パスの設定 (~/.zshrc等に記述)
$ export GOPATH=$HOME/go
$ export PATH=$PATH:$GOPATH/bin
# バージョン確認
$ go version
go version go1.16.3 darwin/amd64
# アップグレード
brew upgrade go
# プロジェクトフォルダ作る
cd ~/src/github.com/kinosuke01
mkdir my-cmd
cd my-cmd
# go.modの作成
% go mod init github.com/kinosuke01/my-cmd
go: creating new go.mod: module github.com/kinosuke01/my-cmd
# 処理を書く
$ cat <<EOF > hello.go
package main
import (
"fmt"
"rsc.io/quote"
)
func main() {
fmt.Println(quote.Hello())
}
EOF
# 使用されているパッケージを読み込む
# go.mod, go.sum が更新される
# GOPAHT以下にパッケージがインストールされる
go mod tidy
# 実行する
go run hello.go
# コンパイルして実行する
go build hello.go
./hello