我想连接两行,但收到错误消息。
原来的:
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(使用前将#替换为@)