不能将类型接口{}用作分配中的类型人:需要类型声明

马克西姆·叶夫雷莫夫(Maxim Yefremov)

我尝试转换interface{}为struct person...

package main

import (
    "encoding/json"
    "fmt"
)

func FromJson(jsonSrc string) interface{} {
    var obj interface{}
    json.Unmarshal([]byte(jsonSrc), &obj)

    return obj
}

func main() {

    type person struct {
        Name string
        Age  int
    }
    json := `{"Name": "James", "Age": 22}`

    actualInterface := FromJson(json)

    fmt.Println("actualInterface")
    fmt.Println(actualInterface)

    var actual person

    actual = actualInterface // error fires here -------------------------------

    // -------------- type assertion always gives me 'not ok'
    // actual, ok := actualInterface.(person)
    // if ok {

    //  fmt.Println("actual")
    //  fmt.Println(actual)
    // } else {
    //  fmt.Println("not ok")
    //  fmt.Println(actual)
    // }
}

...但是出现错误:

cannot use type interface {} as type person in assignment: need type assertion

为了解决此错误,我尝试使用类型断言,actual, ok := actualInterface.(person)但始终使用not ok

游乐场链接

用户名

解决此问题的通常方法是将指向输出值的指针传递给解码帮助器函数。这样可以避免在应用程序代码中进行类型声明。

package main

import (
    "encoding/json"
    "fmt"
)

func FromJson(jsonSrc string, v interface{}) error {
    return json.Unmarshal([]byte(jsonSrc), v)

}

func main() {
    type person struct {
        Name string
        Age  int
    }
    json := `{"Name": "James", "Age": 22}`

    var p person
    err := FromJson(json, &p)

    fmt.Println(err)
    fmt.Println(p)
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

不能将temp(类型接口{})用作equalStringArray的参数中的类型[] string:需要类型断言

来自分类Dev

为什么我不能将类型的值分配给实现带有接收者类型指针的方法的接口?

来自分类Dev

为什么不能将String用作类型类?

来自分类Dev

Laravel不能将Eloquent / Builder类型的对象用作数组

来自分类Dev

致命错误:不能将MongoCursor类型的对象用作数组

来自分类Dev

PHP:不能将stdClass类型的对象用作数组

来自分类Dev

致命错误:不能将DOMNodeList类型的对象用作数组

来自分类Dev

Laravel不能将Eloquent / Builder类型的对象用作数组

来自分类Dev

为什么不能将项目强制转换为泛型类型-泛型类型是接口,并且在检查项目是否实现了所述接口之后?

来自分类Dev

类型类型不能是Do的超级接口。超级接口必须是接口

来自分类Dev

不能将Nil分配给AVCaptureDeviceInput类型

来自分类Dev

PHP类型属性批量声明不能将null分配给可为空的字段

来自分类Dev

为什么不能将“类型”用作嵌入在结构中的枚举的名称?

来自分类Dev

使用make函数检测类型模型数据时,“不能将T用作化类型参数”

来自分类Dev

SlidingActivity类型不能是MainActivity的超级接口;超级接口必须是接口

来自分类Dev

不能将ViewController类型的值分配给UITextFieldDelegate类型的值?

来自分类Dev

为什么不能将原始类型分配给参数化类型?(Java)

来自分类Dev

不能将void类型的函数分配给Observable <any>类型

来自分类Dev

为什么不能将类型SFC <AnchorProps>分配给类型SFC <{}>?

来自分类Dev

类型'HTMLCanvasElement |的参数 不能将'null'分配给类型的参数

来自分类Dev

ts猫鼬不能将'string'类型分配给'Condition <..>'类型

来自分类Dev

分配时在括号中声明类型

来自分类Dev

EF Core抛出“'this'类型不能是接口本身”。

来自分类Dev

不能将空值分配给十进制类型的成员,该类型是非空值类型

来自分类Dev

抽象接口不能用作数组中的类型 - 缺少属性

来自分类Dev

“不能将方法main声明为静态;只能以静态或顶级类型声明静态方法”

来自分类Dev

“不能将方法main声明为静态;只能以静态或顶级类型声明静态方法”

来自分类Dev

错误:类型不兼容:不能将double转换为JTextField

来自分类Dev

不能将Type'object'用于Type-GraphQL字段类型

Related 相关文章

  1. 1

    不能将temp(类型接口{})用作equalStringArray的参数中的类型[] string:需要类型断言

  2. 2

    为什么我不能将类型的值分配给实现带有接收者类型指针的方法的接口?

  3. 3

    为什么不能将String用作类型类?

  4. 4

    Laravel不能将Eloquent / Builder类型的对象用作数组

  5. 5

    致命错误:不能将MongoCursor类型的对象用作数组

  6. 6

    PHP:不能将stdClass类型的对象用作数组

  7. 7

    致命错误:不能将DOMNodeList类型的对象用作数组

  8. 8

    Laravel不能将Eloquent / Builder类型的对象用作数组

  9. 9

    为什么不能将项目强制转换为泛型类型-泛型类型是接口,并且在检查项目是否实现了所述接口之后?

  10. 10

    类型类型不能是Do的超级接口。超级接口必须是接口

  11. 11

    不能将Nil分配给AVCaptureDeviceInput类型

  12. 12

    PHP类型属性批量声明不能将null分配给可为空的字段

  13. 13

    为什么不能将“类型”用作嵌入在结构中的枚举的名称?

  14. 14

    使用make函数检测类型模型数据时,“不能将T用作化类型参数”

  15. 15

    SlidingActivity类型不能是MainActivity的超级接口;超级接口必须是接口

  16. 16

    不能将ViewController类型的值分配给UITextFieldDelegate类型的值?

  17. 17

    为什么不能将原始类型分配给参数化类型?(Java)

  18. 18

    不能将void类型的函数分配给Observable <any>类型

  19. 19

    为什么不能将类型SFC <AnchorProps>分配给类型SFC <{}>?

  20. 20

    类型'HTMLCanvasElement |的参数 不能将'null'分配给类型的参数

  21. 21

    ts猫鼬不能将'string'类型分配给'Condition <..>'类型

  22. 22

    分配时在括号中声明类型

  23. 23

    EF Core抛出“'this'类型不能是接口本身”。

  24. 24

    不能将空值分配给十进制类型的成员,该类型是非空值类型

  25. 25

    抽象接口不能用作数组中的类型 - 缺少属性

  26. 26

    “不能将方法main声明为静态;只能以静态或顶级类型声明静态方法”

  27. 27

    “不能将方法main声明为静态;只能以静态或顶级类型声明静态方法”

  28. 28

    错误:类型不兼容:不能将double转换为JTextField

  29. 29

    不能将Type'object'用于Type-GraphQL字段类型

热门标签

归档