//给struct的每个字段上写一个tag,该tag可以通过反射机制获取,常见的应用场景就是序列化和反序列化funcmain(){
dog := Dog{"guai",12}
jsonStr, err := json.Marshal(dog)if err !=nil{
fmt.Println("json处理错误:", err)}else{
fmt.Println("jsonStr:",string(jsonStr))}}type Dog struct{
Name string`json:"name"`
Age int`json:"age"`}
结果:
3、方法
3.1、为结构体绑定方法
3.2、方法的声明(定义)
} 例:
funcmain(){//方法://基本介绍,在某些情况下。我们需要声明方法,如Person结构体中处理有一些字段外,//还应该有一些行为,如:可以说话,跑步,等。在golang中的方法是作用在指定的数据类型上的//即:和指定的数据类型绑定,因此自定义类型都可以有方法,而不仅仅是struct
a := A{12}
a.test()}type A struct{
Num int}func(a A)test(){
fmt.Println("方法测试:", a.Num)}
注意:
1)test方法和A类型绑定
2)test方法只能通过A类型的变量来调用,而不能直接调用,也不能用其它类型变量来调用
3)func (A a)test(){} …a表示那个A类型的变量调用,这个a就是它的副本,这点和函数传参相似。
3.3、为非struct类型的自定义类型绑定方法
// 为非struct类型的自定义类型绑定方法funcmain(){var aa myFuncType1
aa =12
aa.test()}//自定义类型并绑定函数 实际上这只是相当于给int类型起个别名 这里主要用来演示为自定义类型bang'ding函数调用type myFuncType1 intfunc(mytype myFuncType1)test(){
fmt.Println("自定义类型的函数调用:", mytype)}