関連記事
GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ
概要
以下、自分用のメモです。
Go 1.24にて、go get に新しく -tool オプションが追加されました。
名前の通り、実装で利用するライブラリじゃなくてツールとして利用する場合に使います。
以前までは tools.go とかを作って管理していたものが、go get で出来るようになったという感じですね。
サンプル
stringerとgoimportsをツールとして利用するサンプルとします。
プロジェクト作成
$ go version go version go1.24.0 linux/amd64 $ mkdir app; cd $_ $ go mod init app
ツールを go get -tool で取得
$ go get -tool golang.org/x/tools/cmd/stringer@latest $ go get -tool golang.org/x/tools/cmd/goimports@latest
go.modは以下のようになります。
module app
go 1.24.0
tool (
golang.org/x/tools/cmd/goimports
golang.org/x/tools/cmd/stringer
)
require (
golang.org/x/mod v0.23.0 // indirect
golang.org/x/sync v0.11.0 // indirect
golang.org/x/tools v0.30.0 // indirect
)
go get -tool でインストールしたライブラリは
$ go tool stringer
という感じで go tool [ライブラリ名] で呼び出せます。
アプリを実装
実装に意味はないです。//go:generate の部分の指定に注目。
package main import ( "fmt" "slices" ) //go:generate go tool stringer -type=Lang type Lang int const ( Golang Lang = iota Java CSharp C CPP ) func main() { if err := run(); err != nil { panic(err) } } func run() error { var ( items = []Lang{Java, Golang, CSharp} ) for item := range slices.Values(items) { fmt.Printf("%6[1]s(%[1]d)\n", item) } return nil }
ビルドと実行用のTaskfile.yml
goimports を呼び出す場合、go tool goimports で実行できます。
# https://taskfile.dev version: '3' tasks: default: cmds: - go vet - go tool goimports -w main.go - go generate - go build - ./app
実行
以下のようになります。
$ task task: [default] go vet task: [default] go tool goimports -w main.go task: [default] go generate task: [default] go build task: [default] ./app Java(1) Golang(0) CSharp(2)
参考情報
Goメモ-540 (Go 1.24 リリース)(参考情報リンク) - いろいろ備忘録日記
個人的Goのおすすめ書籍
個人的に読んでとても勉強になった書籍さんたちです。
過去の記事については、以下のページからご参照下さい。
サンプルコードは、以下の場所で公開しています。