go - 我通常可以为 Golang 结构指定方法吗?

标签 go go-interface

我一直在阅读 the go-lang interface doc ;但是我仍然不清楚是否有可能实现我想要的

type A struct {
    ID SomeSpecialType
}

type B struct {
    ID SomeSpecialType
}

func (a A) IDHexString() string {
    return a.ID.Hex()
}

func (b B) IDHexString() string {
    return b.ID.Hex()
}

这会很好用;但是我更喜欢一些惯用的方法来将通用方法应用于两种类型并且只定义一次。类似的东西:

type A struct {
    ID SomeSpecialType
}

type B struct {
    ID SomeSpecialType
}

func (SPECIFY_TYPE_A_AND_B_HERE) IDHexString() string {
    return A_or_B.ID.Hex()
}

最佳答案

本质上你不能像你习惯的那样,但你可以做的是匿名继承一个 super 结构(抱歉,这不是合法的词:P):

type A struct {

}

type B struct {
    A // Anonymous
}

func (A a) IDHexString() string {

}

B 现在将能够实现 IDHexString 方法。

这就像在许多其他语言中一样:

class B extends A { ... }

关于go - 我通常可以为 Golang 结构指定方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26107358/

相关文章:

go - 如何在 go 中实现可比较的接口(interface)?

pointers - 指针接收者 vs 值接收者

go - 来自接口(interface)值的底层指针类型

testing - 如何用 Go 测试这个简单的方法?

json - json解析后如何列出未知字段

go - 如何将 JSON 对象验证为无序列表?

go - 如何在go模块中使用生成的protobuf包?

go - 如何检查一个go channel是否真的在等待数据?

go - GoLang 接口(interface)名称及其方法数的规则

go - 类型转换接口(interface) slice