Welcome to Rooeye's blog

golang 中使用array和slice的坑

golang rooeye 174℃ 0评论

注意array和slice传值的时候的区别,如下代码所示:

package main

import "fmt"

func main() {

	//array传递的是拷贝,函数中改变实际值并不会改变
	arr := [3]int{1, 2, 3}

	func(arr [3]int) {
		arr[0] = 4
		fmt.Println(arr)
	}(arr)

	fmt.Println(arr)

	//如果要改变array的值,可以传递array的引用
	arr2 := [3]int{11, 22, 33}

	func(arr2 *[3]int) {
		arr2[0] = 44
		fmt.Println(arr2)
	}(&arr2)

	fmt.Println(arr2)

	//切片是引用类型可以直接改变slice的值,注意和第一种array值传递区分
	arr3 := []int{111, 222, 333}

	func(arr3 []int) {
		arr3[0] = 444
		fmt.Println(arr3)
	}(arr3)

	fmt.Println(arr3)
}

运行结果:

[4 2 3]
[1 2 3]
&[44 22 33]
[44 22 33]
[444 222 333]
[444 222 333]

 

造成case1和case3区别的主要原因是array是值类型,slice是引用类型,下图给出了golang中各种类型的详细说明
BaiduHi_2017-7-20_19-42-24

转载请注明:寻梦人博客 » golang 中使用array和slice的坑

喜欢 (2)
发表我的评论
取消评论

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址