我的输出说
。\ main1.go:8:无效的标识符字符U + 200b
。\ main1.go:8:undefined:fmt inPmt.Print
我甚至尝试过去游乐场同样的回应。
有人发布了答案" 0 1 2 3"使用相同的代码。
为什么我复制了相同的代码,但结果如上。
package main
import "fmt"
func main() {
x := []string{"i","j","k","l"}
for v := range x {
fmt.Print(v, " ")
}
fmt.Println()
}
答案 0 :(得分:3)
有两点需要注意:
第一:如果您使用简单的Hex Viewer查看源文件,您将在fmt.Print(v,"")之前看到一些额外的十六进制字节:
20 20 E2 80 8B
让我们删除它,现在我们有:
package main
import "fmt"
func main() {
x := []string{"i", "j", "k", "l"}
for v := range x {
fmt.Print(v, " ")
}
fmt.Println()
}
现在的输出是:
0 1 2 3
第二:
但通常我们使用变量名称,比如v表示值,var表示名为i表示索引
所以看起来代码需要注意:
package main
import "fmt"
func main() {
x := []string{"i", "j", "k", "l"}
for _, v := range x {
fmt.Print(v, " ")
}
fmt.Println()
}
现在的输出是:
我知道
答案 1 :(得分:2)
U + 200b显然是零宽度空间。它可能出现在一个奇怪的复制粘贴之后。
尝试从头开始重写代码。
答案 2 :(得分:2)
无论您从复制的其他字符(特别是unicode zero-dith space)复制它,并将它们放在for ... range
语句的左括号和fmt.Print(...)
之间。在十六进制编辑器中查看粘贴输出可以看出这种情况。如果您选择并删除fmt.Print
之前的此字符,go fmt
将再次运行,程序将编译。在该语句之前删除所有空格。
答案 3 :(得分:0)
代码的第8行有Zero Width Space个字符,这是一个不可打印的字符。这可能是您复制的来源。
删除空格后重写行如下工作正常。
package main
import "fmt"
func main() {
x := []string{"i", "j", "k", "l"}
for v := range x {
fmt.Print(v, " ")
}
fmt.Println()
}
输出:
0 1 2 3
当您在代码上运行go fmt
时,会显示filename.go:8:5: illegal character U+200B
,其中指定了ZWSP的位置。