go - 如何在golang中结合接口(interface)和结构?

标签 go inheritance interface encapsulation

package main


type A interface {
    GetName() string
}

type B struct {
    A
}

func (this *B) Func1() {
    this.GetName()
}

type C struct {
    B
}

func (this *C) GetName() string {
    return "hello"
}


func main() {
    var c = new(C)
    c.GetName()
    c.Func1()
}

https://play.golang.org/p/1X7yiQeie8F

我的问题:
c.Func1() 将导致:
panic :运行时错误:无效的内存地址或零指针取消引用

我的情况是:
用户需要实现A的一些基本接口(interface),然后用户才能使用B的成员函数。我希望复杂的代码封装到B的成员函数中,用户只需要提供基本信息。
如何实现这个目标?

最佳答案

我看到你的代码永远循环 GetName重复调用

你可以看到我的代码

package main

import "fmt"

type A interface {
    GetName() string
}

type B struct {
    A
}

func (this *B) Func1() {

}

type C struct {
    B
}

func (this *C) GetName() string {
    return "hello"
}

func main() {
    var c = new(C)
    fmt.Println(c.GetName())
}

https://play.golang.org/p/PaFd-BS9sdP

关于go - 如何在golang中结合接口(interface)和结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59211993/

相关文章:

java - Hibernate 使用 @OneToMany 或 @ManyToMany 定位未映射的类,其中集合指向没有表的父类(super class)

java - 界面中需要澄清

Java 接口(interface)反射替代方案

if-statement - "If with a short statement"有什么好处

list - Python 的 list.pop() 方法的 Go 习语是什么?

c# - 函数返回类型 A,使其成为类型 B(继承自 A)

oop - Lua类继承问题

typescript :从通用接口(interface)中省略属性

inheritance - 通过 Go 中的接口(interface)修改结构成员

go - 有没有一种方法可以使用泛型确保传递的值具有某些字段?