初级会员
  • 第 71581 位会员
  • sunjiangmeng
  • 2022-01-14 14:10:04
  • Offline
  • 19 95

最近发布的主题

    暂无

最近发布的文章

    暂无

最近分享的资源

    暂无

最近发布的项目

    暂无

最近的评论

  • 2022-01-14 19:23:13 评论了主题 空切片问题
    别人说的没错是传递的结构体。去golang源码可以找到slice的源码 ``` type slice struct { array unsafe.Pointer // 数据部分 len int // 长度 cap int // 容量 } ``` 所以len(切片),cap(切片)可以获取到长度。 结构体中的unsafe.Pointer是指向底层数组的真实地址。 你的mytest方法传递就是结构体副本。不过因为他们各自的slice切片结构体的地址值一样,所以操作的数组能够更改。 修改下你的方法,就会说明go切片的传递就是拷贝的结构体 ``` package main import "fmt" func mytest(x []int) { x =append(x ,0) x[3] = 4 fmt.Println("mytest中x的切片",x) } func main() { demo := []int{1, 2, 3, 0} fmt.Println(demo) mytest(demo) fmt.Println(demo) } ``` 运行结果如下 ``` [1 2 3 0] mytest中x的切片 [1 2 3 4 0] [1 2 3 0] ``` 之所以demo的切片不是 [1 2 3 4 0],是因为mytest的append发生了扩容,导致x切片中的unsafe.Pointer发生改变了。但这并不会影响到demo切片。因为这两个切片结构体根本不是一个对象