変数の宣言
以下は全て同じ
var message string = "Hello, world" var message = "Hello, world" message := "Hello, world"
以下はエラー
message := "Hello" message := "Good Night"
以下もエラー
message := "Hello" message2 := "Good Night" // message2が使われていない println(message)
GOでは未使用変数はエラーとして扱われる。なんと。
演算子の省略
以下使用可能
a += 10 a -= 10 a *= 10 a /= 10 a %= 10 a++ a--
嬉。
制御構造の書き方
条件に()はいらないが (Python的
処理内容に{}はいる (Java的
if x <= 100 { println("xは100以下です") } else if x >= 200 { println("xは200以上です") } else { println("xは101~199です") } if !(z == 77) { }
Switch文 → Javaと一緒
パッケージ
未使用パッケージはエラーがでる。
別のパッケージに属する関数を呼び出す場合はパッケージ名.関数名()で呼び出す必要があリますが、同一パッケージの関数の場合は関数名()のみで呼べ出せます。実は同じパッケージに属するファイルであれば、分割しても同じファイルに記載しても動作的に全く影響はありません。(単に読みやすいかや管理しやすいかという問題だけ)
https://dev.classmethod.jp/articles/go-setup-and-sample/
GO PATH
デフォルトは $HOME/go
変更は export GOPATH=$HOME/.go
みたいな感じ。
作業ディレクトリ
GOPATHの下でやるべし?
バージョン1.11以前は、GOPATH
配下にさらにsrc
というフォルダがあり作成するGoのプログラムは全てこのフォルダに置くというルールで、実質$HOME/go/src
配下でしか開発できない状態だったようです。
バージョン1.11以降はGO111MODULE
という環境変数を on に設定することで(1.16以降はデフォルトでon)この制約から開放され、$HOME/go/src
以外でも開発可能になっています。
https://dev.classmethod.jp/articles/go-setup-and-sample/
だそうな。
実践してみたメモ - 今度まとめる
- goの配列にcontains的なのはない。イテレータで回して実装する。
- 文字列ならstrings.Containsがある。
- 文字列シリーズ、stringsにReplaceやSplitがある。使いやすい。
- 文字列のスライスは[2:8]みたいなのでOK。
- 文字列からintへの変換はstrings.Atoiを使う。
- fmt.Sprintf()が便利。詳しくはまた調べたいけど、多分intとかを直接stringにしてくれる。
- goでは変数の初期化→init()関数の実行→main()関数の実行の順で処理される。
https://qiita.com/YusukeIwaki/items/f1f92c23d7ee0ca8dc7a
- 式展開みたいなのはない。強いて言うならfmt.Sprintf()でそれっぽいことができる。ただしstring型のみだと黄線出される。
- こういう時、IDの行の末尾にもコンマが必要。
{ Name: "Shimamura", ID: "3", }
こうするなら不要
{Name: "Shimamura", ID: "3"}
配列とかでも同様?たぶん。