Golang的struct
golang中的结构体(struct)和其他面向对象语言中的class一样,虽然不支持继承,但是支持组合。
声明结构体
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) }
注意:结构体中成员属性的顺序很重要,即使两个结构体成员属性相同,但是顺序不同,那么这个两个结构体不相同。
嵌套结构体
匿名嵌套
package main import "fmt" type Person struct { Name string Age int } type Student struct { Person Major string } 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"}} */ dd1 := Demo{demo1{"abc"}, demo2{"xyz"}} fmt.Println(dd1) dd2 := Demo{} dd2.demo1.Name = "abc" dd2.demo2.Name = "xyz" fmt.Println(dd2) }
匿名结构体
package main import "fmt" func main() { test := struct { Name string Age int }{ "abc", 99, } fmt.Println(test) //{abc 99} }
结构体进行比较
比较的前提:结构体内部的各成员属性是可比较的,必须是同一个struct类型(不是说内部属性以及属性顺序相同就行,必须要是同一个结构体类型)。
可以比较的情况
package main import "fmt" type Person struct { Name string Age int } func main() { p1 := Person{"abc", 99} p2 := Person{"xyz", 88} fmt.Println(p1 == p2) //false,可以比较 }
不可比较的情况
package main import "fmt" type Person struct { Name string Age int } type ManKind struct { Name string Age int } func main() { p1 := Person{"abc", 99} m1 := ManKind{"xyz", 88} fmt.Println(p1 == m1) //运行错误 }
如需转载,请注明文章出处,谢谢!!!