是否可以为空接口键入别名,然后向该别名添加函数?

Chr*_*ris 1 go

在 Go 中,是否可以在空接口中输入别名,然后向该别名添加函数?

我想做类似的事情:

type DbJSON interface{}
func (src *DbJSON) Value() (driver.Value, error) {
    return json.Marshal(src)
}
Run Code Online (Sandbox Code Playgroud)

icz*_*cza 6

不,你不能这样做。方法实现属于具体类型。该规范禁止在接口上声明方法或指向接口和指针类型的指针。

规范:方法声明:

接收器是通过方法名称前面的额外参数部分指定的。该参数部分必须声明一个非可变参数,即接收器。它的类型必须是已定义类型T或指向已定义类型的指针TT称为接收器基类型接收器基类型不能是指针或接口类型,它必须与方法定义在同一个包中。