go语言学习笔记18------面向对象①

1:匿名字段

1.1匿名字段创建与初始化

package main

import "fmt"

type person struct {
   id int
   name string
   age int
}
type student struct {
   person  //匿名字段
   score float64
}
func main() {
   var a student=student{person{1,"lili",25},98}
   fmt.Println(a)
}
输出结果
{{1 lili 25} 98}

初始化方式如下:
1)自动推导类型
2)指定初始化成员

1.2同名字段

package main

import "fmt"

type person struct {
   id int
   name string
   age int
}
type student struct {
   person
   name string  //同名字段
   score float64
}
func main() {
   var a student=student{person{1,"lili",25},"bob",88}
   fmt.Println(a.name)
   fmt.Println(a.person.name)
}
//输出结果
//bob
//lili

1.3指针类型匿名字段

package main

import "fmt"

type person struct {
   id int
   name string
   age int
}
type student struct {
   *person  //匿名字段
   score float64
}
func main() {
   var a student=student{&person{1,"lili",25},98}
   fmt.Println(a)
   fmt.Println(a.name,a.id,a.age,a.score)
}
输出结果
{0xc0420023e0 98}
lili 1 25 98

另一种初始化方式

package main

import "fmt"

type person struct {
   id int
   name string
   age int
}
type student struct {
   *person  //匿名字段
   score float64
}
func main() {
   var a student
   a.person=new(person)
   a.id=1
   a.name="lili"
   a.age=19
   a.score=99
   fmt.Println(a)
   fmt.Println(a.name,a.id,a.age,a.score)
}
//输出结果
//{0xc0420023e0 99}
//lili 1 19 99

此处注意需要用new分配空间,new( )的作用是分配空间,new( )函数的参数是一个类型,这里为Person结构体类型,返回值为指针类型,所以赋值给*Person,这样*Person也就指向了结构体Person的内存

猜你喜欢

转载自blog.csdn.net/weixin_42927934/article/details/82290419