ans*_*onl 2 json assert interface go unmarshalling
我已经定义了一个类型
type UnknownMapString map[string]interface{}
Run Code Online (Sandbox Code Playgroud)
我也有这样的方法
func (m UnknownMapString) Foo() {
fmt.Println("test!")
}
Run Code Online (Sandbox Code Playgroud)
跑步时我感到恐慌:
接口转换:接口是map [string] interface {},而不是main.UnknownMapString
map [string] interface {}从JSON输入中解组.
游乐场复制它 - > http://play.golang.org/p/kvw4dcZVNH
我认为你不能将接口作为方法的接收者,所以我们需要键入assert(not convert?)到Named Type,并使用Named Type作为方法的接收者.请让我知道我做错了什么.谢谢!
val = val.(UnknownMapString)
Run Code Online (Sandbox Code Playgroud)
这是一个类型断言,它假定命名类型 UnknownMapString与未命名类型相同map[string]interface{}.
和类型的身份告诉我们:
命名和未命名类型总是不同的.
但是:你可以指定一map[string]interface{}到UnknownMapString,因为
x在以下情况下,可分配给类型的变量T("x可分配给T"):
x的类型V和T具有相同的底层类型,并且至少有一个V或T不是命名类型.
这可行:
var val2 UnknownMapString = val.(map[string]interface{})
val2.Foo()
Run Code Online (Sandbox Code Playgroud)
val2不是未命名的类型,val2并且val.(map[string]interface{})底层类型和底层类型都是相同的.
输出:
test!
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1442 次 |
| 最近记录: |