在圍棋中,字符串在內部存儲爲C-結構:有沒有什麼辦法可以判斷兩個字符串在Go中共享內存?
struct String // This is C code (not Go)
{
byte* str;
int32 len;
};
比方說,我有以下變量:
a0 := "ap" // This is Go code
a1 := "ple"
b0 := "app"
b1 := "le"
a := a0 + a1
b := b0 + b1
c := "apple"
d := c
然後將以下代碼:
fmt.Println("a == b = %t, &a == &b = %t", a == b, &a == &b)
fmt.Println("c == d = %t, &c == &d = %t", c == d, &c == &d)
輸出:
a == b = true, &a == &b = false
c == d = true, &c == &d = false
,因爲&a == &b
比較C結構的地址,而a == b
比較字符串的值。
有什麼辦法來測試是否本身存儲在同一個地方(即在C-結構的str
領域具有相同的值)的字符串,這樣比較a
,並會b
最有可能的產量false
,而比較c
和d
幾乎肯定會產生true
?
謝謝!你可以通過將'string'投入到'StringHeader'來使用它嗎? – Matt
@Matt:在Go中沒有__鑄造。請參閱最新的答案。 – zzzz
我仍然會打電話給那個演員。但是,謝謝! – Matt