php小编小新在这里给大家介绍一种将值插入"type abc interface{}"的方法。在php中,我们经常会使用接口(interface)来定义一组规范。有时候,我们会遇到需要在接口中定义一个默认值的情况。这时候,我们可以使用trait(特性)来实现这个功能。trait是一种可以被多个类共享的代码片段,通过使用trait,我们可以在接口中定义默认值并在类中使用。这种方法简单易懂,让我们来看看具体的实现步骤吧!
问题内容
我正在尝试将值插入 type abc [][] 接口{}
我尝试过这个:
insert := &abc{{0, {"abc", "def"}}}
这会引发错误:无效的复合文字类型:接口{}
我也尝试过这个:
insert, _ := json.Marshal([][]interface{}{{0, {"abc", "def"}}})
但这也会引发错误 Invalid Composite Literal Type: interface{}
我希望输出如下:
[ [ 0, [ "abc", "def" ] ]
你能让我知道我哪里出了问题以及如何解决这个问题吗?
解决方法
abc
的类型允许任何类型,但是需要定义您放入其中的内容的类型。您没有定义 {"abc", "def"}
的类型,并且无法实例化接口文字(接口不会告诉编译器有关字段的任何信息)。您可以拥有匿名结构,但仍然需要定义它们。
让我们通过示例逐步了解您所拥有的内容:
x := &abc{}
登录后复制
创建具有零条目的外部数组。
x := &abc{{}, {}, {}}
登录后复制
使用 3 个空的内部数组创建外部数组。
x := &abc{{0, "abc"}}
登录后复制
一个外部数组,带有一个内部数组,有 2 个值:0
和 "abc"
。
x := &abc{{0, {"abc", "def"}}
登录后复制
一个外部数组,带有一个内部数组,有 2 个值:0
和......什么?这是一个对象字面量,但没有显式类型,也没有语法上正确的隐式类型(隐式地期望 interface{}
,无法直接实例化),这是一个错误。
type pairofstrings struct {
a string
b string
}
x := &abc{{0, pairofstrings{"abc", "def"}}}
登录后复制
您现在已经输入了有问题的结构。
x := &abc{{0, struct {
a string
b string
}{"abc", "def"}}}
登录后复制
匿名结构也是一种丑陋但有效的方法。
x := &abc{{0, []string{"abc", "def"}}}
登录后复制
似乎是最接近你想要的东西。
规则是 interface{}
可以保存任何定义的东西。它不等同于 c# 的 dynamic
对象。
以上就是将值插入“type abc interface{}”的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!