企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
### 结构体方法 **指针类型接收者** > **为Box结构体构造了一个 User的方法,修改name的值为 Tom,接收者类型为指针** ``` package main import "fmt" // 定义一个结构体 type Box struct { name string data string } // 指针类型接收者 func (u *Box) User() { u.name = "Tom" } func main() { // 指针型结构体 box := &Box{ "Tony", "学习go语言", } // 非指针型结构体 // box := Box{ // "Tony", // "学习go语言", // } fmt.Println("name", box.name, "data", box.data) box.User() fmt.Println("name", box.name, "data", box.data) } 结果: name Tony data 学习go语言 name Tom data 学习go语言 ``` **值类型接收者** > **当接收者为值类型时,没办法像上面一样修改成员变量** ``` package main import "fmt" // 定义一个结构体 type Box struct { name string data string } // 指针类型接收者 func (u Box) User() { u.name = "Tom" } func main() { // 指针型结构体 box := &Box{ "Tony", "学习go语言", } fmt.Println("name", box.name, "data", box.data) box.User() fmt.Println("name", box.name, "data", box.data) } 结果: name Tony data 学习go语言 name Tony data 学习go语言 ``` ### 结构体内嵌 ``` type 结构体名1 struct { 成员变量1 类型1 成员变量2 类型2 } type 结构体名2 struct { 结构体名1 成员变量3 类型3 } // main()内 结构体实例 := &结构体名2{ 结构体名1:结构体名1{ 成员变量1:值1, 成员变量2:值2, }, 成员变量3:值3, } ``` ``` package main import "fmt" // 定义一个结构体 type Box struct { name string data string } type Boxs struct { Box age int } func main() { // 指针型结构体 boxs := &Boxs{ Box: Box{ "Tony", "学习go语言", }, age: 10, } fmt.Println(boxs) // &{{Tony 学习go语言} 10} // 修改 boxs.age = 18 fmt.Println(boxs) // &{{Tony 学习go语言} 18} } ``` **内嵌匿名结构体** ``` type 结构体名1 struct { 成员变量1 类型1 成员变量2 类型2 结构体名2 struct{ 成员变量3 类型3 } } // main() 函数内 结构体实例 := &结构体名1{ 成员变量1:值1, 成员变量2:值2, 结构体名2: struct{ 成员变量3 类型3 }{ 成员变量3:值3, } } ``` ``` package main import "fmt" // 定义一个结构体 type Box struct { name string data string Boxs struct { age int } } func main() { // 指针型结构体 box := &Box{ name: "Tony", data: "学习go语言", Boxs: struct { age int }{ age: 10, }, } fmt.Println(box) // &{Tony 学习go语言 {10}} } ``` 其实也还简单,就是有点绕