变量和函数返回值的不同行为

2023-12-05

我想连接两行,但收到​​错误消息。

原来的:

hash := sha1.Sum([]byte(uf.Pwd))
u.Pwhash = hex.EncodeToString(hash[:])

Joint:

u.Pwhash = hex.EncodeToString(sha1.Sum([]byte(uf.Pwd))[:])

第一个工作正常,第二个产生错误消息:

models/models.go:104: invalid operation sha1.Sum(([]byte)(uf.Pwd))[:] (slice of unaddressable value)

这是为什么?


在第二种情况下,您会收到一条错误消息,因为您尝试对函数调用的返回值(sha1.Sum()):

sha1.Sum(([]byte)(uf.Pwd))[:]

函数调用的返回值是不可寻址的。提醒一下,(仅)以下内容是可寻址的(取自规范:地址运算符):

...变量、指针间接或切片索引操作;或可寻址结构操作数的字段选择器;或可寻址数组的数组索引操作。作为可寻址性要求的一个例外,x也可以是(可能带括号)复合文字.

对数组进行切片需要数组可寻址。规格:切片表达式:

如果切片操作数是数组,则它必须是可寻址的切片操作的结果是与数组元素类型相同的切片。

您的第一个案例有效,因为您首先将返回的数组存储在可寻址的局部变量中。

对数组进行切片要求数组可寻址,因为切片会产生一个切片,该切片不会复制数组的数据,而是创建一个共享支持数组的切片,并且只会指向/引用它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

变量和函数返回值的不同行为 的相关文章

随机推荐