首页 > 后端开发 > Golang > 正文

如何在 Golang 中实现不同类型的接口方法?

DDD
发布: 2024-11-24 05:04:13
原创
453 人浏览过

How can I implement interface methods for dissimilar types in Golang?

使用 Golang 接口实现不同类型的接口方法

在 Go 中,通常希望不同类型的数据结构实现相同的接口提供一组通用的行为。例如,考虑两个结构体:

type First struct {
    str string
}
type Second struct {
    str string
}
登录后复制

我们希望两个结构体都实现接口 A:

type A interface {
    PrintStr() // Print First.str or Second.str
}
登录后复制

但是,为每个结构体单独实现 PrintStr() 似乎是多余的:

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)
}
登录后复制

原因是 a 没有 str 字段。相反,一个更优雅的解决方案涉及创建一个基本类型并将其嵌入到我们的两个结构中:

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)
}
登录后复制

这里,WithString 作为基本类型,First 和 Second 嵌入它。这为我们提供了 PrintStr() 的集中实现。

用法示例:

a := First{
    WithString: WithString{
        str: "foo",
    },
}
登录后复制

请注意,我们可以通过嵌入 WithString 的实例来创建 First 的实例。这项技术使我们能够实现为实现同一接口的多种不同类型提供一个实现的目标。

以上是如何在 Golang 中实现不同类型的接口方法?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板