这是我参与「第五届青训营 」笔记创作活动的第13天.
go结构体初始化:
import "fmt"
func main() {
type Person struct { //创建一个结构体
id int
name string
age int
email string
}
var tom Person
fmt.Println("未初始化的tom:", tom)
tom = Person{
id: 101,
name: "tom",
age: 12,
email: "123@gemail.com",
}
fmt.Println("初始化后的tom:", tom)
//按顺序简洁初始化
var amy Person
amy = Person{
102,
"amy",
11,
"112@qq.com",
}
fmt.Println("amy:", amy)
//也可以部分初始化
var jie Person
jie = Person{
id: 103,
name: "jie",
}
fmt.Println("jie:", jie)
}
go结构体指针:
type Person struct {
id int
name string
age int
}
var tom Person
var p_person *Person
tom = Person{
101,
"tom",
12,
}
p_person = &tom
fmt.Println("tom:", tom)
fmt.Printf("p_person:%p\n", p_person)
fmt.Println("*p_person:", *p_person)
使用new关键字创建结构体指针:
我们可以通过new关键字对结构体进行实例化,得到结构体的地址
type Person struct {
id int
name string
age int
}
var tom = new(Person)
fmt.Printf("tom类型:%T\n", tom)`
fmt.Printf("tom指针:%p\n", tom)
//访问结构体成员,使用.符号关键字
(*tom).id = 101
(*tom).name = "tom"
(*tom).age = 12
//我们也可以省略*符号,直接按照下面的格式写
//tom.id = 101
//tom.name = "tom"
//tom.age = 12
fmt.Printf("*tom:%v\n", *tom)
go结构体作为函数参数:
go结构体可以像普通变量一样,作为函数的参数,传递给函数,分为两种情况:
1.直接传递结构体,这里是一个副本(拷贝),在函数内部并不会改变外面结构体的内容;
2.传递结构体指针,这时在函数内部,能够改变外部结构体内容.
import "fmt"
type Per struct {
id int
name string
}
func main() {
tome := Per{id: 101, name: "tome"}
per := &tome
fmt.Println(tome)
showPerson(tome)
fmt.Println(tome)
fmt.Println("使用地址作为参数-----------------------------")
fmt.Println(tome)
showPerson2(per)
fmt.Println(tome)
}
func showPerson(per Per) {
//传入的是值,只是拷贝的副本,改变它的内容,并不会改变外部结构体中的内容
per.id = 102
per.name = "amy"
fmt.Println(per)
}
func showPerson2(per *Per) {
//传入的是per的地址,会改变外部结构体中的内容
per.id = 102
per.name = "amy"
fmt.Printf("%v\n", *per)
}
明天继续加油~