两种不同的类型如何使用接口在golang中实现相同的方法?

叶卡捷琳娜:

说我有两个结构:

type First struct {
    str string
}
type Second struct {
    str string
}

我希望他们都实现接口A:

type A interface {
    PrintStr() //print First.str or Second.str
}

像这样对First和Second结构都实现似乎是多余的:

func (f First) PrintStr() {
    fmt.Print(f.str)
}

func (s Second) PrintStr() {
    fmt.Print(s.str)
}

有没有一种方法可以为实现接口A的所有结构提供一个实现?像这样的东西,但似乎不起作用:

func (a A) PrintStr() {
    fmt.Print(a.str)
}

谢谢!

河马:

不,您不能,但是您可以创建一个基本类型,然后将其嵌入到您的2结构中,因此只需要一个基本类型的实现即可:

type WithString struct {
    str string
}

type First struct {
    WithString
}

type Second struct {
    WithString
}

type A interface {
    PrintStr() //print First.str or Second.str
}

func (w WithString) PrintStr() {
    fmt.Print(w.str)
}

用法:

a := First{
    WithString: WithString{
        str: "foo",
    },
}

操场上的完整例子

嵌入文件

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何制作一个实现两种通用类型的接口的Java类?

与两种不同的实现接口

如何在Golang中使用与地图中的键相同的数据来区分两种自定义结构类型?

在Golang中实现相同接口的不同结构

使用两种不同(但相同)的类型时,类型声明失败

春季-具有相同URL但产生的内容类型不同的两种不同的POST方法

如何使用相同的方法签名实现两个不同的接口

如何使用两种不同的实现模拟接口

在实现ConsumerSeekAware接口时,如何使“这两种方法具有相同的擦除作用,但都不能覆盖另一种方法”的警告静音?

如何使用返回类型实现接口方法是Golang中的接口

两种不同的类型类可以具有相同的方法名称吗?

使用两种不同的方法两次读取相同的输入

在Qt中以两种不同的布局使用相同的小部件

使用Kotlin中的函数式编程以相同的代码处理两种不同类型的列表

两种不同“策略”的设计模式,它们没有实现相同的接口

如何使用两种不同的色带?

如何为两种不同的方法设计Jax-RS,它们具有相同的路径并产生/使用相同的媒体类型?

如何使用用户输入比较列表中的两种不同类型?

如何使用Restful Web服务对两种不同的操作使用两种Web方法?

在目录中,如何在相同的“级别”上使用两种不同的标题格式?

如何使用DRY原理创建实现相同方法的两种类型的对象

如何使用同一按钮实现两种不同的行为

在 C# 中,如何使用具有两种不同类型的泛型?

Dagger2 如何@Provide 一种具有两种不同实现的类型

相同测试的两种不同设置方法

在控制器 Mockito Junit 测试用例中模拟接口的两种不同实现

如何对两种不同的表单使用相同的字段?

如何同时使用两种不同类型的存储

如何设计一种可以处理两种不同对象类型的方法