golang 中结构体与字节数组能相互转化么

发布网友 发布时间:2022-04-20 08:21

我来回答

2个回答

热心网友 时间:2022-04-10 04:59

如果希望长期保存,并且格式变化的时候能够兼容,建议用Gob或者类似的package。
如果想象C那样物理的把数据映射出来,只能用 unsafe。And yes, it is UNSAFE.

热心网友 时间:2022-04-10 06:17

编码时如下,假设默认你的结构体为data

func Encode(data interface{}) ([]byte, error) {
buf := bytes.NewBuffer(nil)
enc := gob.NewEncoder(buf)
err := enc.Encode(data)
if err != nil {
return nil, err
}
return buf.Bytes(), nil
}
解码时如下,data为需要解码的字节数组,to为相应的接收结构体,记住to的结构体结构应与被编码的data相一致(这就是gob相对于json的缺陷,解码需要预先知道被解码内容的结构),解码后内容保存在to里面,直接使用to即可

func Decode(data []byte, to interface{}) error {
buf := bytes.NewBuffer(data)
dec := gob.NewDecoder(buf)
return dec.Decode(to)
}
使用的时候:

b, err := Encode(data)
if err != nil {
//错误处理
}
if err := Decode(b, &to); err != nil {
//错误处理
}
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com