いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

Goメモ-118 (go list でビルド対象ファイルとテストファイルを出力)

概要

小ネタ。前回「外部テストパッケージ」について書きましたが

devlights.hatenablog.com

ついでに、go list でビルド対象のファイルとテスト対象ファイルを出力してみます。

-f オプション

go list コマンドには -f というオプションがありまして、これを指定すると中で持っている構造体のフィールドをテンプレート形式で指定することができます。

どんな形の構造体なのかは、go help list するか 以下のページでわかります。

golang.org

以下のフィールドを指定すると、出力できます。

  • GoFiles
    • これがビルド対象のファイル
  • TestGoFiles
    • これが同じパッケージ名のテストファイル
  • XTestGoFiles
    • これが外部テストパッケージのテストファイル

試してみる

以下のようなパッケージがあったとします。

$ tree ./cmd/golistcmd/
./cmd/golistcmd/
├── export_test.go
├── exttestpkg_test.go
├── lib.go
├── lib_test.go
└── main.go

exttestpkg_test.go が外部テストパッケージ。それ以外のxxx_test.goは同じパッケージのテストファイルです。

lib.gomain.go が実際の処理が記述されているファイル。

go list で見てみます。

$ go list -f '{{.GoFiles}}' ./cmd/golistcmd/
[lib.go main.go]

$ go list -f '{{.TestGoFiles}}' ./cmd/golistcmd/
[export_test.go lib_test.go]

$ go list -f '{{.XTestGoFiles}}' ./cmd/golistcmd/
[exttestpkg_test.go]

確かにちゃんと識別していますね。

指定できるフィールドは他にもいろいろありますが、.Dir とかはパス欲しいときに便利です。

$ go list -f '{{.Dir}}' ./cmd/golistcmd/
/workspace/gotmp/cmd/golistcmd

おすすめ書籍

自分が読んだGo関連の本で、いい本って感じたものです。

Go言語による並行処理

Go言語による並行処理

スターティングGo言語 (CodeZine BOOKS)

スターティングGo言語 (CodeZine BOOKS)

  • 作者:松尾 愛賀
  • 発売日: 2016/04/15
  • メディア: 単行本(ソフトカバー)

プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)

プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)


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

  • いろいろ備忘録日記まとめ

devlights.github.io

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

  • いろいろ備忘録日記サンプルソース置き場

github.com

github.com

github.com