package main import ( "fmt" ) type test struct { //自定义类型 ptr *[100]int len int cap int } func maketest(slice test, cap int) test { //make 切片 slice.ptr = new([100]int) slice.cap = cap slice.len = 0 return slice } func modify(slice test) { //设置切片值 slice.ptr[1] = 10000 } func sliceTest() { var test1 test // 定义切片,类型为自定义的test test1 = maketest(test1, 10) 初始化切片 test1.ptr[1] = 100 // 将切片的prt[1]设置为 100 modify(test1) //改变切片值, fmt.Println(test1.ptr) 打印test1 } func main() { sliceTest() }
由于自定义 test1 的ptr改变的是地址,所以打印是改变了切片的值
slice map channel都是引用类型,所以改变是改变的变量的地址。
func modify(slice test) { slice.ptr[1] = 10000 fmt.Printf("%p\n", slice.ptr) } func sliceTest() { var test1 test test1 = maketest(test1, 10) test1.ptr[1] = 100 modify(test1) fmt.Println(test1.ptr) fmt.Printf("%p", test1.ptr)