ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
### 定义结构体 > **结构体名,成员变量名不能重复,同类型变量可以写一行,结构体本身就是一种类型。结构体名也可以叫结构体类型** ``` type 结构体名 struct { 成员变量1 类型1 成员变量2,成员变量3 类型2 成员变量4 类型3 ... } ``` ### 实例化结构体 **标准实例化** > **var 结构体实例 结构体类型** ``` package main import "fmt" // 定义一个结构体 type Box struct { header string str string body int num int } func main() { var box Box fmt.Println(box) // { 0 0} } ``` string和int初始值为""和0 **new函数实例化** > **结构体实例 :=new(结构体类型)** ``` package main import "fmt" // 定义一个结构体 type Box struct { header string str string body int num int } func main() { box := new(Box) fmt.Println(box) // &{ 0 0} } ``` **取地址实例化** > **结构体实例 := &结构体类型{}** ``` package main import "fmt" // 定义一个结构体 type Box struct { header string str string body int num int } func main() { box := &Box{} fmt.Println(box) // &{ 0 0} } ``` ### 初始化结构体 **键值对初始化** ``` 结构体实例 := 结构体类型 { 成员变量1:值1 成员变量2:值2 成员变量3:值3 ... } ``` ``` package main import "fmt" // 定义一个结构体 type Box struct { name string data string age int height int } func main() { box := &Box{ name: "Tony", data: "学习go语言", age: 15, height: 170, } fmt.Println(box) // &{Tony 学习go语言 15 170} fmt.Println("name", box.name) fmt.Println("data", box.data) fmt.Println("age", box.age) fmt.Println("height", box.height) } 结果: &{Tony 学习go语言 15 170} name Tony data 学习go语言 age 15 height 170 ``` 有点类似映射(map)初始化操作 ### 列表格式初始化 ``` 结构体实例 := 结构体类型{ 值1, 值2, 值3, ... } ``` ``` package main import "fmt" // 定义一个结构体 type Box struct { name string data string age int height int } func main() { box := &Box{ "Tony", "学习go语言", 15, 170, } fmt.Println(box) // &{Tony 学习go语言 15 170} fmt.Println("name", box.name) fmt.Println("data", box.data) fmt.Println("age", box.age) fmt.Println("height", box.height) } 结果: &{Tony 学习go语言 15 170} name Tony data 学习go语言 age 15 height 170 ``` 顺序需要和声明变量的保证一致