type <Name> struct{}
定义结构,名称遵循可见性规则package main
import (
"fmt"
)
type person struct {
Name string
Age int
}
func main() {
a := person{}
a.Age = 19
a.Name = "xiaoMing"
fmt.Println(a)
b := person{
Name: "daMing", //别忘了加逗号
Age: 20, //别忘了加逗号
}
fmt.Println(b)
b.Age = 23
fmt.Println(b)
updateAge(b)
fmt.Println(b, "new")
//通过指针传递可以进行深度修改
updateOrigenAge(&b)
fmt.Println(b, "new")
//或者,创建结构的时候,前面加上取地址符号,参数就变成了指向结构的指针
c := &person{
Name: "laoWang", //别忘了加逗号
Age: 58, //别忘了加逗号
}
fmt.Println(c)
//修改指针指向的某个属性,可以直接操作,不需要再取地址
c.Name = "xiaoWang"
updateOrigenAge(c)
fmt.Println(c, "new")
}
func updateAge(b person) {
b.Age = 3
fmt.Println(b, "updateAge")
}
func updateOrigenAge(b *person) {
b.Age = 5
fmt.Println(b, "updateOrigenAge")
}
package main
import (
"fmt"
)
type person struct {
Name string
Age int
//匿名结构
Contact struct {
Phone, City string
}
}
func main() {
//匿名结构
a := struct {
Name string
Age int
}{
Name: "xiaoMing",
Age: 18,
}
fmt.Println(a)
fmt.Println("----------------------")
b := person{
Name: "xiaoWang",
}
b.Age = 19
b.Contact.City = "beiJing"
b.Contact.Phone = "894401224"
fmt.Println(b)
}
package main
import (
"fmt"
)
type person struct {
string
int
}
func main() {
//匿名属性时,声明并初始化时要严格按照属性类型顺序进行赋值
a := person{"xiaoMing", 12}
fmt.Println(a)
}
package main
import (
"fmt"
)
type person struct {
Name string
Age int
}
func main() {
//只有同一结构的变量才可以进行判断是否相等
//同一结构,各个属性相等,即为相等
a := person{"xiaoMing", 12}
b := person{"xiaoMing", 13}
fmt.Println(b == a)
b.Age = 12
fmt.Println(b == a)
}
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() {
//嵌入字段赋值:human: human{Sex: 0}
a := teacher{Name: "laoMing", Age: 48, human: human{Sex: 0}}
b := student{Name: "xiaoMing", Age: 18, human: human{Sex: 1}}
fmt.Println("a", a)
fmt.Println("b", b)
a.Name = "laoWang"
a.Age = 50
a.human.Sex = 1
fmt.Println("a", a)
}
package main
import (
"fmt"
)
type human struct {
Sex int
Name string
}
type student struct {
//嵌入字段
human
Name string
Age int
}
func main() {
//嵌入字段属性与外层属性字段相同时
a := student{Name: "laoMing", Age: 48, human: human{Sex: 0, Name: "lao.Ming"}}
b := student{Age: 18, human: human{Sex: 1, Name: "xiao.Ming"}}
c := student{Name: "xiao.Ming", Age: 18, human: human{Sex: 1}}
//获取Name
fmt.Println("a.Name=", a.Name, "|", "a.human.Name=", a.human.Name)
fmt.Println("b.Name=", b.Name, "|", "b.human.Name=", b.human.Name)
fmt.Println("c.Name=", c.Name, "|", "c.human.Name=", c.human.Name)
}