Go言語わすれそうなところメモ
ビルド+実行
$ go run hello.go
ビルド
$ go build -o hello hello.go
ビルドしたファイル実行
$ ./hello
ビルド時に依存しているライブラリはGOPATH配下にあれば自動的にビルド対象として含むので、基本的に個々においておくべし
一つのディレクトリ内に含むパッケージは一つにするべし(ビルドコマンド実行時にパッケージを指定してビルドするう場合はこの限りではない、Goの流儀的にやめといたほうがよさそう)
バージョン確認
$ go version
ビルドシステム関連の環境変数
$ go env
主な出力内容は以下
- GOARCH // CPUアーキテクチャ
- GOBIN //コマンドがインストールされているディレクトリ。デフォルトは$GOPATH/bin
- GOOS //OS環境
- GOPATH //ソースや実行ファイルのディレクトリ
コードの整形
$ go fmt
$ go fmt -n //整形対象ファイルを表示(整形自体はしない)
テスト実行
$ go test
指定したテストのみ実行
go test -run Test_hoge
簡易スライス
a := [10]int{1,2,3,4,5,6,7,8,9,10} //これは配列 s1 = a[0:2] // これはスライス => s1 = [1,2] //上記のようにa[n:m-1]の部分が抽出される len(s1) //2 cap(s1) //8(rowから後方すべてのサイズになる)
Q.m-1でマイナス1するのはなぜ?
完全スライス
a := [10]int{1,2,3,4,5,6,7,8,9,10} //これは配列 s1 = a[0:2:2] //これはスライス len(s1) //2 cap(s1) //2 (第三引数?のMAXで指定したサイズになる
スライスforeach
s := []string{"Apple","Banana","Cherry"} for index, value := range s{ ftm.Println("[%d] => %s/n, index, value") } //Apple //Banana //Cherry
ちなみに、for内でappendして要素が増えている場合でもループ回数は最初(3回)に指定した回数のみ
上記を利用した複数要素を引数に取る関数の実装
func sum(s ...int) int{ n := 0 for _, value := range s{ n += value } return n }
引数部分のs ...int はintを複数指定できる(つまり可変長引数) 呼び出し方は以下
sum(1,2,3) //6
注意:スライスを渡す際は以下のようにする必要がある https://blog.eksy.tokyo/post/passing-variable-length-argument-to-function-in-golang/
s := []int{1,2,3} sum(s...) //sをintに変換して引数とする => 6 //sum(s)
なぜならスライスは関数の引数の型(ここではintの可変長)とは別の型(slice型)だから