2021年9月15日水曜日

go mod 超入門

go mod 超入門

概要

過去に go dep を使ったパッケージ管理方法を紹介しました
現在は go mod を使う方法が主流なので go mod を使ったパッケージ管理の方法を紹介します

環境

  • macOS 11.5.2
  • golang 1.17

サンプルコード

以下のコードを実行するために依存関係を go mod を使って解決します
Sirupsen/logrus という外部のパッケージを使っています

  • cd $GOPATH/src/github.com/hawksnowlog/test
  • vim main.go
package main

import (
	log "github.com/Sirupsen/logrus"
)

func main() {
	log.WithFields(log.Fields{
		"key": "value",
	}).Info("logrus test")
}

初期化

まずは初期化します
これで go.mod ファイルが作成されます

  • cd $GOPATH/src/github.com/hawksnowlog/test
  • go mod init

依存関係の解決

スクリプト内で使用しているパッケージを自動的に読み取ってインストールしてくれます
また go.mod が更新されて依存関係を自動で追記してくれる他 go.sum も生成されます

  • cd $GOPATH/src/github.com/hawksnowlog/test
  • go mod tidy
  • cat go.mod
module github.com/hawksnowlog/test

go 1.17

require github.com/sirupsen/logrus v1.8.1

require golang.org/x/sys v0.0.0-20191026070338-33540a1f6037 // indirect

ちなみに上記モジュールがインストールされるパスは

$GOPATH/pkg/mod/github.com/sirupsen/logrus@v1.8.1

でした

ビルド

あとはビルドするだけです
バイナリが生成されるか確認しましょう

  • cd $GOPATH/src/github.com/hawksnowlog/test
  • go build

実行

カレントにバイナリが生成されているので実行してみましょう
ちゃんと外部のモジュールが使われてエラーにならないことが確認できます

  • cd $GOPATH/src/github.com/hawksnowlog/test
  • ./test
INFO[0000] logrus test key=value

外部パッケージを追加したい場合は

普通に go get を使います

これで自動的に go.mod にも依存関係が追記されます

  • cat go.mod
module github.com/hawksnowlog/test

go 1.17

require github.com/sirupsen/logrus v1.8.1

require (
        github.com/gomodule/redigo v1.8.5 // indirect
        golang.org/x/sys v0.0.0-20191026070338-33540a1f6037 // indirect
)

あとは普通にスクリプト内で import すれば OK です
もしスクリプトのどこでも使われていない場合に再度 go mod tidy すると自動で依存関係を削除してくれます

最後に

go mod help で詳しい説明も確認できます
比較的新しい golang であれば標準で搭載されているのでこちらを使いましょう

参考サイト

0 件のコメント:

コメントを投稿