我想加入两行,但收到​​错误消息。

原来的:

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

联合的:
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() 的返回值)进行 slice :

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

函数调用的返回值是不可寻址的。提醒一下,(仅)以下是可寻址的(取自 Spec: Address operators ):



对数组进行 slice 需要该数组是可寻址的。 Spec: Slice expressions:



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

slice 数组要求数组可寻址,因为 slice 会生成一个 slice ,该 slice 不会复制数组的数据,但会创建一个共享后备数组且仅指向/引用它的 slice 。

关于variables - 变量的不同行为和函数的返回值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32818994/

10-16 14:25