数组和切片的区别

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