Go では、文字列は C 構造体として内部的に保存されます。
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 構造体のフィールドが同じ値を持っている)かどうa
かをテストする方法はありますか?b
false
c
d
true