Go 有没有办法得到切片';s len/cap地址?

Go 有没有办法得到切片';s len/cap地址?,go,slice,memory-address,Go,Slice,Memory Address,我知道有len()和cap()函数返回切片的len/cap,但我想手动获取切片的地址来修改它。package main 进口( “fmt” “反映” “不安全” ) func main(){ //整型切片 美国:=[]整数{1,2,3,4} //镜头:4,镜头:4 fmt.Printf(“长度:%d,上限:%v\n”,长度(美国),上限(美国)) hdr:=(*reflect.SliceHeader)(不安全的.Pointer(&us)) hdr.Cap=10 hdr.Len=100 //len

我知道有
len()
cap()
函数返回切片的len/cap,但我想手动获取切片的地址来修改它。

package main
进口(
“fmt”
“反映”
“不安全”
)
func main(){
//整型切片
美国:=[]整数{1,2,3,4}
//镜头:4,镜头:4
fmt.Printf(“长度:%d,上限:%v\n”,长度(美国),上限(美国))
hdr:=(*reflect.SliceHeader)(不安全的.Pointer(&us))
hdr.Cap=10
hdr.Len=100
//len:100,cap:10
fmt.Printf(“长度:%d,上限:%v\n”,长度(美国),上限(美国))
}
样本输出:

len: 4, cap: 4
len: 100, cap: 10

你真的想做这么不安全的事情吗?我可以教你怎么做,但应该通过切片来完成。Slice可以指向未知内存,无法保证内存中会有什么以及它是否会保留。您可以使用
safe.Pointer
和转换来实现这一点。但是,除非你正在编写Go运行时,否则你根本不应该这样做。我只是想搞乱内存。当然,我很可能不会在任何严肃的程序中使用它。我知道:使用不安全的代码是不安全的。。。如果某个片的底层内存布局发生变化,它可能会与未来的Go版本发生冲突。@Ignatij但为什么要它呢?你能详细说明一下吗?用例是什么?@shmsr正如我在我的问题下所写的,这个想法是出于好奇而产生的,如果我手动访问并更改切片参数,将会发生什么是很有趣的,明白了@伊格纳蒂吉