What is “_,” (underscore comma) in a Go declaration?
我似乎无法理解这种变量声明:
1 | _, prs := m["example"] |
"
1 | prs := m["example"] |
(我发现它是Go-by示例:地图的一部分)
它避免了为返回值声明所有变量。它被称为空白标识符。
如:
1 | _, y, _ := coord(p) // coord() returns three values; only interested in y coordinate |
(另一个'EDOCX1[0]用例用于导入)
因为它会丢弃返回值,所以当您只想检查返回值中的一个时,它会很有帮助,如"如何测试映射中的键存在性?"如"有效行动,地图"所示:
1 | _, present := timeZone[tz] |
To test for presence in the map without worrying about the actual value, you can use the blank identifier, a simple underscore (
_ ).
The blank identifier can be assigned or declared with any value of any type, with the value discarded harmlessly.
For testing presence in a map, use the blank identifier in place of the usual variable for the value.
正如JSOR在注释中所补充的:
"generally accepted standard" is to call the membership test variables"ok" (same for checking if a channel read was valid or not)
这允许您将它与测试结合起来:
1 2 3 4 | if _, err := os.Stat(path); os.IsNotExist(err) { fmt.Printf("%s does not exist ", path) } |
你会发现它也在循环中:
If you only need the second item in the range (the value), use the blank identifier, an underscore, to discard the first:
1 2 3 4 | sum := 0 for _, value := range array { sum += value } |
Go编译器不允许您创建从不使用的变量。
1 2 3 | for i, value := range x { total += value } |
上述代码将返回错误消息"I declared and not used"。
由于循环中不使用i,因此需要将其更改为:
1 2 3 | for _, value := range x { total += value } |
EDCOX1×0是空白标识符。这意味着应该分配的值将被丢弃。
这里是丢弃的
基本上,EDCOX1×5称为空白标识符。在Go中,不能有未使用的变量。
作为一个实例,在迭代数组时,如果使用值:=range,则不希望使用i值进行迭代。但如果省略i值,它将返回一个错误。但是如果你声明我没有使用它,它也会返回一个错误。
因此,这就是我们必须使用
另外,当您将来不需要函数的返回值时,也可以使用它。
The blank identifier may be used whenever syntax requires a variable name but program logic does not, for instance to discard an unwanted loop index when we require only the element value.
摘录:
Go编程语言(Addison-Wesley专业计算系列)
程序设计实践
本材料可能受版权保护。
它被称为空白标识符,它在您希望放弃要返回的值而不引用它的情况下是有用的。
我们使用它的一些地方:
- 函数返回一个值,而您不打算在未来
- 您希望迭代并需要一个不需要的i值使用
An unused variable is not allowed in Golang
如果您来自其他编程语言,可能会感到有点难以适应这一点。但这会导致代码更加清晰。所以通过使用