我正在编写一个小项目来学习一些 Google Go,但经过几个小时的编码后,我发现有一个问题我自己无法解决,在互联网上也找不到。我的项目将包含很少的算法,这些算法对实现一个接口(interface)的变量进行操作。所有类型的共同点是我可以对它们进行评级并通过该评级进行比较,因此接口(interface)中定义的方法之一应该是 SetRating(x int) 问题是,因为 Go 正在复制值 - 我无法修改任何字段在里面。这是例子
http://play.golang.org/p/4nyxulwzNo
试图找出人们在这个约定中使用变通方法: http://play.golang.org/p/PUuOBZ4uM-
但我认为这个解决方案很丑陋,因为我需要在调用 func(转换类型)时知道我的接口(interface)的所有实现,并且真的想避免这种情况并编写一些通用代码来获得实现我的接口(interface)的任何类型,只知道每个实现都有方法 setRating(x int) 和 getRating(x int)。
有什么提示吗? (抱歉英文不好和问题描述,还在学习中。)
最佳答案
您需要使用指针,否则您不会修改底层结构: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()
}
关于go - 如何使用接口(interface)中的方法修改结构中的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24068779/