初始化
package main
import (
"fmt"
)
type person struct {
Name string
Age int
}
func main() {
a := person{
Name: "cll",
Age: 10,
}
a.Name = "cll2"
a.Age = 20
fmt.Println(a)
}
struct是值类型,函数传参是值传递
package main
import (
"fmt"
)
type person struct {
Name string
Age int
}
func main() {
a := person{
Name: "cll",
Age: 10,
}
fmt.Println(a)
A(a)
fmt.Println(a)
B(&a)
fmt.Println(a)
}
func A(p person) {
p.Age = 20
}
func B(p *person) {
p.Age = 20
}
组合(嵌入)
package main
import (
"fmt"
)
type human struct {
Sex int
}
type teacher struct {
human
Name string
Age int
}
type student struct {
human
Name string
Age int
}
func main() {
a := teacher{Name: "jjj", Age: 20, human: human{Sex: 1}}
b := student{Name: "kkk", Age: 10, human: human{Sex: 0}}
a.Sex = 3
fmt.Println(a, b)
}
匿名结构
package main
import (
"fmt"
)
func main() {
a := &struct {
Name string
Age int
}{
Name: "cll",
Age: 10,
}
fmt.Println(a)
}
结构的比较
1、new 得到是结构的引用,{}得到是结构的值
2、结构的值的比较,比较结构的类型和值
package main
import (
"fmt"
)
type Dog struct {
name string
}
func main() {
d1 := Dog{name: "1"}
d2 := Dog{name: "1"}
fmt.Println(d1 == d2)
d3 := Dog{name: "11"}
d4 := Dog{name: "22"}
fmt.Println(d3 == d4)
}