導入
スライスは「ここからここまで」と範囲を指定して、一部だけを取り出せます。この操作が名前(slice = 薄切り)の由来です。
説明
package main
import "fmt"
func main() {
letters := []string{"a", "b", "c", "d", "e"}
fmt.Println(letters[1:3]) // [b c] (1番目から3番目の手前まで)
fmt.Println(letters[:2]) // [a b] (先頭から2番目の手前まで)
fmt.Println(letters[3:]) // [d e] (3番目から最後まで)
}
letters[1:3]… 添字 1 以上 3 未満 を取り出す。「終わりの添字は含まない」のがルールです。[:2]は先頭からを省略、[3:]は末尾までを省略した書き方です。
「開始は含み、終了は含まない」(半開区間)は Go に限らず多くの言語で共通の約束です。要素数は「終了 − 開始」でちょうど計算できる、と覚えると間違えません(3 - 1 = 2 個)。
やってみよう
letters[1:3] が2個(b, c)なのに対し、letters[1:4] は3個(b, c, d)です。「終わりの添字は含まない」ことを、色々な範囲で確かめてみましょう。
演習
b・c・d の3つを切り出して [b c d] と表示してください。
ヒント1を見る
スライス式は [開始:終わり] で、終わりの添字は含まれません。
ヒント2を見る
b は1番目、d は3番目なので letters[1:4] です(4番目の e は含まれません)。