はじめに
- バックエンドのキャッチアップを行いたかったので、人気のGoを学ぶ。
- 自学用のアウトプット記事。
Goのインストール
- PCはMac。homebrewをインストール済みであること。
> brew install go
- これだけ。パスの設定も必要なかった。バージョンが表示されればOK。
> go version
go version go1.20.7 darwin/arm64
Goの実行
-
go run 実行ファイル/goファイル
- buildで作成した実行ファイルを指定することで実行する。
- goファイルを指定した場合は、コンパイルせずに実行できる。手軽に試した場合に実施する。
- 内部的には、コンパイルファイルを一時領域に作って、終わったら削除している
-
go build ファイル名
- 実行形式のファイルが作られる
-
go mod
- モジュールを作成するコマンド。
- プロジェクト等、まとまった単位でソース管理する場合に行う。
-
実行例
-
hello-world
フォルダを作成する。(これをモジュールフォルダとする。) -
hello.go
ファイルを作成する。
hello.gopackage main import "fmt" func main() {fmt.Println("hello world")}
- モジュールを作成し、ビルド〜実行
> go mod init hello-world // モジュールの初期化。.modファイルが作成される。 > go mod tidiy // 必要なライブラリのダウンロードや不要ファイルを削除(npm install的な立ち位置か) > go build // hello-worldという実行ファイルができる。 > go run hello-world // モジュール実行ファイルの実施 hello world
-
ライブラリのインストール
-
go install "githubのURL"
でライブラリをインストールする。 -
packege.json
のようなものはなく、インストールするとバイナリファイルがホームディレクトリ配下のgo/bin
に格納される。 - 実行するためにも、
.zshrc
にパスを追加する。
pathの追加
cd ~
open .zshrc
// $PATH前に左記を追加。 /homeディレクトリ/go/bin:
source .zshrc
goimports
- フォーマット整形や、impport文の編成を行ってくれるライブラリ。
import
> go install golang.org/x/tools/cmd/goimports@latest
実行
// -l 対象ファイルを表示
// -w 対象ファイルを書き換え
// . カレントディレクトリとサブディレクトリが対象
> goimports -l -w .
フォーマットされたファイル
- func main() {fmt.Println("テスト");};
+ func main() { fmt.Println("テスト") }
golangci-lint
- 静的構文チェックや潜在的なバグ発見などを一括で行ってくれるライブラリ
- それぞれ個別にもライブラリはある。staticcheckやvetなど
- ルールが厳格なので、プロジェクトに導入した際、全て対応は難しい。
-
golangci.yml
で調整できる。 - なお、このライブラリは
go install
非推奨らしいので注意。
- なので、brewでインストール
> brew install golangci-lint
- モジュールファイル内で実行
> golangci-lint run
IDE
- VsCodeかGoLand(JetBreins)
- 無料なのでVsCodeにした。
- Goの拡張機能があるので追加。(go拡張子作ったらおすすめされるやつ。)
- goplsのインストールも促されるのでOKでインストール
Makefile
- フォーマットやlint、buildなどを一括で行うためのファイル。
-
packege.json
のスクリプトに相当 - 記述例
- 今までの内容を踏まえ、フォーマット→lint→ビルドまでを行う。
Makefile
// 最終的に実行するスクリプト
.DEFAULT_GOAL := build
// 変数: 改行字下げで、実行するコマンド
fmt:
goimports -l -w .
// .PHONY: 変数であることの印。フォルダ名と被った場合などで区別するため定義しておく。
.PHONY: fmt
// 変数: 前提となる変数→前提としてfmtを実施。
lint:fmt
golangci-lint run
// build実施の前提としてlint、その前提としてfmtが実施される。
build:lint
go mod tidy
go build
makefileの実行
> make
goimports -l -w .
golangci-lint run
go mod tidy
go build
作成された実行ファイを実施。
> go run hello-world
hello world
補足:gitignore
- git管理する際、buildで作られた実行ファイルは除外したいが、macでは「.exe」の拡張子がつかない。
- 従って、拡張子のないファイルを除外するようにする
.gitignore
*
!*/
!*.*
!Makefile // Makefileは残す
*.exe
.DS_Store
おわりに
- goをインストールするだけで手軽に実行できる。
- lintやフォーマットなどのライブラリの設定もわかりやすかった。
- makefileの書き方は少しくせがあるが、慣れれば大丈夫そう。
- 次回から文法の学習に入るが、環境周りのつまづきが少ないのは好印象。