GO slice for循环内存引用问题

85 阅读1分钟
  • for循环时, ele元素是独立内存空间的复制数据, 具体看注释
func TestString(t *testing.T) {  
//字符串类型,底层是不可变的byte数组, 英文字母点1个字节8位, 汉字点3个字节,点24位  
s := "abc中国"  
sl := []rune(s)  
for i, ele := range sl {  
//ele变更是独立的内存copy,ele和 sl[i]不是共享一个内存  
fmt.Printf("%p - %p - %c \n ",  
&ele,  
&sl[i],  
sl[i],  
)  
}  
}
  • 输出结果
API server listening at: 127.0.0.1:54228
=== RUN   TestString
0xc000212bb0 - 0xc00000e8a0 - a 
 0xc000212bb0 - 0xc00000e8a4 - b 
 0xc000212bb0 - 0xc00000e8a8 - c 
 0xc000212bb0 - 0xc00000e8ac - 中 
 0xc000212bb0 - 0xc00000e8b0 - 国 
 --- PASS: TestString (0.00s)
PASS