我的Go代码中遇到了一个非常奇怪的问题。似乎相同的字符串,一个在结构内部声明,一个在外部,在使用时具有不同的长度。以下代码显示了一个示例:
type evaluateTest struct {
name string
expected int
fen string
}
func TestEvaluate(t *testing.T) {
cases := []evaluateTest{
{"Pawn testing", 330, "8/8/8/8/4P3/3P4/2P5/8 w KQkq - 0 11"},
}
for _, test := range cases {
outside := "8/8/8/8/4P3/3P4/2P5/8 w KQkq - 0 11"
fmt.Printf("String in struct has length %v\n", len(test.fen))
fmt.Printf("String outside struct has length %v\n", len(outside))
输出:
String in struct has length 41
String outside struct has length 38
在字符串中循环并打印字符代码会在结构中字符串的前三个位置(十进制226,128,139)中给出垃圾字符,而在外部声明的字符串中则没有。
我真的不知道这里发生了什么。非常感谢任何帮助。
答案 0 :(得分:6)
一个字符串以两个零宽度空格(\ u200b)开头。另一个从一个开始。
在这种情况下,使用%q进行打印有助于查看正在发生的情况。请参阅the playground example。