- 声明结构体
package main import "fmt" type Person struct { Name string Age int } func main() { p1 := Person{"abc", 30} fmt.Println(p1) p2 := Person{Name: "xyz", Age: 40} fmt.Println(p2) p3 := Person{} p3.Name = "golang" p3.Age = 8 fmt.Println(p3) } // 注意:结构体中成员属性的顺序很重要,即使两个结构体成员属性相同,但是顺序不同,那么这个两个结构体不相同。 // 匿名结构体 func main() { test := struct { Name string Age int }{ "abc", 99, } fmt.Println(test) //{abc 99} }
- 使用结构体
有三种方式可以使用结构体: var staff Staff staff1 := new(Staff) staff2 := &Staff{} 上面2和3的效果是一样的,返回的都是指向结构体的指针。
-
嵌套结构体
// 语义上embedding是一种“继承关系“,而不是”成员关系“ // 一个定义内有多个embedding,则很难判断某个成员变量或函数是从哪里继承得到的 // 一个定义内有多个embedding,危害和在python中使用”from xxx import *"是类似的 // 匿名嵌套 package main import "fmt" type Person struct { Name string Age int } type Student struct { Person // is a的关系,Student is a Person Major string // has a的关系,Student has a Major } func main() { s1 := Student{Person{"demo", 99}, "php"} fmt.Println(s1) s2 := Student{} s2.Person.Name = "test" s2.Person.Age = 88 s2.Major = "Java" fmt.Println(s2) s3 := Student{} s3.Name = "hello" s3.Age = 77 s3.Major = "C#" fmt.Println(s3) p1 := Person{"world", 66} s4 := Student{p1, "JS"} fmt.Println(s4) } // 非匿名嵌套 package main import "fmt" type Person struct { Name string Age int } type Student struct { per Person Major string } func main() { s1 := Student{Person{"demo", 99}, "php"} fmt.Println(s1) s2 := Student{} s2.per.Name = "test" s2.per.Age = 88 s2.Major = "Java" fmt.Println(s2) /* //错误 s3 := Student{} s3.Name = "hello" s3.Age = 77 s3.Major = "C#" fmt.Println(s3) */ p1 := Person{"world", 66} s4 := Student{p1, "JS"} fmt.Println(s4) }
-
匿名组合-重名问题
package main import "fmt" type demo1 struct { Name string } type demo2 struct { Name string } type Demo struct { demo1 demo2 } func main() { /* 注释掉的内容是错误方法 dd := Demo{"abc", "xyz"}//两个成员都是结构体,当然不能用字符串赋值了,应该使用结构体 dd := Demo{{"abc"}, {"xyz"}} dd := Demo{demo1: {"abc"}, demo2: {"xyz"}} */ dd := Demo{demo1{"abc"}, demo2{"xyz"}} fmt.Println(dd) dd2 := Demo{} dd2.demo1.Name = "abc" dd2.demo2.Name = "xyz" fmt.Println(dd2) }
Golang 之 Struct结构体
于 2021-07-09 16:34:23 首次发布