package main;
import "fmt"
//结构struct
//定义Person结构
type Person struct {
name string;
age int;
};
//结构里面还有一个匿名结构
type Person2 struct {
name string;
age int;
contact struct {
phone string;
addr string;
}
}
//结构里的匿名字段
type Person3 struct {
string;
int;
}
//嵌入结构,组合
type Person4 struct {
Person;
phone string;
addr string;
}
func main() {
a := Person{};
a.name = "test";
a.age = 27;
fmt.Println(a);
//简单初始化方式
b := Person{
name: "test2",
age: 24,
};
fmt.Println(b);
//调用函数A,这里是传递的值拷贝
A(b);
fmt.Println(b);
//调用函数B,这里传递的是地址
B(&b);
fmt.Println(b);
//对结构初始化的时候,一般直接用取地址符号
c := &Person{
name: "test3",
age: 25,
};
//在调用函数时,就不需要写取地址&符号
B(c);
fmt.Println(c);
//匿名结构
d := struct {
name string;
age int;
}{
name: "test4",
age: 22,
};
fmt.Println(d);
e := Person2{
name: "test5",
age: 33,
};
//匿名结构的初始化
e.contact.phone = "1388888888";
e.contact.addr = "地址";
fmt.Println(e);
//注意字段的顺序
f := Person3{
"test6",
55,
};
fmt.Println(f);
//两个结构间的比较
g := f;
fmt.Println(g == f);
//嵌入结构的初始化
h := Person4{
Person: Person{name: "test7", age: 66},
phone: "139999999",
addr: "地址2",
};
fmt.Println(h);
h.Person.name = "哈哈";
h.Person.age = 99;
fmt.Println(h);
//可以对name和age直接操作
h.name = "haohao";
h.age = 88;
fmt.Println(h);
}
func A(p Person) {
p.age = 33;
fmt.Println(p);
}
func B(p *Person) {
p.age = 33;
fmt.Println(p);
}