假设我有两个结构:
type Pet {
Name string
}
type PetTwo {
Name string
}
现在假设我将 Pet 转换为接口。假设我用来执行此操作的包不了解 Pet 类型,如何从界面中键入 Assert PetTwo?
var ctx context.Context
pet := Pet{ Name : "Foo" }
ctx = context.WithValue(ctx, "pet", pet)
petTwo := ctx.Value("pet").(PetTwo) // panics
fmt.Println(petTwo.Name) // prints "Foo"
有没有一种方法可以在没有类型断言的情况下访问 pet 的内容?
我尝试过将结构相互嵌入、类型断言、未命名类型的类型断言等等。
主要目标是能够Pet在不知道类型的情况下访问包的内容Pet。
实现该目标的一个丑陋的 hack 是从 json 进行编组和解组:
jsonData, _ := json.Marshal(ctx.Value("pet"))
var petTwo PetTwo
json.Unmarshal(jsonData, &petTwo)
fmt.Println(petTwo.Name) // prints "Foo"
喵喔喔
相关分类