本日もGo
昨日猛烈な勢いでタスクを終わらせたので今日は楽をすることできた。
ポインタ
Goにポインタがあったんだとびっくりしたけど、そういえばC言語で作られたプログラムのバイナリとGo言語で作られたバイナリが違うって聞いたことがある。(確か
それだけ低レベルに近い言語ってことか。
package main import "fmt" func main() { i, j := 42, 100 p := &i fmt.Println(*p) *p = 3 fmt.Println(i) p = &j *p = *p / 4 fmt.Println(j) }
感覚的にC言語と雰囲気が似てる。
おそらくコンパイラの作りも一緒なんだろうな。
構造体
構造体も基本的C言語と一緒かな。
package main import "fmt" type Vertex struct { X int Y int } func main() { fmt.Println(Vertex{5, 3}) }
本当にC言語経験者には優しい言語。
type Vertex struct { X int Y int } func main() { v := Vertex{3, 9} v.X = 8 v.Y = 1223 fmt.Println(v.X) fmt.Println(v.Y) }
フィールド参照も同じ。
package main import "fmt" type Vertex struct { X int Y int } func main() { v := Vertex{1, 2} p := &v p.X = 2e3 fmt.Println(v) }
ポインタへの代入はアロー演算子をつかわないんだな。
わかりやくなったのかも。
package main import "fmt" type Vertex struct { x, y int } var ( v1 = Vertex{3, 2} v2 = Vertex{x: 4} v3 = Vertex{} p = &Vertex{10, 6} ) func main() { fmt.Println(v1, p, v2, v3) }
構造体の初期化はvarでくくるのか。
Goの場合は{}でくくるという文法構造が重要そう。
Array
特にC言語と変わりがないので省略。
Slice
sliceの機能はpythonと同じ。
package main import "fmt" func main() { primes := [6]int{1, 2, 3, 4, 5, 6} var s []int = primes[1:4] fmt.Println(s) }
ちなみにこう書いたらエラーが出た。
pythonでは配列の最後の要素が呼び出されるのに。
func main() { primes := [6]int{1, 2, 3, 4, 5, 6} var s []int = primes[-1] fmt.Println(s) }
sliceも勉強したので今日はここまで。明日もsliceから勉強。
メンタリング業務行ってきます。
金曜日の夜にメンター業務はなかなかしんどい。