gpt4 book ai didi

go - 获取外部/父结构名称

转载 作者:数据小太阳 更新时间:2023-10-29 03:31:25 26 4
gpt4 key购买 nike

我正面临一个 Golang 初学者问题,我不知道如何正确解决它。你能帮帮我吗?

信息:尽管这违背了 Go 的概念(不是试图成为一种 OOP 语言),但我仍然想讨论一些解决方案。

我想知道接收器/子结构中的外部/父结构名称。请查看以下代码( Playground :https://play.golang.org/p/h6dARJQwidS)

package main

import (
"fmt"
"reflect"
)

type Parent struct {
Id uint32
}

func (p *Parent) GetStructName() string {
return reflect.TypeOf(p).Elem().Name()
}


type Child struct {
Parent
}


func main() {
myChild := Child{}
fmt.Println(myChild.GetStructName()) // Gives "Parent" instead of "Child". How to get "Child"?
}

它显示“Parent”,尽管结构是“Child”。谁能告诉我如何获得正确的结构名称?我在另一个 stackoverflow 主题中看到了一个“正确”工作的“解决方案”(Go - get parent struct),但我认为这不是一个好的解决方案。

最佳答案

GetStructNameParent 而不是 Child 类型的方法,而且 Golang 没有继承,而是有结构嵌入(也有是接口(interface)嵌入),这有点像继承,但有一个关键的区别:

When we embed a type, the methods of that type become methods of the outer type, but when they are invoked the receiver of the method is the inner type, not the outer one.

这基本上意味着当您调用 GetStructName 时,该方法的接收者是 Parent(内部或嵌入类型),而不是 Child.

这从根本上不同于典型的类继承,它解释了您所看到的行为。

有据可查here .

关于go - 获取外部/父结构名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54277755/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com