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

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

原来的:

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)

这是为什么?


湖上湖
浏览 167回答 1
1回答

HUH函数

在第二种情况下您会收到一条错误消息,因为您尝试对函数调用的返回值(即sha1.Sum())进行切片:sha1.Sum(([]byte)(uf.Pwd))[:]函数调用的返回值是不可寻址的。提醒一下,(仅)以下是可寻址的(取自Spec: Address operators):...变量、指针间接或切片索引操作;或可寻址结构操作数的字段选择器;或可寻址数组的数组索引操作。作为可寻址性要求的一个例外,x也可能是(可能带括号的)复合文字。对数组进行切片需要该数组是可寻址的。规格:切片表达式:如果切片操作数是一个数组,它必须是可寻址的,并且切片操作的结果是一个与数组具有相同元素类型的切片。您的第一种情况有效,因为您首先将返回的数组存储在可寻址的局部变量中。切片数组要求数组可寻址,因为切片会生成一个切片,该切片不会复制数组的数据,但会创建一个共享后备数组且仅指向/引用它的切片。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go