たなしょのメモ

日々勉強していることをつらつらと

Go学習メモ3

本日も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から勉強。
メンタリング業務行ってきます。
金曜日の夜にメンター業務はなかなかしんどい。