gpt4 book ai didi

json - 在 Go 中为 map[string]interface{} 创建方法

转载 作者:IT王子 更新时间:2023-10-29 01:33:54 25 4
gpt4 key购买 nike

我已经定义了一个类型

type UnknownMapString map[string]interface{}

我也有这样的方法

func (m UnknownMapString) Foo() {
fmt.Println("test!")
}

我在运行时感到 panic :

interface conversion: interface is map[string]interface {}, not main.UnknownMapString

map[string]interface{} 从 JSON 输入中解码。

Playground 复制它 -> http://play.golang.org/p/kvw4dcZVNH

我认为您不能将接口(interface)作为方法的接收者,因此我们需要将断言(而不是转换?)键入命名类型并将该命名类型用作方法的接收者。请让我知道我做错了什么。谢谢!

最佳答案

val = val.(UnknownMapString)

这是一个 type assertion ,假设 named type UnknownMapString 与未命名类型 map[string]interface{} 相同。
type identity告诉我们:

A named and an unnamed type are always different.

但是:你can assign map[string]interface{}UnknownMapString 因为

x is assignable to a variable of type T ("x is assignable to T") when:

x's type V and T have identical underlying types and at least one of V or T is not a named type.

这会起作用:

var val2 UnknownMapString  = val.(map[string]interface{})
val2.Foo()

val2 不是未命名类型,val2val.(map[string]interface{}) 底层类型是相同的.

play.golang.org

输出:

test!

关于json - 在 Go 中为 map[string]interface{} 创建方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25091806/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com