Variables 什么是“uquot;”&引用;(下划线逗号)在Go声明中?
我似乎无法理解这种变量声明:Variables 什么是“uquot;”&引用;(下划线逗号)在Go声明中?,variables,go,Variables,Go,我似乎无法理解这种变量声明: _, prs := m["example"] “”、“到底在做什么?为什么他们要声明这样的变量而不是 prs := m["example"] (我发现它是的一部分)它避免了为返回值声明所有变量。 它被称为 例如: _, y, _ := coord(p) // coord() returns three values; only interested in y coordinate 这样,您就不必声明一个不使用的变量:Go将不允许它。相反,使用“\u1”忽略所
_, prs := m["example"]
“”、
“到底在做什么?为什么他们要声明这样的变量而不是
prs := m["example"]
(我发现它是的一部分)它避免了为返回值声明所有变量。
它被称为 例如:
_, y, _ := coord(p) // coord() returns three values; only interested in y coordinate
这样,您就不必声明一个不使用的变量:Go将不允许它。相反,使用“\u1”忽略所述变量
(修订)
由于它会丢弃返回值,因此当您只想检查其中一个返回值时,它会很有用,如“”中所示:
为了测试在地图中的存在而不担心实际值,可以使用空白标识符,一个简单的下划线(<代码> < < /代码>)。 空白标识符可以被分配或声明为任何类型的值,而该值是无害丢弃的。 若要测试在地图中的存在,请使用空白标识符代替该值的通常变量。
他补充说: “普遍接受的标准”是将成员资格测试变量称为“ok”(用于检查通道读取是否有效) 允许您将其与测试相结合:if _, err := os.Stat(path); os.IsNotExist(err) {
fmt.Printf("%s does not exist\n", path)
}
您还可以在循环中找到它:
如果您只需要范围(值)中的第二项,则使用空白标识符(下划线)丢弃第一个:
<代码> <代码>是空白标识符。这意味着应该分配的值将被丢弃
这里是被丢弃的example
键的值。第二行代码将丢弃存在布尔值,并将值存储在prs
因此,要仅检查地图中是否存在,可以放弃该值。这可用于将映射用作一个集合。Go编译器不允许您创建从未使用过的变量
for i, value := range x {
total += value
}
上面的代码将返回一条错误消息“i声明且未使用”
由于在循环中不使用i,我们需要将其更改为:
for _, value := range x {
total += value
}
它被称为空白标识符,它在希望丢弃要返回的值而不引用它的情况下是有用的。 我们使用它的一些地方:
- 函数返回一个值,您不打算在 未来
- 您想要迭代,并且需要一个您将不需要的i值 使用
如果您来自其他编程语言,这可能会让您感到有点难以适应。但这会产生更干净的代码。因此,通过使用
。
我们说我们知道那里有一个变量,但我们不想使用它,并告诉编译器,它不会对我抱怨。:)基本上,<代码> >,<代码>,称为空白标识符。在GO中,我们不能有未使用的变量
例如,在使用值:=range迭代数组时,不需要使用i值进行迭代。但是如果省略i值,它将返回一个错误。但是如果你声明我没有使用它,它也会返回一个错误
因此,这就是我们必须使用,
的地方
当您不希望函数的返回值在将来出现时,也可以使用它。未使用变量的最佳使用情况是只需要部分输出的情况。在下面的示例中,我们只需要打印值(州人口)
谢谢你举个好例子。我花了一些时间才理解这个概念,但现在我明白了!请注意,IME“普遍接受的标准”是调用成员资格测试变量“ok”(用于检查通道读取是否有效)。@Jsor我同意。为了更直观,我在答案中加入了你的评论,并添加了一些额外的例子。对于未来的语言问题,请看第一个。它应该能回答你所有的问题。作为评论:
prs
可能代表“现在”。您示例中的代码正在检查m
地图中的“example”
条目是否存在。@fuzzxl是的,我以前看过,但由于不知道该功能的名称,因此没有找到它。此外,我还发现编程语言的官方规范不是很教条,而是通过示例学习。@dyoo一旦我有了下面的解释,我就明白了它的含义,但如果其他人有同样的问题,则值得注意@我不知道。因此,大多数问题可能都有答案。有些门槛是存在的,在这个门槛之下可能不应该问问题,但我认为这个问题并不在这个门槛之下。你的第一句话对于理解为什么有一个u作为空白标识符很重要。
for i, value := range x {
total += value
}
for _, value := range x {
total += value
}
package main
import (
"fmt"
)
func main() {
statePopulations := map[string]int{
"California": 39250017,
"Texas": 27862596,
"Florida": 20612439,
}
for _, v := range statePopulations {
fmt.Println(v)
}
}