2

今天早上当下面的代码工作时,我有点困惑。

// 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

我觉得我在这里遗漏了一些明显的东西。一些见解将不胜感激。

4

1 回答 1

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 的论文中的更多细节。

于 2013-04-19T14:23:56.313 回答