为了账号安全,请及时绑定邮箱和手机立即绑定

当某些时候需要将结构体进行序列化的时候(类似Java的toString()方法)也需要实现go语言中的String()方法,举个简单的例子:


package main


import (

"bytes"

"encoding/json"

"fmt"

)


func main() {

dog := getDog(11, "kaka", 12, "little")

fmt.Println(dog.String())

}

type Dog struct {

//后面的部分是在对结构体进行序列化时对应的数据类型以及别名

//要注意,如果结构体对成员变量首字母小写是不可以序列化的,不管给不给别名

ID int `json:"id"`

Name string `xml:"name"`

Age int `json:"age"`

flaw string `json:"flaw"`

}


func (d *Dog) String() string  {

//json.Marshal()的作用是将结构体序列化为json格式的数据

//而与其对应的是Unmashal()方法,将json数据反序列化为结构体对象

//返回的是字节数组,由于没有实现String()方法,所以需要一个实现了该方法的缓冲数组转存一下

b, err := json.Marshal(*d)

//fmt.Println(reflect.TypeOf(b))

if err != nil {

return fmt.Sprint("%+v", *d)

}

//bytes.Buffer是一个字节缓冲结构体对象

var out bytes.Buffer

//将b的内容 加上`prefix` 以indent为缩进转存到out中

err = json.Indent(&out, b, "", "\t")

if err!= nil {

return fmt.Sprint("%+v", *d)

}

return out.String()

}

func getDog(id int, name string, age int, flaw string) Dog {

return Dog{

ID:   id,

Name: name,

Age:  age,

flaw: flaw,

}

}


正在回答

1 回答

我就是想给同学们说一下需要注意的一些细节?

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

当某些时候需要将结构体进行序列化的时候(类似Java的toString()方法)也需要实现go语言中的String()方法,举个简单的例子:

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信