golang 數組和切片

/**
數組和切片
*/
package main

import (
    "fmt"
    "reflect"
)

var p = fmt.Println
var pf = fmt.Printf

func main() {
    //初始化
    strs := []string{"123", "456"}
    //range遍歷
    for k, v := range strs {
        pf("position[%d]:[%s]\n", k, v)
    }
    p(cap(strs)) //2
    p(len(strs)) //2
    str0 := [5]string{}
    p(str0, len(str0)) //[    ] 5
    str2 := [5]int{1, 2}
    p(str2, len(str2)) //[1 2 0 0 0] 5
    str3 := [5]int{1: 10, 4: 8}
    p(str3) //[0 10 0 0 8]
    //str4 := [5]int{1: 10, 5: 8} //array index 5 out of bounds [0:5]
    str4 := [...]int{2: 1, 4: 3} //
    p(str4, len(str4))           //[0 0 1 0 3] 5  最大索引決定長度
    str5 := []int{2: 1, 4: 3}    //三個點或者不要點
    p(str5, len(str5))           //[0 0 1 0 3] 5
    str6 := []int{4: 1, 2: 3}
    p(str6, len(str6)) //[0 0 3 0 1] 5
    //賦值
    str6[4] = 12
    p(str6) //[0 0 3 0 12]
    //for 遍歷
    for i := 0; i < len(str6); i++ {
        pf("position[%d]:[%d]   ", i, str6[i])
    }
    p()
    p(str6[0:])

    str7 := append(str6, 12, 123) //append 爲內建函數
    p(str6, str7)                 //[0 0 3 0 12] [0 0 3 0 12 12 123]
    p(cap(str6))                  //5
    p(cap(str7))                  //10
    p(len(str7))                  //7
    //p(str7[7])    //index out of range

    p(str7, str7[:], str7[0:], str7[:len(str7)])
    //[0 0 3 0 12 12 123] [0 0 3 0 12 12 123] [0 0 3 0 12 12 123] [0 0 3 0 12 12 123]
    p(str7[0:3], str7[:3], str7[3]) //[0 0 3] [0 0 3] 0

    rv := reflect.ValueOf(str7) //進入瘋狂的reflect世界
    p(rv.Kind())                //slice
    rv = reflect.ValueOf(strs)
    p(rv.Kind()) //slice
    rv = reflect.ValueOf(str0)
    p(rv.Kind()) //array
    rv = reflect.ValueOf(str2)
    p(rv.Kind()) //array
    rv = reflect.ValueOf(str3)
    p(rv.Kind()) //array
    rv = reflect.ValueOf(str4)
    p(rv.Kind()) //array
    rv = reflect.ValueOf(str5)
    p(rv.Kind()) //slice
    rv = reflect.ValueOf(str6)
    p(rv.Kind()) //slice
    // 使用內建方法make 創建一個切片
    s := make([]int, 5)
    p(s, cap(s), len(s)) //[0 0 0 0 0] 5 5
    s2 := make([]int, 5, 10)
    p(s2, cap(s2), len(s2)) //[0 0 0 0 0] 10 5
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章