struct initialize以满足没有显式方法定义的接口

时间:2014-08-13 17:28:47

标签: struct interface go

给出下面的伪代码:

type(
    MyStruct struct {
        AFunction  func(string) ([]byte, error)
    }

    MyInterface interface {
        AFunction(string) ([]byte, error)
    }
)

func NeedThis(s string) ([]byte, error){
    //relevant function stuff
}

m := &MyStruct{AFunction: NeedThis}

问题出现了m不满足MyInterface接口;我可以在某种程度上看到为什么会如此。有没有办法将函数附加到结构,使得构造的结构满足接口而不实际构建结构上的定义方法?我对此有一些阴暗/错误的推理,也许有助于为我澄清这一点或显示更好的方法来推理这种情况。

2 个答案:

答案 0 :(得分:0)

你能不能在AFunction上定义一个调度到存储的MyStruct函数指针的方法AFunction?如果你有很多这样的东西,这是不理想的,但我认为它能做到这一点?

即。

之类的东西
func (s MyStruct) AFunction(str string) ([]byte, error) {
    return s.AFunction(str)
}

编辑:上面的代码可能会导致编译器出错,因为s.AFunction是不明确的,所以你可能不得不给它们(方法和函数指针)不同的名字,但它应该给出正确的想法。

答案 1 :(得分:0)

您可以将其包装在另一个实现接口的结构中:

http://play.golang.org/p/AgnYAWBdUp

package main

import "fmt"

type (
    MyStruct struct {
        AFunction func(string) ([]byte, error)
    }

    MyInterface interface {
        AFunction(string) ([]byte, error)
    }
)

func NeedThis(s string) ([]byte, error) {
    //relevant function stuff
    return nil, nil
}

type Proxy struct {
    *MyStruct
}

func (x *Proxy) AFunction(s string) ([]byte, error) {
    return x.MyStruct.AFunction(s)
}

func main() {

    m := &MyStruct{AFunction: NeedThis}
    p := &Proxy{m}
    _, ok := MyInterface(p).(MyInterface)
    fmt.Println(ok)
}