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

golang-如何获得“已评估但未使用”的错误

golang-如何获得“已评估但未使用”的错误

Go
绝地无双 2021-04-08 12:17:30
对于代码append(slice1, 1),Go compile将给出错误“ append(...)已评估,但未使用”。我们必须使用like,slice1 = append(slice1,1)因为append它不会修改slice1,并且它将返回一个新的slice。我认为这是一个很好的提示,因为这将防止很多错误,因为我们通常不知道像这样的功能append是否会更改原始数组。在JavaScript中,array1.push('item')将在位置更改array1并返回该数组的新长度。我想利用这种代码检查:func appendStr(str string, tail string) string {    b := str + tail    return b}a := "a"appendStr(a, "b")但是Go编译器没有给出错误。那么编译器会对append方法做一些特殊的检查吗?由于按值传递参数,因此编译器应该知道appendStr更改传递参数没有任何变化。
查看完整描述

2 回答

?
HUX布斯

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

append()之所以特别是因为它是一个内置函数,并且编译器会对它进行额外的检查。不使用的返回值很少有用append(),因此Go作者决定不使用它的编译时错误。

另一方面,调用具有返回值的“普通”函数通常会产生“副作用”,通常仅因其“副作用”而调用函数而不使用其返回值是很常见的。一个非常常见的示例是fmt.Println():您经常在控制台上打印一些内容,而很少(如果有的话)检查是否成功或实际写入了多少字节。

语言规范允许您不要使用函数的返回值,因此这样做是有效的,并且您不能强制编译器犯错或发出警告,也不能使编译器“标记”为有效错误代码。


查看完整回答
反对 回复 2021-04-19
  • 2 回答
  • 0 关注
  • 706 浏览
慕课专栏
更多

添加回答

举报

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