Golangでのつまずき
Go言語を覚えるために試してひっかかったポイントをまとめた。
Goのバージョンはgo version go1.10.3 darwin/amd64
:=
を使った暗黙の変数定義を使えるのは関数の中だけ- aの定義をmain関数の中でするか,aの宣言にvarを使えばいい
:=
のスコープが関数の中にしかないのはGoの仕様
package main package main import "fmt" a:=5 func main() { if a > 2 { fmt.Println("a > 2") } else { fmt.Println("a <= 2") } } //コンパイル結果: ./main.go:5:1: syntax error: non-declaration statement outside function body
同じパッケージにある別のファイルで定義した関数の呼び出しでエラー
app2.go
package main // Compare compares byte arrays. func Compare(a, b []byte) int { for i := 0; i < len(a) && i < len(b); i++ { switch { case a[i] > b[i]: return 1 case a[i] > b[i]: return -1 } } switch { case len(a) < len(b): return -1 case len(a) > len(b): return 1 } return 0 } // Hoge is snipet for Compare function func Hoge() int { b1 := []byte{1, 2, 3} b2 := []byte{1, 2, 3} return Compare(b1, b2) }
- app1.go(トップレベルのファイル)
package main import ( "fmt" ) func main() { a := Hoge() fmt.Print(a) } // 実行結果: ./app1.go:8:7: undefined: Hoge
マップのエントリを削除するには、並列代入をひっくり返して、追加の論理値を右に書きます。論理値がfalseならエントリは削除されます。キーが既にマップから削除済みであっても安全に行う事ができます。 timeZone["PDT"] = 0, false; // Now on Standard Time
- 書いたコード
package main import ( "fmt" ) var timeZone = map[string]int{ "UTC": 0 * 60 * 60, "EST": -5 * 60 * 60, "CST": -6 * 60 * 60, "MST": -7 * 60 * 60, "PST": -8 * 60 * 60, } var tz string var seconds int var ok bool func main() { tz = "EST" timeZone[tz] = 10, false fmt.Println(timeZone[tz]) } // assignment mismatch: 1 variables but 2 values