Go进阶嵌套struct的方法
目录
(1)第一种方式
当内部struct嵌套进外部struct时,内部struct的方法也会被嵌套,也就是说外部struct拥有了内部struct的方法。
-
package main
-
-
import (
-
"fmt"
-
)
-
-
type person struct{}
-
-
func (p *person) speak() {
-
fmt.Println("speak in person")
-
}
-
-
// Admin exported
-
type Admin struct {
-
person
-
a int
-
}
-
-
func main() {
-
a := new(Admin)
-
// 直接调用内部struct的方法
-
a.speak()
-
// 间接调用内部stuct的方法
-
a.person.speak()
-
}
当person被嵌套到Admin中后,Admin就拥有了person中的属性,包括方法speak()。所以,a.speak()
和a.person.speak()
都是可行的。
如果Admin也有一个名为speak()的方法,那么Admin的speak()方法将掩盖内部struct的person的speak()方法。所以a.speak()
调用的将是属于Admin的speak(),而a.preson.speak()
将调用的是person的speak()。
示例演示:
-
package main
-
-
import (
-
"fmt"
-
)
-
-
type person struct{}
-
-
func (p *person) speak() {
-
fmt.Println("speak in person")
-
}
-
-
// Admin exported
-
type Admin struct {
-
person
-
a int
-
}
-
-
func (a *Admin) speak() {
-
fmt.Println("speak in Admin")
-
}
-
-
func main() {
-
a := new(Admin)
-
// 直接调用内部struct的方法
-
a.speak()
-
// 间接调用内部stuct的方法
-
a.person.speak()
-
}
(2)第二种方式
除了可以通过嵌套的方式获取内部struct的方法,还有一种方式可以获取另一个struct中的方法:将另一个struct作为外部struct的一个命名字段。
-
type person struct {
-
name string
-
age int
-
}
-
type Admin struct {
-
people *person
-
salary int
-
}
现在Admin除了自己的salary属性,还指向一个person。这和struct嵌套不一样,struct嵌套是直接外部包含内部,而这种组合方式是一个struct指向另一个struct,从Admin可以追踪到其指向的person。所以,它更像是链表。
例如,person是Admin type中的一个字段,person有方法speak()。
-
package main
-
-
import (
-
"fmt"
-
)
-
-
type person struct {
-
name string
-
age int
-
}
-
-
type Admin struct {
-
people *person
-
salary int
-
}
-
-
func main() {
-
// 构建Admin实例
-
a := new(Admin)
-
a.salary = 2300
-
a.people = new(person)
-
a.people.name = "longshuai"
-
a.people.age = 23
-
// 或a := &Admin{&person{"longshuai",23},2300}
-
-
// 调用属于person的方法speak()
-
a.people.speak()
-
}
-
-
func (p *person) speak() {
-
fmt.Println("speak in person")
-
}
或者,定义一个属于Admin的方法,在此方法中应用person的方法:
-
func (a *Admin) sing(){
-
a.people.speak()
-
}
然后只需调用a.sing()
就可以隐藏person的方法。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgbhheh
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01