gpt4 book ai didi

go - 如何使用接口(interface)中的方法修改结构中的字段?

转载 作者:IT王子 更新时间:2023-10-29 00:40:40 26 4
gpt4 key购买 nike

我正在编写一个小项目来学习一些 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com