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

Python015

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

结构体与[]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 { //错误处理}

在使用Go语言的时候,碰到了需要对数组进行去重操作的问题。Java语言有Set集合这个数据结构,可以很方便的将数组转为集合,但是Go语言没有Set,如果仅仅是因为去重操作就手动实现一个Set太繁琐了。可以根据Go语言中的map的特性来简单实现一下

这个是对字符串数组去重操作。可以根据需要的类型稍作修改即可。需要注意的是只支持可以作为map键的结构进行去重!