通过引用持有者对象传递值

时间:2017-03-09 22:21:48

标签: go

以下代码的Holder指定为interface类型。

可以对Holder对象进行哪些更改,以便它接收任何具有引用类型的类型,因此如果对value对象进行任何更改,它将反映在main对象上。

type Holder struct {
    Body interface{}
}

type Value struct {
    Input int
    Result int
}

func main() {
    value := Value{Input: 5}
    holder := Holder{Body: value}

    fmt.Println(value) // {5 0}
    modify(holder)
    fmt.Println(value) // {5 0} should display {5 10}
}

func modify(holder Holder) {
    var value Value = holder.Body.(Value)
    value.Result = 2 * value.Input
}

Go Playground

1 个答案:

答案 0 :(得分:1)

package main

import "fmt"

type Holder struct {
    Body interface{}
}

type Value struct {
    Input  int
    Result int
}

func main() {
    value := Value{Input: 5}
    holder := Holder{Body: &value}

    fmt.Println(value) // {5 0}
    modify(&holder)
    fmt.Println(value) // {5 0} should display {5 10}
}

func modify(holder *Holder) {
    var value *Value = holder.Body.(*Value)
    value.Result = 2 * value.Input
}

https://play.golang.org/p/hG8cH4UBPc