在下面的示例中,我想通过接口过程调用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)
}