结构体
结构体转JSON(结构体转换成JSON 字段必须是公有的)
jsonByte,_ := json.Marshal(s1) //返回一个byte类型数组 s1结构体对象 jsonStr := string(jsonByte) //把byte类型数组转json字符串
JSON转结构体
err := json.Unmarshal([]byte(str),&s2) //把json字符串转成byte类型的切片 并赋值给s1对象 需要修改里面的字段需要加& fmt.Println(err) //返回值为nil解析成功 fmt.Println(s2) //返回结构体 fmt.Printf("%T",s2) //返回结构体
嵌套结构体转JSON
//学生结构体 type Student struct { Id int Gender string Name string } //班级结构体 type Class struct { Title string Student []Student } func main() { c := Class{ Title: "001", Student: make([]Student,0),//[]Student{}, } //动态添加student for i := 0;i < 10 ; i++ { s := Student{ Id: i, Gender: "男", Name: fmt.Sprintf("stu_%v",i), } c.Student = append(c.Student,s) } jsonByte,_ := json.Marshal(c) jsonStr := string(jsonByte) fmt.Println(jsonStr) }
定义结构体
type User struct {
//结构体名称和属性 首字母大写表示公有的 首字母小写表示私有的
id int `json:"id"`//结构体标签 tag 用于转json之后key的
nickname string
mobile string
sex string
}
func main(){
//结构体是由一系列具有相同类型或不同类型的数据构成的数据集合 为值类型
var u User //实例化结构体
//var u1 = new(User) //实例化结构体 u1为结构体指针 可以(*u1).id 取值
//var u2 = &User{} //结构体地址给u2 和指针类似
//var u3 = User{id:2,nickname:"李四","mobile":"13966666666","sex":"女",} //k-v结构赋值
//var u4 = &User{id:2,nickname:"李四","mobile":"13966666666","sex":"女",} //k-v结构赋值
u.id = 1
u.nickname = "张三"
u.mobile = "13522223333"
u.sex = "男"
fmt.Println(u)
return
结构体方法
type User struct {
//结构体名称和属性 首字母大写表示公有的 首字母小写表示私有的
id int
nickname string
mobile string
sex string
}
//定义结构体方法(个人理解就是这个方法只有这个结构体实例化后能调用)
func (u User) PrintInfo(){
fmt.Println(u)
}
func (u *User) SetInfo(id int,nickname string){
u.id = id
u.nickname = nickname
}
func main(){
//结构体方法和接收者
//--没有类的概念但是可以给类型(结构体、自定义类型)定义方法,方法就是定义了者接收的函数 接收者的概念类似于其他语言的this和self
u := User{
id:1001,
nickname: "张三丰",
mobile: "15899998888",
}
u.SetInfo(5,"张无忌") //如果SetInfo不是指针类型 此处不能修改u的值
u.PrintInfo()
return
结构体数据类型
type Person struct { Name string Sex string Hobby []string Map1 map[string]string Struct1 struct{ string int } } func main() { /* 结构体的字段类型可以为:基本数据类型、切片、Map以及结构体 如果结构体的字段类型是:指针、slice和map的零值都为nil ,即还没有分配内存空间 如果需要使用这样的类型 需要使用make */ p := Person{ Name: "张学友", Sex: "男", Hobby: []string{"唱歌","跳舞"}, Map1: map[string]string{"title":"MAP标题"}, Struct1: struct { string int }{string: "刘德华", int:18 }, } fmt.Println(p) }
结构体继承
//定义动物的结构体 type Animal struct { Name string } //定义动物的结构体方法 func (a Animal) run(){ fmt.Println("动物跑的方法") } //定义狗的结构体 type Dog struct { Color string Animal //定义 } //定义狗结构体的方法 func (d Dog) wang(){ fmt.Println(d.Name+d.Color) } func main() { //实例化动物结构体 animalObj := Animal{ Name: "动物", } //animalObj.run() //动物的动作 //实例化狗的结构体 dogObj := Dog{ Color: "红色", Animal:animalObj, //这个传入结构体 } dogObj.wang() //狗的动作 }