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

質問が理解できたと思います...

文字列型のエンティティは、実行時の構造体によって実装されます。

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 に答える