我正在写一个小项目来学习一些Google Go,但经过几个小时的编码后,我发现有一个问题我无法自己解决,也没有在互联网上找到。我的项目将包含很少的算法来操作实现一个接口的变量。所有类型的共同点是我可以对它们进行评级并按此评级进行比较,因此接口中定义的方法之一应该是SetRating(x int),问题是,因为Go是复制值 - 我无法修改任何字段在里面。这是一个例子
http://play.golang.org/p/4nyxulwzNo
试图找出人们在此约定中使用变通办法: http://play.golang.org/p/PUuOBZ4uM-
但是我觉得这个解决方案很难看,因为我需要知道我的接口在调用func(转换类型)中的所有实现,并且真的想避免这种情况并编写一些通用代码,可以获得实现我的接口的任何类型,只知道每个实现都有方法setRating(x int)和getRating(x int)。
任何提示? (对不起英语和问题描述不好,还在学习。)
答案 0 :(得分:6)
您需要使用指针,否则您不会修改基础结构:http://play.golang.org/p/l3X4gTSAnF
package main
type Setter interface {
Set(x int)
Print()
}
type S1 struct {
X int
}
func (this *S1) Set(x int) {
this.X = x
println("Setting value")
}
func (this *S1) Print(){
println(this.X)
}
func main() {
var s1 Setter
s1 = &S1{}
s1.Set(5)
s1.Print()
}