【问题标题】:How can I create structure for object and get values in golang? [duplicate]如何为对象创建结构并在 golang 中获取值? [复制]
【发布时间】:2019-05-12 10:07:40
【问题描述】:

我正在尝试编写一个接收编码字符串的函数,向 jsonrpc 服务发送请求,然后我需要选择一个无聊的数据(ask:assets:interface)并创建一个新变量

如何为对象创建结构:

{
  "ask": {
  "amount": 0,
  "assets": [
    {
      "assetref": "74-266-27408",
      "name": "USD",
      "qty": 5000
    }
  ]
  },
  "cancomplete": true,
  "candisable": true,
  "complete": false,
  "offer": {
  "amount": 0,
  "assets": [
    {
      "assetref": "73-266-61482",
      "name": "BTC",
      "qty": 1
    }
  ]
  },
  "requiredfee": 0
}

并制作一个解码十六进制字符串的函数:

type Order struct {
    Ask []Ask `json:"ask"`
    Cancomplete bool `json:"cancomplete"`
    Candisable bool `json:"candisable"`
    Complete bool `json:"complete"`
    Offer []Offer `json:"offer"`
    Requiredfee int `json:"requiredfee"`
}

func DecodeOrder(datahex string) (Order)   {
    order, _ := rpcClient.Call("decoderawexchange", datahex)
    var d = make([]Order, 0, 100)
    err := order.GetObject(&d)
    if err != nil || d == nil {
        panic(err)
    }

    return d
}

使用生成的结构解决问题:

type Order struct {
    Ask struct {
        Amount float64 `json:"amount"`
        Assets []struct {
            Assetref string `json:"assetref"`
            Name     string `json:"name"`
            Qty      float64    `json:"qty"`
        } `json:"assets"`
    } `json:"ask"`
    Cancomplete bool `json:"cancomplete"`
    Candisable  bool `json:"candisable"`
    Complete    bool `json:"complete"`
    Offer       struct {
        Amount float64 `json:"amount"`
        Assets []struct {
            Assetref string `json:"assetref"`
            Name     string `json:"name"`
            Qty      float64    `json:"qty"`
        } `json:"assets"`
    } `json:"offer"`
    Requiredfee float64 `json:"requiredfee"`
}

【问题讨论】:

  • 我不知道那是什么意思。你的问题很难理解。
  • d 不是一个数组,它是一个映射,它们在 Go 中不是一回事。由于您使用的是接口映射,因此从映射中获取任何项目都会变得难看,并且项目嵌套越多,代码就越难看。我建议您使用结构类型而不是地图,或者使用 3rd 方库,使地图的遍历更容易。要查看它有多难看,请考虑获取 d.ask.assets[0].name 的解决方案:d["ask"].(map[string]interface{})["assets"].([]interface{})[0].(map[string]interface{})["name"].(string)

标签: go


【解决方案1】:

我没有从你的解释中得到太多,但你可以像这样使用返回索引和值的范围操作循环遍历数组。

for index, value := range !YourArray!{ //Do your stuff here }

编辑:

只是为了从具有范围的 for 循环中获取单个值,您可以使用 _ 运算符忽略不需要的变量。

    for _, u := range urls {

忽略以上索引变量,

    for i, _ := range urls {

忽略值变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-19
    • 1970-01-01
    相关资源
    最近更新 更多