如何更改接口的参数?

时间:2017-11-30 00:18:46

标签: pointers go contravariance

我用来处理数据库的库提供了方便的界面来保存/加载数据而无需投射

Put(c context.Context, key *Key, src interface{}) (*Key, error)
Get(c context.Context, key *Key, dst interface{}) error

但是,我无法理解GET方法可能如何工作。我试图用最简单的片段复制行为,但它没有用。

import "fmt"

type MyType struct {
    inside string
}

func setVal(dst *MyType) {
    someVal := MyType{"new"}
    *dst = someVal
}

func setValGen(dst interface{}) {
    someVal := MyType{"new"}
    dst = someVal
}


func main() {
    typeDstA := MyType{"old"}
    setVal(&typeDstA)
    fmt.Println(typeDstA)     //changed to new

    typeDstB := MyType{"old"}
    setValGen(&typeDstB)
    fmt.Println(typeDstB)     //remains old
}

他们如何使Get函数接受interface{}并更改指针目的地?

1 个答案:

答案 0 :(得分:1)

他们很可能正在使用反射。

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

setImageResource