鉴于:
类型Savable接口{}类型Customer struct {} //满足’Savable’
func GetSaved(id string,s Savable){ //以某种方式从缓存中获取对象的引用 s = cachedObject // …
这有效我将它转换为字节并将其解组回到您的结构中。希望这可以帮助。 :) 包主
import ( "encoding/json" "fmt" ) type Savable interface{} type Customer struct { Name string } // satisfies 'Savable' func GetSaved(id string, s Savable) { // somehow get a reference to the object from cache cached := Customer{Name: "Bob"} byt, _ := json.Marshal(cached) _ = json.Unmarshal(byt, &s) } func main() { c := Customer{} GetSaved("bob", &c) fmt.Println(c) }
运行链接: https://play.golang.org/p/NrBRcRmXRVZ
您可以使用反射来设置传递的接口。 即使将struct引用作为接口传递,底层类型信息也不会丢失,我们可以使用反射。
package main import ( "fmt" "reflect" ) type Savable interface {} type Customer struct { Name string } func GetSaved(id string, s Savable) { cached := Customer{ Name: id } c1 := reflect.ValueOf(cached) reflect.ValueOf(s).Elem().Set(c1) } func main() { c := Customer{} fmt.Printf("Before: %v\n", c) GetSaved("bob", &c) fmt.Printf("After: %v\n", c) }
这是跑步 链接