繁体   English   中英

如何在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM