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

时间:2011-06-22 06:04:19

标签: 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
}

从这里我想要一个包含方法toTypetoRaw

的界面
type DB interface{
        toRaw() *string
        toType(*string) interface{}
}

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

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

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

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:4)

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

  1. 更改您的代码,以便方法直接在非指针类型Char上运行(这也将自动适用于*Char
  2. 仅在您需要与*Char类型
  3. 兼容的内容时才使用DB