🔥

Goのfmt(フォーマット)とLint(リント)まとめ

2023/11/07に公開

記事の内容

GoのfmtとLintについてまとめます。

記事を読むと得られるもの

  • フォーマットとLintに関する解説
  • Goのフォーマットの仕方
  • GoのLintの仕方

対象読者

  • Goの初学者

記事の長さ

1分で読めます

フォーマットとLintについて

フォーマット(fmt)

フォーマットとは、プログラミングコードを特定のルール通りに整形してくれる機能です。
例えば、以下のように、

package main

import (
  "fmt"
)

func main() {
  test := 1
    test2 := 2
test3 := 3

  fmt.Printf("%d\n", test)
      fmt.Printf("%d\n", test2)
    fmt.Printf("%d\n", test3)
}

ガタガタのプログラミングコードを、

package main

import (
	"fmt"
)

func main() {
	test := 1
	test2 := 2
	test3 := 3

	fmt.Printf("%d\n", test)
	fmt.Printf("%d\n", test2)
	fmt.Printf("%d\n", test3)
}

このように、一定のルール通りにフォーマット(整形)する作業のことです。

Go fmt

上記のように、綺麗なプログラミングコードにするためのフォーマットですが、人間が手で行っていては時間がかかります。
Goでは、go fmt <ファイル名>というコマンドを実行することで、機械が自動でフォーマットしてくれます。

$ go fmt main.go
main.go

上記コマンドは、main.go というファイルをフォーマットするコマンドです。
このコマンドを実行すると、main.goのプログラミングコードが綺麗に整形されます。

Lint

Lintとは、特定のルール通りにプログラミングコードが書かれているかどうかをチェックすることです。

例えば、

  • 宣言された変数が使われずに放置されていないか?(無駄なソースがないか)
  • 共通化できるのに、何度も同じ記述をしているプログラミングコードはないか?

といった、「プログラミングコード自体は動くけど、もっと効率的にできる場所はないか?」といったアドバイスをしてくれるツールです。

golangci-lint

Go言語において、Lintを行うためのツールはたくさんあります。
今回は複数あるLintツールの中から、golangci-lintを紹介します。

https://golangci-lint.run/

golangci-lintのinstall

https://golangci-lint.run/usage/install

公式ドキュメント通りにローカルPCにgolangci-lintをインストールしてください。

Macの場合は、以下のコマンドでInstallが可能です。

$ brew install golangci-lint
$ brew upgrade golangci-lint

Lintを実行する

以下のGoのプログラミングコードに対して、Lintを実行します。

$ cat main.go
package main

import (
	"fmt"
    "time"
)

func main() {
	test := 1
	test2 := 2
	test3 := 3

	fmt.Printf("%d\n", test)
	fmt.Printf("%d\n", test2)
}

$ golangci-lint run main.go
main.go:11:2: test3 declared and not used (typecheck)
        test3 := 3
        ^
main.go:5:3: "time" imported and not used (typecheck)
  "time"
  ^

すると、上記のようなエラーが発生します。

  • test3という変数が宣言されているが、使用されていない(変数宣言ごと消した方がいい)
  • timeというmoduleがimportされてるけど、使用されていない(使わないならimportしなくていい)

という推奨(recommend)が表示されます。

まとめ

GoにおけるfmtとLintを紹介しました。
Goに限らず、formatとLintはプログラミングコードを綺麗に維持するために必要なテクニックですので、全てのプログラミングプロジェクトに導入することをオススメしたいです。

note

勉強法やキャリア構築法など、エンジニアに役立つ記事をnoteで配信しています。

https://note.com/ring_belle/membership

Discussion