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

来源:3-1 结构体--创建&初始化

纸伞遇佳人

2020-03-20 14:38


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回答

  • 纸伞遇佳人
    2020-03-20 14:39:29

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

Go语言语法进阶指南

了解Go语言各种高级用法,快速提高开发效率

11391 学习 · 27 问题

查看课程

相似问题