[Golang]sliceの挙動を確認した

ざっくりスライスの挙動を確認。

ポイントは、
– 配列とは別物(値だし)
– 参照型
– 可変長

package main

import (
    "fmt"
)
/*
参照型 は 3種類
1. slice
2. map
3. channel

ここではslice
*/
func main() {

    // int型のslice
    // var s []int // 宣言
    s := make([]int, 10)

    // 配列と似ているが、型として別物
    fmt.Println(s)
    fmt.Println(len(s))

    s2 := make([]int, 5, 10)
    fmt.Println(s2)
    fmt.Println(len(s2))
    fmt.Println(cap(s2))

    // makeを使用しないスライスの生成方法
    s3 := []int{1,2,3,4,5}
    fmt.Println(s3)
    fmt.Println(len(s3))
    fmt.Println(cap(s3))

    // 簡易スライス式
    a := [5]int{1,2,3,4,5}
    s4 := a[0:2]
    fmt.Println(s4)

    s4 = append(s4, 5)
    fmt.Println(s4)
    fmt.Println(a)

    // スライスと可変長引数
    fmt.Println(sum(1,2,3,4))
    fmt.Println(sum(1,2,3,4,6,7,8,98))
}


// 可変長引数サンプル
// 可変長引数は引数の末尾に一つだけ定義できる
func sum(s ...int) int {
    n := 0
    for _,v := range s {
        n += v
    }
    return n
}

ソースはこちら