我正在尝试向type abc [][] interface{}
中插入值
我试过这个:insert := &abc{{0, {"abc", "def"}}}
这将抛出错误:Invalid composite literal type: interface{}
我也试过这个:insert, _ := json.Marshal([][]interface{}{{0, {"abc", "def"}}})
但这也会引发错误Invalid composite literal type: interface{}
我希望输出如下所示:[ [ 0, [ "abc", "def" ] ] ]
你能让我知道我哪里出错了,以及如何解决这个问题吗?
2条答案
按热度按时间6ljaweal1#
abc
的类型允许任何类型,但是你要放入的东西的类型需要定义。你没有定义{"abc", "def"}
的类型,你不能示例化接口常量(接口不告诉编译器任何关于字段的信息)。你可以有匿名结构体,但是它们仍然需要定义。让我们通过示例逐步了解您所拥有的:
创建包含零项的外部数组。
创建具有3个空内部数组的外部数组。
一个外部数组,包含一个内部数组,具有2个值:
0
和"abc"
。一个外部数组,包含一个内部数组,具有2个值:
0
and ... something?这是一个对象字面值,但没有显式类型,也没有语法正确的隐式类型(隐式类型需要interface{}
,但不能直接示例化),这是一个错误。现在您已经键入了有问题的结构。
匿名结构体也是一种丑陋但有效的方法。
似乎是最接近你想要的东西虽然。
规则是
interface{}
可以保存任何定义的东西,它不等同于C#的dynamic
对象。siv3szwd2#
您也可以使用“make”进行解析,例如:
类型abc [][]接口{}