package main import ( "fmt" "reflect" ) func arrTest(a [6]string) { a[1] = "*" a[3] = "*" a[5] = "*" } func sliTest(s []string) { s[1] = "*" s[3] = "*" s[5] = "*" } func main() { //========== 定义数组 ==========// arr := [...]string{"m", "a", "n", "o", "n", "g"} fmt.Printf("arr类型为:%+v,值为:%+v \n", reflect.TypeOf(arr).Kind().String(), arr) // arr类型为:array,值为:[m a n o n g] //========== 定义切片 ==========// sli := []string{"m", "a", "n", "o", "n", "g"} fmt.Printf("sli类型为:%+v,值为:%+v \n", reflect.TypeOf(sli).Kind().String(), sli) // sli类型为:slice,值为:[m a n o n g] //========== 数组入参实验 ==========// arrTest(arr) fmt.Printf("arr类型为:%+v,值为:%+v \n", reflect.TypeOf(arr).Kind().String(), arr) // arr类型为:array,值为:[m a n o n g] //========== 切片入参实验 ==========// sliTest(sli) fmt.Printf("sli类型为:%+v,值为:%+v \n", reflect.TypeOf(sli).Kind().String(), sli) // sli类型为:slice,值为:[m * n * n *] } //========== 总结 ==========// // 1、数组和切片很容易混淆,区分标志是看“[]”里面有没有内容,只要“[]”里有内容,不管是数字还是三个小数点,那它就是数组,否则就是切片。 // 2、数组入参后在函数体里修改形参不会影响数组本身,而切片入参后在函数体里修改形参会影响切片本身。
Copyright © 2024 码农人生. All Rights Reserved