解组自定义字节类型返回零值
短信预约 -IT技能 免费直播动态提醒
有志者,事竟成!如果你在学习Golang,那么本文《解组自定义字节类型返回零值》,就很适合你!文章讲解的知识点主要包括,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~
问题内容我正在尝试解组类型为 [32]byte 的自定义/别名哈希,但结果返回零值。以下代码只是我想要做的事情的一个片段。在此代码片段中,我生成 json 只是为了给出一个示例,但在我的实际代码库中,它将从另一个源生成和读取。这是片段:
package main
import (
"os"
"fmt"
"crypto/sha256"
"encoding/hex"
"encoding/json"
)
type Block struct {
Key Hash `json:"hash"`
}
type Hash [32]byte
func (h Hash) MarshalText() ([]byte, error) {
return []byte(hex.EncodeToString(h[:])), nil
}
func (h Hash) UnmarshalText(data []byte) error {
_, err := hex.Decode(h[:], data)
return err
}
func main() {
b := Block{sha256.Sum256([]byte("afasdfasfasfjiuoiuioupio"))}
j, _ := json.Marshal(b)
var unmarshalled Block
err := json.Unmarshal(j, &unmarshalled)
if err != nil {
os.Exit(1)
}
fmt.Printf("%x\n", unmarshalled.Key)
// prints out 0000000000000000000000000000000000000000000000000000000000000000
}
解决方案
unmarshaltext 方法修改的是值 h
,而不是调用者中的值。使用指针接收器来修改调用者的值。
func (h *Hash) UnmarshalText(data []byte) error {
_, err := hex.Decode(h[:], data)
return err
}
今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注编程网公众号,一起学习编程~
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341