![](/img/trans.png)
[英]How to change value of empty interface that pass as struct reference in golang?
[英]How to pass interface of struct type by reference in golang?
我需要通过引用传递结构类型的接口,如下所示。 因为,我不能使用接口的指针来构造类型变量,我应该如何更改下面的代码来将te
值修改为10
?
package main
import (
"fmt"
)
func another(te *interface{}) {
*te = check{Val: 10}
}
func some(te *interface{}) {
*te = check{Val: 20}
another(te)
}
type check struct {
Val int
}
func main() {
a := check{Val: 100}
p := &a
fmt.Println(*p)
some(p)
fmt.Println(*p)
}
谢谢!
PS我读过将指针传递给接口不是一个很好的做法。 请让我知道有什么更好的方法来处理它
所以你正在使用一个接口,你需要某种保证,你可以设置结构成员的值? 听起来您应该将该保证作为界面的一部分,例如:
type Settable interface {
SetVal(val int)
}
func (c *check) SetVal(val int) {
c.Val = val
}
func some(te Settable) {
te.SetVal(20)
}
type check struct {
Val int
}
func main() {
a := check{Val: 100}
p := &a
some(p)
fmt.Println(*p)
}
类似于下面的东西应该可以工作
func some(te interface{}) {
switch te.(type) {
case *check:
*te.(*check) = check{Val: 20}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.