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

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

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

Go
湖上湖 2021-11-08 18:59:01
我想加入两行,但收到错误消息。原来的: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)这是为什么?
查看完整描述

1 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

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

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

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

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

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

如果切片操作数是一个数组,它必须是可寻址的,并且切片操作的结果是一个与数组具有相同元素类型的切片。

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

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


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

添加回答

举报

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