LoginSignup
1
1

More than 5 years have passed since last update.

go 勉強中メモ

Posted at

% 後の [i] でオペランドを指定して print できる

foo := "aaa"
bar := "bbb"
fmt.Printf("%s %[2]s %[1]s", foo, bar)  // aaa bbb aaa

配列でインデックスの指定ができる

foo := [...]string{0: "aaa", 1: "bbb", 2: "ccc"}
fmt.Println(foo)  // [aaa bbb ccc]


const (
        sun = iota
        mon
        tue
)

bar := [...]string{sun: "xxx", mon: "yyy", tue: "zzz"}
fmt.Println(bar)  // [xxx yyy zzz]

baz := [...]int{9: 3}
fmt.Println(baz)  // [0 0 0 0 0 0 0 0 0 3]

ポインタを渡して呼び出し元を変更

// 関数は元の値のコピーを受け取るため、元の値は変更されない
func nonzero(x [5]int) {
        for i := range x {
                x[i] = 0
        }
}

// ポインタ渡しで元の値を変更
func zero(x *[5]int) {
        for i := range x {
                x[i] = 0
        }
}

func zero2(x *[5]int) {
        *x = [5]int{}
}

func main() {
        foo := [5]int{1, 2, 3, 4, 5}
        fmt.Println(foo) // [1 2 3 4 5]

        nonzero(foo)
        fmt.Println(foo) // [1 2 3 4 5]

        zero(&foo)
        fmt.Println(foo) // [0 0 0 0 0]

        bar := [5]int{1, 2, 3, 4, 5}
        fmt.Println(bar) // [1 2 3 4 5]

        zero2(&bar)
        fmt.Println(bar) // [0 0 0 0 0]
}

スライスの拡張

number := [...]int{1: 1, 2: 2, 3: 3, 4: 4, 5: 5}
fmt.Println(number) // [0 1 2 3 4 5]

s := number[2:4]
fmt.Println(s)      // [2 3]
fmt.Println(len(s)) // 2
// cap は、スライスの開始位置から基底配列の終わりまでの要素数
fmt.Println(cap(s)) // 4

// スライスの拡張. cap 範囲内であれば、len を超えてスライス作成可能(参照型なので)
fmt.Println(s[:4]) // [2 3 4 5]

スライスが空であるかを検査する場合

// OK
len(s) == 0

// NG
s == nil

スライスのコピー

x := []int{0, 1}
y := []int{5, 6, 7, 8, 9}
z := []int{2, 3}

copy(x, y)
fmt.Println(x)  // [5 6]
fmt.Println(y)  // [5 6 7 8 9]
copy(y, z)
fmt.Println(y)  // [2 3 7 8 9]
fmt.Println(z)  // [2 3]


a := []int{5, 6, 7, 8, 9}

copy(a[2:], a[3:])
fmt.Println(a)  // [5 6 8 9 9]

マップの存在確認

m := map[string]int{"a": 1, "b": 2, "c": 3}

xv, xok := m["xxx"]
fmt.Println(xv)  // 0
fmt.Println(xok) // false

av, aok := m["a"]
fmt.Println(av)  // 1
fmt.Println(aok) // true
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1