目录
【1】定义一个结构体
通过下面代码可以看出
1、结构体是自定义的数据类型,代表一类事物
2、结构体变量(实例)是具体的,实际的,代表一个具体变量
package main
import "fmt"
//定义一个结构体
type User struct {
Name string
Mobile string
Age uint8
Money float64
}
func main() {
//使用结构体创建一个用户
var user1 User
user1.Name = "tom"
user1.Mobile = "18177770000"
user1.Age = 18
user1.Money = -10.58
fmt.Println("user1 = ", user1)
}
【2】内存分析
1、结构体默认是值类型
2、结构体变量的地址是连续的并指向结构体中第一个元素的地址
【3】创建结构体实例的几种方式
package main
import "fmt"
//定义一个结构体
type Dog struct {
Name string
Age uint16
}
func main() {
//方式1
var dog1 Dog
dog1.Name = "小黄"
dog1.Age = 5
fmt.Println("dog1 = ", dog1)
//方式2
dog2 := Dog{"小黑", 4}
fmt.Println("dog2 = ", dog2)
//方式3 定义成引用类型
dog3 := new(Dog)
(*dog3).Name = "小白" //写法一
dog3.Age = 4 //写法二 等价于 写法一
var dog5 = dog3
dog5.Name = "jack"
fmt.Println("dog3 = ", *dog3)
//方式4 定义成引用类型
var dog4 *Dog = &Dog{"tom", 7}
fmt.Println("dog4 = ", *dog4)
}
【4】结构体组合
package main
import "fmt"
//定义一个姓名结构体,包含姓和名
type Name struct {
Surname, Name string
}
//定义一个人类的结构体,每个人都有姓名
type Person struct {
Username Name
Age uint16
Sex string
}
func main() {
person1 := Person{
Name{"赵", "小明"},
16,
"男",
}
fmt.Println("person1 = ", person1)
fmt.Println("person1.Username.Surname = ", person1.Username.Surname)
}
【5】结构体标签
使用反引号 `` 加上标签,可以将结构体的字段在转为json格式时,首字母变为小写,便于和其他语言的程序交互
package main
import (
"encoding/json"
"fmt"
)
type Person struct {
Name string `json:"name"`
Age uint16 `json:"age"`
Sex string `json:"sex"`
}
func main() {
person1 := Person{"小明", 16, "男"}
jsonStr, err := json.Marshal(person1)
if err != nil {
fmt.Println("json处理错误")
}
fmt.Println("jsonStr = ", string(jsonStr))
}