【发布时间】:2019-01-20 15:06:15
【问题描述】:
我遇到了一个 Golang 初学者问题,我不知道如何正确解决它。你能帮帮我吗?
信息:尽管这违背了 Go 的概念(不是试图成为一种 OOP 语言),但我还是想讨论一些解决方案。
我想知道接收器/子结构中的外部/父结构名称。请看下面的代码(操场: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"?
}
虽然结构是“子”,但它显示“父”。谁能告诉我如何获得正确的结构名称?我在另一个 stackoverflow 主题中看到了一个“正确”工作的“解决方案”(Go - get parent struct),但我认为这不是一个好的解决方案。
【问题讨论】:
-
Go 没有继承。试图假装它确实只会让事情变得困难。改写您的解决方案,改用可用的组合方法。
-
@JimB 好的。我会深入研究它。从你的角度来看:组合可以解决这个问题还是我需要完全重新考虑结构?
-
您正在尝试解决继承问题。我确信有其他方法可以解决您的问题(有很多非 OOP 语言),但您只是在描述您提出的解决方案,而不是实际的问题陈述。
标签: go