dongzangchui2072 2014-12-12 04:48
浏览 60
已采纳

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

I try to convert interface{} to 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)
    // }
}

... But got error:

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

To solve this error I tried to use type assertion actual, ok := actualInterface.(person) but always got not ok.

Playground link

  • 写回答

2条回答 默认 最新

  • douyao7390 2014-12-12 06:34
    关注

    The usual way to handle this is to pass a pointer to the output value to your decoding helper function. This avoids type assertions in your application code.

    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)
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥20 Python安装cvxpy库出问题
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥15 python天天向上类似问题,但没有清零
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题