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) //运行错误
}
如需转载,请注明文章出处,谢谢!!!
浙公网安备 33010602011771号