golang结构体继承(golang 覆盖结构体)-捕鱼10元起上10元下

go语言中的结构体

在go语言中,结构体是一种自定义类型,可以将不同类型的变量打包成一个结构体,方便在程序中进行管理和使用。结构体中可以包含不同数据类型的字段,也可以包含方法。在使用结构体时,我们需要先定义一个结构体类型,然后再根据该类型创建结构体变量。例如,我们可以定义如下的结构体类型:

```go
type person struct {
name string
age int
address string
}
```

然后我们就可以根据该类型创建一个person结构体变量:

```go
p := person{name: "alice", age: 25, address: "beijing"}
```

go语言中的结构体继承

在一些情况下,我们可能会需要定义一个新的结构体类型,该类型继承自一个或多个已有的结构体类型,这就是go语言中的结构体继承。结构体继承可以让我们避免重复定义相同的字段和方法,从而提高代码的复用性和可维护性。在go语言中,结构体继承是通过嵌入(embedded)一个或多个已有的结构体类型来实现的。例如,我们可以定义两个结构体类型:

```go
type employee struct {
person
title string
salary float64
}

type student struct {
person
major string
gpa float64
}
```

在这里,我们定义了两个结构体类型employee和student,它们都嵌入了一个已有的结构体类型person,从而继承了person类型的所有字段和方法。例如,我们可以根据employee类型创建一个结构体变量:

```go
e := employee{person: person{name: "bob", age: 30, address: "shanghai"}, title: "manager", salary: 5000.0}
```

在这里,由于employee类型嵌入了person类型,在创建e变量时,我们需要先初始化person字段。

go语言中的结构体匿名字段

在上一节中,我们使用了嵌入字段的方式实现了结构体继承。在go语言中,还有一种更简单的方式实现结构体继承,就是使用匿名字段。匿名字段是指没有指定字段名的字段,其类型就是字段的类型。例如,我们可以重新定义上面的employee和student类型:

```go
type employee struct {
person
title string
salary float64
}

type student struct {
person
string
float64
}

```

在这里,我们使用了匿名字段的方式定义employee和student类型。由于person类型嵌入了employee和student类型,因此它的所有字段和方法会自动被继承下来。同时,我们还可以直接访问person类型的字段和方法,例如:

```go
e := employee{person: person{name: "bob", age: 30, address: "shanghai"}, title: "manager", salary: 5000.0}
fmt.println(e.name) // 输出bob

s := student{person: person{name: "alice", age: 20, address: "beijing"}, string: "cs", float64: 3.8}
fmt.println(s.age) // 输出20
```

需要注意的是,如果匿名字段类型和定义的字段类型相同,那么访问该字段时需要指定完整的字段名,例如:

```go
type person struct {
name string
age int
}

type employee struct {
person
age int
}

e := employee{person: person{name: "bob", age: 30}, age: 40}
fmt.println(e.person.age) // 输出30
fmt.println(e.age) // 输出40
```

在这里,employee类型的age字段和person类型的age字段都是int类型,因此访问它们时需要指定完整的字段名。

本文来自投稿,不代表亲测学习网立场,如若转载,请注明出处:https://www.qince.net/golang-ajt9.html

郑重声明:

本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,不存在任何商业目的与商业用途。 若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。

我们不承担任何技术及捕鱼10元起上10元下的版权问题,且不对任何资源负法律责任。

如遇到资源无法下载,请点击这里失效报错。失效报错提交后记得查看你的留言信息,24小时之内反馈信息。

如有侵犯您的捕鱼10元起上10元下的版权,请给我们私信,我们会尽快处理,并诚恳的向你道歉!

(0)
上一篇 2023年5月2日 上午4:30
下一篇 2023年5月2日 上午4:30

猜你喜欢

网站地图