在 Go 中,字符串在内部存储为 C-struct:
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
比较字符串的值。
有什么方法可以测试字符串本身是否存储在同一个地方(即str
C-struct中的字段具有相同的值),这样比较a
andb
最有可能 yield false
,而比较c
andd
几乎肯定会 yield true
?