我发现使用空白标识符有点难以理解。我查看了effective go并了解了他们描述的大多数用例,但后来查看了我在路由处理函数中遇到的教程:
var person Person
_ = json.NewDecoder(req.Body).Decode(&person)
在第一行中我们创建一个Person类型的新空变量(先前定义的结构),然后我假设
&person
通过引用传递person var in,Decode
函数然后,此函数在编码和返回json响应之前继续执行更多任务。
为什么我们需要将解码分配给空白标识符?我们不能只运行json.NewDecoder(req.Body).Decode(&person)
吗?如果我们不能,为什么不呢?
答案 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