コピペコードで快適生活

明日使えるソースを自分のために

Go言語の環境構築+モジュール管理

  • 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