Pointers 如何更改作为接口的参数?

Pointers 如何更改作为接口的参数?,pointers,go,contravariance,Pointers,Go,Contravariance,我用来处理DB的库提供了方便的接口来保存/加载数据,而无需强制转换 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

我用来处理DB的库提供了方便的接口来保存/加载数据,而无需强制转换

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{}
并更改指针目标

他们很可能正在使用反射


相关/可能重复:。
someVal := MyType{"new"}
v := reflect.ValueOf(dst).Elem()
if v.CanSet() {
    v.Set(reflect.ValueOf(someVal))
}