亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

golang ,如何計算結構類型 interface{} 中的元素?

golang ,如何計算結構類型 interface{} 中的元素?

Go
翻閱古今 2021-12-07 19:38:27
我是 Go 的新手,但努力嘗試..我正在嘗試編寫一些邏輯,需要檢查 struct 的屬性是否僅包含一個元素,或者第一個元素只有一個子元素。主要結構是這樣的:type ChartOptins struct {    Filters Filter `json:"filters"`    Charts interface{} `json:"charts"`}圖表天生就是這樣的結構數組的組合:    $filters = array(        "filters" => array(            "DayStart" => "12-01-2015",            "DayEnd" => "12-05-2015",            "TimePeriods"=> array(                array("qqq","www"),            ),            "lines" => array(                "first","avokado","drunduki"            )        ),        "charts" => array(            "noagg" => array(                array(                    "name" => "HOLD",                    "type" => "line"                ),                array(                    "name" => "UKKR",                    "type" => "line"                ),                array(                    "name" => "SVO",                    "type" => "line"                ),            ),            "oracle" => array(                array(                    "name" => "TDD",                    "type" => "line"                ),            )         ),    );進入結構,ChartOptions我從 POST 請求解析 JSON。JSON 如下所示:{ "filters": { "dayStart": "11-10-2015", "dayEnd": "21-10-2015", "timePeriods": [ [ "qqq", "www" ] ], "lines": [ "first", "avokado", "drunduki" ] }, "charts": { "noagg": [ { "name": "HOLD", "type": "line" } ] } }所以 ,charts只能有 1 個源和 1 個元素,或者在任意數量的源中包含任意數量的元素。"charts" : { "noagg": [ { "name": "HOLD", "type": "line" } ] }or"charts" : { "noagg": [ { "name": "HOLD", "type": "line" } , { "name": "TDD", "type": "line" } , { "name": "SVO", "type": "line" } ] }當然,這是轉到腳本的 JSON 元素,我將它們解析為 interface{}。當我嘗試使用時len(),Go 說我不能在界面上使用它..處理元素數量的最佳實踐是什么,實現這種檢查的最佳方法是什么?
查看完整描述

2 回答

?
守候你守候我

TA貢獻1802條經驗 獲得超10個贊

這是一個示例保持界面:https : //play.golang.org/p/Eu6Hj6ddSE


只要改變: Charts interface{}女巫Charts []interface{} 。接口上,如果v是你ChartOptins然后讓你用LEN()運算符


fmt.Println(len(v.Charts.([]interface{})))


查看完整回答
反對 回復 2021-12-07
?
尚方寶劍之說

TA貢獻1788條經驗 獲得超4個贊

據我了解,您只需要定義用于正確映射 json 的結構。它可以是這樣的:


package main


import (

    "encoding/json"

    "fmt"

    "strings"

)


type ChartOptins struct {

    Filters map[string]interface{} `json:"filters"`

    Charts  map[string][]Chart     `json:"charts"`

}


type Chart struct {

    Name string `json:"name"`

    Type string `json:"type"`

}


func main() {

    const jsonStream = `{

        "filters": { "dayStart": "oneortwo", "dayEnd": "oneorthree", "timePeriods": [ [ "qqq", "www" ] ], "lines": [ "first", "avokado", "drunduki" ] }, 

        "charts": { "noagg": [ { "name": "HOLD", "type": "line" }, { "name": "UKKR", "type": "line" }, { "name": "SVO", "type": "line" } ], "oracle": [ { "name": "TDD", "type": "line" } ] } 

    }`


    var co ChartOptins

    json.NewDecoder(strings.NewReader(jsonStream)).Decode(&co)


    fmt.Println(co)


    for k, v := range co.Charts {

        fmt.Printf("key: %v\n", k)

        for _, ch := range v {

            fmt.Printf("Name: %v, type: %v\n", ch.Name, ch.Type)

        }

    }

}


查看完整回答
反對 回復 2021-12-07
  • 2 回答
  • 0 關注
  • 208 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號