以下の内容はhttps://devlights.hatenablog.com/entry/2025/02/26/073000より取得しました。


Goメモ-544 (go getに-toolオプションが追加)(Tool dependencies)

関連記事

GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ

概要

以下、自分用のメモです。

Go 1.24にて、go get に新しく -tool オプションが追加されました。

名前の通り、実装で利用するライブラリじゃなくてツールとして利用する場合に使います。

以前までは tools.go とかを作って管理していたものが、go get で出来るようになったという感じですね。

サンプル

stringergoimportsをツールとして利用するサンプルとします。

プロジェクト作成

$ 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)

参考情報

github.com

antonz.org

go.dev

Goメモ-540 (Go 1.24 リリース)(参考情報リンク) - いろいろ備忘録日記

個人的Goのおすすめ書籍

個人的に読んでとても勉強になった書籍さんたちです。


過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。




以上の内容はhttps://devlights.hatenablog.com/entry/2025/02/26/073000より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14