gpt4 book ai didi

以列表作为参数变量的 Golang 变异 (GRAPHQL)

转载 作者:数据小太阳 更新时间:2023-10-29 03:11:01 25 4
gpt4 key购买 nike

基本上我想做的是发送一个字符串列表 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 服务器中接收字符串列表。谢谢! :)

更新当我调用 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{}。这是接口(interface)值的一部分,其中每个值都可以是任何东西(而不是单个接口(interface)值包含一段字符串。)

而是尝试遍历该接口(interface)列表,然后键入断言每个值。

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

或者研究另一种设置 graphQL 类型的方法,以便您以更有用的方式取回值。

关于以列表作为参数变量的 Golang 变异 (GRAPHQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51715897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com