初始化
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)
}