かきあげせいろはラーメンがたべたい

技術プログラミングいろいろ記録メモ備忘にゃーん!

Go言語わすれそうなところメモ

ビルド+実行

$ go run hello.go

ビルド

$ go build -o hello hello.go

ビルドしたファイル実行

$ ./hello

ビルド時に依存しているライブラリはGOPATH配下にあれば自動的にビルド対象として含むので、基本的に個々においておくべし

一つのディレクトリ内に含むパッケージは一つにするべし(ビルドコマンド実行時にパッケージを指定してビルドするう場合はこの限りではない、Goの流儀的にやめといたほうがよさそう)

バージョン確認

$ go version

ビルドシステム関連の環境変数

$ go env

主な出力内容は以下

コードの整形

$ 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型)だから