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编程语言(Addison-Wesley专业计算系列)

布莱恩·克尼汉

本资料可能受版权保护

Golang中不允许使用未使用的变量


如果您来自其他编程语言,这可能会让您感到有点难以适应。但这会产生更干净的代码。因此,通过使用
我们说我们知道那里有一个变量,但我们不想使用它,并告诉编译器,它不会对我抱怨。:)基本上,<代码> >,<代码>,称为空白标识符。在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)
    }
}