通过go中的接口设置值

时间:2019-05-18 09:36:45

标签: pointers go methods interface

在下面的示例中,我想通过接口过程调用setvalue()对象的b

我想使用一个接口,因为我需要在列表中插入不同种类的对象(可能很大),每个对象都遵循一个通用接口。

但是编译器抱怨以下错误:

  

./ tests.go:27:6:无法在分配中将newbox(3)(类型框)用作类型容器:       框未实现容器(setValue方法具有指针接收器)

可能我必须以不同的方式定义接口,但是如何?

我知道我可以在函数中转换setvalue过程,返回更新后的框,但是由于对象可能非常大,并且该过程将被调用多次,因此我想通过指针传递对象。

真的没有办法定义通过指针接收调用结构的接口方法吗?

package main

import "fmt"

type container interface {
  setValue (val int)
}

//--------------------------------------
// box is a kind of container

type box struct {
      value int
}

func newbox (x int) box {
    return box {x}
}

func (cnt *box) setValue(val int) {
    (*cnt).value = val
}


// -----------------------------------------------

func main() {
    var b container = newbox(3)  // HERE IS THE ERROR
    fmt.Printf("%v\n",b)
    b.setValue(5)
    fmt.Printf("%v\n",b)
}

0 个答案:

没有答案