golang 中结构体与字节数组能相互转化么结构体与[]byte不能直接转化,可以通过gob来转换 。
编码时如下 , 假设默认的结构体为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相一致,解码后内容保存在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 {//错误处理}
如何将任意Golang接口转换为字节数组golang语言本身就是c的工具集,开发c的程序用到的大部分结构体,内存管理,携程等,golang基本都有,他只是在这个基础上又加了一些概念这里说一个很小的问题 , 就是字节数组转string的问题,网上大部分都是这样转的(包括google上):string(p[:]),这个转完了是有问题的,我们再来看一下string这个结构体:
struct String
{
byte*str;
intgolen;
};
这个结构体让我想起了nginx的string,他是这样定义的:
typedef struct {
size_tlen;
u_char*data;
} ngx_str_t;
golang里边 string的概念其实不是以前遇到\0结尾的概念了,他其实就是一块连续的内存,首地址 长度,上面那样赋值,如果p里边有\0,他不会做处理这个时候 , 如果再对这个string做其他处理就可能出问题了,比如strconv.Atoi转成int就有错误,解决办法就是需要自己写一个正规的转换函数:
func byteString(p []byte) string {
for i := 0; ilen(p); i{
if p[i] == 0 {
return string(p[0:i])
}
}
return string(p)
}
这样就不会出问题了
go语言集合怎么转换为字节数组直接将字符变量赋值给整型变量 , 即可实现字符到对应ASCII码的转换 。
【go语言怎么转换字节数 go语言类型转换】go语言怎么转换字节数的介绍就聊到这里吧 , 感谢你花时间阅读本站内容,更多关于go语言类型转换、go语言怎么转换字节数的信息别忘了在本站进行查找喔 。
推荐阅读
- 回家看看怎么操作手机,回家看看在手机上怎么操作
- psp中文恋爱养成游戏,psp的恋爱养成游戏
- 头条号直播的视频怎么下载,头条直播回放怎么下载
- mysql怎么显示数据库 mysql如何显示当前数据库的数据存储文件夹
- js让方法先后执行,js函数执行先后顺序控制
- 如何快速打开excel,如何快速打开罐头瓶盖
- oracle索引限制,oracle索引超出范围
- php表单怎么提交数据库 如何将php表单提交到后端
- js触发后台事件,javascript触发