今天早上,当下面的代码工作时,我有点困惑。
// s points to an empty string in memory
s := new(string)
// assign 1000 byte string to that address
b := make([]byte, 0, 1000)
for i := 0; i < 1000; i++ {
if i%100 == 0 {
b = append(b, '\n')
} else {
b = append(b, 'x')
}
}
*s = string(b)
// how is there room for it there?
print(*s)
http://play.golang.org/p/dAvKLChapd
我觉得我在这里遗漏了一些明显的东西。一些见解将不胜感激。
答案 0 :(得分:8)
我希望我理解这个问题......
string类型的实体由运行时结构实现,大致为
type rt_string struct {
ptr *byte // first byte of the string
len int // number of bytes in the string
}
该行
*s = string(b)
在* s设置一个新值(类型为rt_string)。它的大小是恒定的,所以它有“空间”。
rsc paper中的更多细节。