golang结构体继承(Golang 覆盖结构体)

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

郑重声明:

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

我们不承担任何技术及版权问题,且不对任何资源负法律责任。

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

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

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

猜你喜欢