登录
首页 >  Golang >  Go问答

获取外部/父结构名称

来源:stackoverflow

时间:2024-04-01 11:21:40 292浏览 收藏

珍惜时间,勤奋学习!今天给大家带来《获取外部/父结构名称》,正文内容主要涉及到等等,如果你正在学习Golang,或者是对Golang有疑问,欢迎大家关注我!后面我会持续更新相关内容的,希望都能帮到正在学习的大家!

问题内容

我面临一个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"?
}

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


解决方案


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

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

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

有详细记录 here

本篇关于《获取外部/父结构名称》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>