这个golang代码的输出是什么?

时间:2016-05-27 14:40:58

标签: go output

我的输出说

。\ 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()
}

4 个答案:

答案 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的位置。