尝试连接涉及数组和函数调用的代码行时会出现一个常见问题。例如,考虑以下成功连接两行的原始代码:
<code class="go">hash := sha1.Sum([]byte(uf.Pwd)) u.Pwhash = hex.EncodeToString(hash[:])</code>
但是,如果您尝试将代码合并为一行,则可能会遇到错误消息:
<code class="go">u.Pwhash = hex.EncodeToString(sha1.Sum([]byte(uf.Pwd))[:])</code>
错误消息表明切片函数调用的返回值存在问题。在 Go 中,函数调用的返回值(例如 sha1.Sum() 中的返回值)是不可寻址的。
要理解这种行为,了解 Go 中的可寻址类型非常重要。根据Go规范,只有以下内容是可寻址的:
由于 sha1.Sum() 的返回值不是这些类型之一,因此无法对其进行切片。对数组进行切片,按照这里的要求,要求数组是可寻址的。
在原始代码的第一行中,返回的数组存储在局部变量(哈希)中,该变量是可寻址的。在第二行中,计算了 hex.EncodeToString(hash[:]),它按预期工作。
变量和返回值之间的区别凸显了理解 Go 寻址规则的重要性。通过遵循这些规则,您可以避免常见错误并编写更健壮的代码。
以上是为什么我不能在 Go 中对函数返回值进行切片?的详细内容。更多信息请关注PHP中文网其他相关文章!