这个 golang 代码的输出是什么?
What's the output of this golang code?
我的输出显示
.\main1.go:8: 无效的标识符字符 U+200b
.\main1.go:8:未定义: fmt in fmt.Print
我什至在 go playground 上试过同样的反应。
有人用相同的代码发布了答案“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()
}
U+200b 显然是零宽度 space。它可能是在奇怪的复制粘贴后出现的。
尝试从头开始重写代码。
无论你从哪里复制它,都复制了一些额外的字符,特别是 unicode zero-dith space,并将它们放在 for ... range
语句的左大括号和 fmt.Print(...)
之间。查看十六进制编辑器中的粘贴输出会发现情况就是如此。如果您 select 并删除 fmt.Print
之前的这个字符,go fmt
将再次 运行 并且程序将编译。删除该语句之前的所有白色 space 也有效。
有两点需要注意:
首先:如果您使用简单的十六进制查看器查看源文件,您会在 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 named i 表示索引,
所以看来代码需要注意:
package main
import "fmt"
func main() {
x := []string{"i", "j", "k", "l"}
for _, v := range x {
fmt.Print(v, " ")
}
fmt.Println()
}
现在输出是:
我 j k l
您代码的第 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 的位置。
我的输出显示
.\main1.go:8: 无效的标识符字符 U+200b
.\main1.go:8:未定义: fmt in fmt.Print
我什至在 go playground 上试过同样的反应。
有人用相同的代码发布了答案“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()
}
U+200b 显然是零宽度 space。它可能是在奇怪的复制粘贴后出现的。
尝试从头开始重写代码。
无论你从哪里复制它,都复制了一些额外的字符,特别是 unicode zero-dith space,并将它们放在 for ... range
语句的左大括号和 fmt.Print(...)
之间。查看十六进制编辑器中的粘贴输出会发现情况就是如此。如果您 select 并删除 fmt.Print
之前的这个字符,go fmt
将再次 运行 并且程序将编译。删除该语句之前的所有白色 space 也有效。
有两点需要注意:
首先:如果您使用简单的十六进制查看器查看源文件,您会在 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 named i 表示索引,
所以看来代码需要注意:
package main
import "fmt"
func main() {
x := []string{"i", "j", "k", "l"}
for _, v := range x {
fmt.Print(v, " ")
}
fmt.Println()
}
现在输出是:
我 j k l
您代码的第 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 的位置。