07 | 数组与切片

2020-03-21  本文已影响0人  刀斧手何在

数组

func TestArray(t *testing.T){
    arr := [3]int{1,2,3}
    t.Log(arr)
}
//result : [1,2,3]
func TestArray(t *testing.T){
    arr := [3]int{}

    t.Log(arr)
}
//result : [0,0,0]
func TestArray(t *testing.T){
    arr := [...]int{}
    arr2 := [...]int{1,0}
    t.Log(arr,arr2)
}
//result : [] [1,0]
func TestArray(t *testing.T){
    arr := [...]int{1,0}
    t.Log(arr,cap(arr),len(arr))
}
//result : [1 0] 2 2
func  getLen(arr [...]int) int {
    return len(arr)
}

func TestArray(t *testing.T){
    arr := [...]int{1,0}
    t.Log(getLen(arr))
}
//result : use of [...] array outside of array literal
func  getLen(arr [2]int) int {
    return len(arr)
}

func TestArray(t *testing.T){
    arr := [...]int{1,0}
    t.Log(getLen(arr))
}
//result : 2

原因: ... 自动推导个数必须在编译时确定,函数行参无法在编译时确定元素个数?
所以Go语言中常用的是函数传切片而不是传数组

切片

A slice, on the other hand, is a dynamically-sized, flexible view into the elements of an array

  1. 直接声明
func TestSlice(t *testing.T) {
    var slice []int
    t.Log(reflect.TypeOf(slice))
}
//result : []int
  1. 声明并赋字面值
func TestSlice(t *testing.T) {
    slice := []int{1,2,3,4}
    t.Log(slice)
    t.Log(reflect.TypeOf(slice))
}
//result: [1,2,3,4] []int
  1. 从数组或切片中切出
func TestSlice(t *testing.T) {
    arr := [...]int{1,2,3,4}
    slice := arr[0:3]
    slice2 := slice[1:2]
    t.Log(slice,slice2)
    t.Log(reflect.TypeOf(slice),reflect.TypeOf(slice))
}

推荐阅读

上一篇 下一篇

猜你喜欢

热点阅读