在go中,如何在*Type调用方法时创建接口?

cc *_*ung 5 types go

试图创建一个接口,但方法有*Type,而不是Type接收器

APOLOGIZE:困了,误读错误信息.以为我在创建数据库界面时遇到了阻碍,实际上我误用了它.对不起...将来会更加小心!

type Char string

func (*Char) toType(v *string) interface{} {
        if v == nil {
                return (*Char)(nil)
        }
        var s string = *v
        ch := Char(s[0])
        return &ch
}
func (v *Char) toRaw() *string {
        if v == nil {
                return (*string)(nil)
        }
        s := *((*string)(v))
        return &s
}

从这里我想要一个包含方法toType和的接口toRaw

type DB interface{
        toRaw() *string
        toType(*string) interface{}
}

由于函数接收器是指针,因此不起作用.我这样说是因为当我尝试使用它时,我得到了error.k

    Char does not implement DB (toRaw method requires pointer receiver)

有没有办法从toType和创建一个接口toRaw,或者我需要备份并让接收器本身是类型而不是指向类型的指针?

Asg*_*eir 5

如果为指针类型定义接口方法,则必须将指针传递给期望接口的方法/函数.

  • "使用接口,你应该总是传递指针"这不是真的.非指针类型可以通过实现必要的方法来符合接口,就像指针类型一样容易. (2认同)

new*_*cct 3

我不明白你的问题是什么。是的,您编写的方式*Char符合界面,DBChar不符合界面。你可以

  1. 更改您的代码,以便方法Char直接对非指针类型进行操作(这也将自动工作*Char
  2. *Char仅当您需要与类型兼容的东西时才使用DB