当某些时候需要将结构体进行序列化的时候(类似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,
}
}