/**
数组和切片
*/
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
}
golang 数组和切片
最新推荐文章于 2024-05-04 17:02:34 发布