为了账号安全,请及时绑定邮箱和手机立即绑定

为什么编译器在这个实例中抱怨一个未使用的变量(当它被 fmt.Fprintf 使用时)?

为什么编译器在这个实例中抱怨一个未使用的变量(当它被 fmt.Fprintf 使用时)?

Go
MYYA 2023-05-08 15:04:04
我有一段简单的代码,我想将切片的元素转换为 json,然后将它们打印到我的 http.responseWriter。for _, element := range customers {     result, _ := json.Marshal(element)     fmt.Fprintf(w, string(result)) }但是,当我编译它时,出现错误“已声明但未使用的结果”。如果我添加一个简单的行:_ = result然后一切都可以编译并正常工作。为什么编译器会抱怨这种用法,在 go 中正确的做法是什么?感谢任何见解,到目前为止,我的搜索似乎表明对 Fprintf 的调用应该算作一次使用。
查看完整描述

1 回答

?
慕妹3242003

TA贡献1824条经验 获得超6个赞

有问题的代码不会导致发布的错误,为了证明,请在Go Playground上检查它。

这个错误通常是(并且 op 确认在这种情况下也是如此)是由于在块外有一个同名的局部变量,并且在使用短变量声明时,它会隐藏该变量。

可以使用以下代码重现此错误:

var result []byte


customers := []int{}

w := os.Stdout


for _, element := range customers {

    result, _ := json.Marshal(element)

    fmt.Fprintf(w, string(result))

}

尝试编译并运行它,我们得到错误(在Go Playground上尝试):


prog.go:10:6: result declared and not used

如果打算使用现有变量(在这种情况下不会创建新变量),解决方案是使用简单的赋值而不是简短的变量声明,或者如果不打算使用外部变量,则使用不同的变量名称,现有变量(但是外部变量当然要被删除或使用)。


查看完整回答
反对 回复 2023-05-08
  • 1 回答
  • 0 关注
  • 117 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信