Quantcast
Channel: プログラミング
Viewing all articles
Browse latest Browse all 8171

golang の入門 Slice defaultsについて - masalibの日記

$
0
0

go tourでわからなかったことのメモです

go-tour-jp.appspot.com

package main

import"fmt"func main() {
    s := []int{2, 3, 5, 7, 11, 13}

    s = s[1:4]
    fmt.Println(s)

    s = s[:2]
    fmt.Println(s)

    s = s[1:]
    fmt.Println(s)
}

結果は

[3 5 7]
[3 5]
[5]

でした おお・・・なるほど切り取ってくれて便利だね。と思っていました

試しに改変してみたら想定外の結果になりました

package main

import "fmt"

func main() {
    s := []int{1,2, 3, 4,5,6,7,8,9,10}

    s = s[0:8]
    fmt.Println(s)

    s = s[:2]
    fmt.Println(s)

    s = s[:4]
    fmt.Println(s)
}

Result

[1 2 3 4 5 6 7 8]
[1 2]
[1 2 3 4]

最後はエラーになるかな・・・と思っていたら想定外の結果が返ってきたので調べてみた

  1. 最初の s = s[0:8]で、元の sのインデックス0から7までの要素 {1, 2, 3, 4, 5, 6, 7, 8}を持つ新しいスライスが生成され、sがこれに置き換わります。
  2. 次に s = s[:2]で、sはインデックス0から1までの要素 {1, 2}を持つスライスになります。
  3. 最後に s = s[:4]を実行すると、sは現在のスライス {1, 2}の先頭から4つの要素を含むスライスに再定義されます。ただし、元のスライスの要素数を超えてインデックス4までの要素を取ろうとしているため、Go言語では元のスライスの長さに応じて自動的に調整されます。

まじか・・・エラーになった方が楽なんだけど


Viewing all articles
Browse latest Browse all 8171

Trending Articles