簡體   English   中英

使用列表作為參數變量的Golang突變(GRAPHQL)

[英]Golang Mutation with a list as a param variable (GRAPHQL)

基本上,我想做的就是將一個字符串ex列表: [“ aa”,“ bb”,“ vv”]發送到graphql Mutation字段中,當前這是我的Mutation Schema

"listTest": &graphql.Field{
            Type: QueryMessageType,
            Args: graphql.FieldConfigArgument{
                "listNew": &graphql.ArgumentConfig{
                    Description: "Example List of Json String",
                    Type:        graphql.NewList(graphql.NewNonNull(graphql.String)),
                },
            },
            Resolve: func(p graphql.ResolveParams) (interface{}, error) {
                list := p.Args["listTest"].([]string)
                return listTest(list)
            },
        },

和方法listTest

func listTest(testing[]string) (*QueryMessage, error) {
    fmt.Println(testing)
    return &QueryMessage{
        QueryBody: "nothing to do here",
    }, nil
}

但是,當我在INSOMNIA中執行請求時,響應為:

{
    "data": {
        "listTest": null
    },
    "errors": [
        {
            "message": "interface conversion: interface {} is []interface {}, not []string",
            "locations": []
        }
    ]
}

請求是這樣的:

mutation{
    listTest(listNew: ["aa","bb","vv"]){
        querybody
    }
}

誰能告訴我如何在Go Server中接收字符串列表。 謝謝! :)

更新當我調用fmt.Println(p.Args [“ listTest”])

結果是: [aa bb vv]

解決了

按照投票答案的指示,腳本現在可以完成工作。 這是最終結果:

Resolve: func(p graphql.ResolveParams) (interface{}, error) {
                var groupIDs []string
                for _, gid := range p.Args["list"].([]interface{}) {
                    groupIDs = append(groupIDs, gid.(string))
                }

                for _, final := range groupIDs {
                    fmt.Println(final)
                }
                return listTest(groupIDs)
            },

在控制台中,我得到了:

aa
bb
vv

根據錯誤消息,您的問題在於以下行:

 list := p.Args["listTest"].([]string)

p.Args["listTest"]返回[]interface{}

interface{}可以存儲任何其他類型。 如果您熟悉Java,則有點像Object

這里的問題是您有p.Args["listTest"]字段,並且正在嘗試將其斷言為[]string 如果存儲在args中的值為interface{} (任意),則此方法有效。 但是不是, p.Args (根據錯誤)保存[]interface{} 這是接口值的一部分,其中的每個值都可以是任何值(而不是包含一個字符串切片的單個接口值)。

而是嘗試遍歷該接口列表,然后鍵入斷言每個值。

var strs []string
for _, v := range p.Args["list"].([]interface{}) {
    strs = append(strs, v.(string))
}

或研究另一種設置graphQL類型的方法,以便以更有用的方式取回值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM