JSON封送丢失结构引用

  • 本文关键字:结构 引用 JSON go
  • 更新时间 :
  • 英文 :


我正在研究一个关于编组的示例,并决定巧妙地使用它。我希望可以传递一个类似于json.Unmarshall函数的通用接口引用,并通过输入而不是重复相同的代码来处理我的其他测试用例(是的,我来自Java(。相反,我得到了一个映射而不是一个结构。我似乎也没有办法向下暗示这种"类型"的结构是什么。
问题:

  1. 我怎样才能取回合适的结构类型
  2. 采用这种实用方法是否合理

代码:
    //test 1 - simple dto
    var country models.Country
    var outCountry, errorCountry = attemptParse("Simple DTO", "./json/country.json", country)
    fmt.Println("Return - ", outCountry, " - ", errorCountry)
...
func attemptParse(test string, dataFile string, v interface{}) (interface{}, error){
    ...
    err := json.Unmarshal(data, &v)
    if err != nil {
        fmt.Println("Test - ", test, " - fail", err)
        return nil, err
    }
    fmt.Println("Test - ", test, " - result:")
    fmt.Println(v)
    return v, nil
}

我也尝试过编组到nptr := reflect.New(reflect.TypeOf(v)),但最终我得到了一个无法解析的地址。
输出:

Test -  Simple DTO  - start
Test -  Simple DTO  - result:
map[Capital:Washington DC Continent:North America Name:USA]
Return -  map[Capital:Washington DC Continent:North America Name:USA]  -  <nil>
  1. 尝试将指针传递给attemptParse()函数:

    var outCountry, errorCountry = attemptParse("Simple DTO", "./json/country.json", &country)
    

    并更改

    err := json.Unmarshal(data, &v)
    

    err := json.Unmarshal(data, v)
    

    请查看此游乐场了解更多详细信息:https://go.dev/play/p/XEN5cZce0tG

  2. 我不确定你到底想测试什么。但我宁愿先尝试表驱动测试:https://dave.cheney.net/2019/05/07/prefer-table-driven-tests.

最新更新