golang slice无法添加指针
在Go语言中,指针是一种存储变量内存地址的数据类型。当你有一个指向int的指针,比如timePtr *int,你可以通过*timePtr来访问和修改指针指向的值。然而,指针本身是一个值类型,它存储的是变量的内存地址,而不是变量本身。
在你提供的add函数中:
1 | func add(timePtr *int) { *timePtr += 1 } // 增加一秒 |
timePtr是一个指向int的指针。虽然你可以通过*timePtr来间接修改它所指向的int值,但是你不能使用这个指针来创建一个关于*int的切片。原因如下:
指针的值是地址:
timePtr变量存储的是currentTime变量的内存地址,而不是currentTime的值。切片是基于数组的,它们需要一个具体的数据集合来创建。切片的元素类型:切片的元素类型是固定的,并且是在创建时确定的。你不能创建一个关于
*int的切片,因为切片的元素类型是int,而不是*int(指向int的指针)。切片创建语法:创建切片通常需要一个数组或另一个切片作为基础,或者使用
make函数指定长度和容量。例如:1
2
3var arr [5]int
slice1 := arr[:] // 基于数组的切片
slice2 := make([]int, 5, 10) // 使用make创建切片
如果你的目的是创建一个记录时间变化历史的切片,你需要一个独立的切片来存储这些时间值。你可以在main函数中声明这样一个切片,并在CRUD操作中更新它:
1 | var currentTime int |
在这个例子中,history是一个切片,用于存储时间点的历史记录。每次调用add函数时,我们不仅更新currentTime,还将新的时间点添加到history切片中。注意,由于切片是引用类型,我们传递&history来允许函数修改原始切片。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Lei Qi's Blog!
评论
