为什么我们会在Go中使用空白标识符?

时间:2017-09-12 17:28:30

标签: go

我发现使用空白标识符有点难以理解。我查看了effective go并了解了他们描述的大多数用例,但后来查看了我在路由处理函数中遇到的教程:

var person Person
_ = json.NewDecoder(req.Body).Decode(&person)

在第一行中我们创建一个Person类型的新空变量(先前定义的结构),然后我假设

  • &person通过引用传递person var in,
  • Decode函数
  • 填充数据

然后,此函数在编码和返回json响应之前继续执行更多任务。

为什么我们需要将解码分配给空白标识符?我们不能只运行json.NewDecoder(req.Body).Decode(&person)吗?如果我们不能,为什么不呢?

2 个答案:

答案 0 :(得分:1)

我假设你正在学习golang并且因为你无法确定为什么这个例子使用了这种做法。

正如@JimB在评论中提到的那样,示例编写者不需要这样做,他们只是忽略了错误返回。

答案 1 :(得分:1)

空白标识符_也可以用于在结构中严格提供键。请参阅this以获取参考

不执行

type SomeStruct struct {
  FirstField string
  SecondField bool
}

myStruct := SomeStruct{"", false}

强制提及值的键(消除了对值进行排序的依赖性)

type SomeSturct struct {
  FirstField string
  SecondField bool
  _ struct{}
}

// COMPILATION ERROR
myStruct := SomeSturct{"", false}

以上内容将给出错误too few values in SomeSturct literal