golang切片数据结构解释

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)

猜你喜欢

转载自www.cnblogs.com/LC161616/p/9806440.html