Golang graphql架构字段无法返回数组

Golang graphql架构字段无法返回数组,go,graphql,Go,Graphql,尝试从graphql查询获取数组时收到此错误: "User Error: expected iterable, but did not find one for field RootQuery.blogpostsBetween." 这很奇怪,因为就在几周前,我的字段配置如下,它工作得非常好: "blogpostsBetween": &graphql.Field{ Type: graphql.NewList(blogpostType), Resolve: func(p g

尝试从graphql查询获取数组时收到此错误:

"User Error: expected iterable, but did not find one for field RootQuery.blogpostsBetween."
这很奇怪,因为就在几周前,我的字段配置如下,它工作得非常好:

"blogpostsBetween": &graphql.Field{
    Type: graphql.NewList(blogpostType),
    Resolve: func(p graphql.ResolveParams) (interface{}, error) {
                       // ... some more code ...
                      // what I return here was placed to demonstrate the error.
        return [5]Blogpost{}, err
    },
    Args: graphql.FieldConfigArgument{
        "from": &graphql.ArgumentConfig{
            Type: graphql.String,
        },
        "to": &graphql.ArgumentConfig{
            Type: graphql.String,
        },
    },
},
我真的很困惑为什么这不再有效,因为正如我所说的,我很确定我没有改变任何事情。但我很高兴我错了

编辑:blogpostType的详细信息

var blogpostType = graphql.NewObject(graphql.ObjectConfig{
    Name: "Blogpost",
    Fields: graphql.Fields{
        "id": &graphql.Field{
            Type: graphql.String,
            Resolve: func(p graphql.ResolveParams) (interface{}, error) {
                m := p.Source.(Blogpost)
                return m.id, nil
            },
        },
        "title": &graphql.Field{
            Type: graphql.String,
            Resolve: func(p graphql.ResolveParams) (interface{}, error) {
                m := p.Source.(Blogpost)
                return m.title, nil
            },
        },
        "body": &graphql.Field{
            Type: graphql.String,
            Resolve: func(p graphql.ResolveParams) (interface{}, error) {
                m := p.Source.(Blogpost)
                return m.body, nil
            },
        },
        "created": &graphql.Field{
            Type: graphql.String,
            Resolve: func(p graphql.ResolveParams) (interface{}, error) {
                m := p.Source.(Blogpost)
                return m.created, nil
            },
        },
        "author": &graphql.Field{
            Type: graphql.String,
            Resolve: func(p graphql.ResolveParams) (interface{}, error) {
                m := p.Source.(Blogpost)
                return m.author, nil
            },
        },
    },
})

基于您的问题,我假设并添加了一些类型,以使解决方案如下所示。此示例仅查询所选字段
id、title、body、author

package main

import (
    "encoding/json"
    "fmt"
    "log"

    "github.com/graphql-go/graphql"
)

var blogpostType = graphql.NewObject(graphql.ObjectConfig{
    Name: "Blogpost",
    Fields: graphql.Fields{
        "id": &graphql.Field{
            Type: graphql.String,
            Resolve: func(p graphql.ResolveParams) (interface{}, error) {
                m := p.Source.(Blogpost)
                return m.id, nil
            },
        },
        "title": &graphql.Field{
            Type: graphql.String,
            Resolve: func(p graphql.ResolveParams) (interface{}, error) {
                m := p.Source.(Blogpost)
                return m.title, nil
            },
        },
        "body": &graphql.Field{
            Type: graphql.String,
            Resolve: func(p graphql.ResolveParams) (interface{}, error) {
                m := p.Source.(Blogpost)
                return m.body, nil
            },
        },
        "created": &graphql.Field{
            Type: graphql.String,
            Resolve: func(p graphql.ResolveParams) (interface{}, error) {
                m := p.Source.(Blogpost)
                return m.created, nil
            },
        },
        "author": &graphql.Field{
            Type: graphql.String,
            Resolve: func(p graphql.ResolveParams) (interface{}, error) {
                m := p.Source.(Blogpost)
                return m.author, nil
            },
        },
    },
})

type Blogpost struct {
    id      string
    title   string
    body    string
    created string
    author  string
}

func main() {
    // Schema
    fields := graphql.Fields{
        "blogpostsBetween": &graphql.Field{
            Type: graphql.NewList(blogpostType),
            Resolve: func(p graphql.ResolveParams) (interface{}, error) {
                // ... some more code ...
                // what I return here was placed to demonstrate the error.
                return []Blogpost{
                    Blogpost{
                        id:      "new-post",
                        title:   "new post",
                        body:    "Lorem ipsum",
                        author:  "John Doe",
                        created: "12.12.2012",
                    },
                }, nil
            },
            Args: graphql.FieldConfigArgument{
                "from": &graphql.ArgumentConfig{
                    Type: graphql.String,
                },
                "to": &graphql.ArgumentConfig{
                    Type: graphql.String,
                },
            },
        },
    }
    rootQuery := graphql.ObjectConfig{Name: "RootQuery", Fields: fields}
    schemaConfig := graphql.SchemaConfig{Query: graphql.NewObject(rootQuery)}
    schema, err := graphql.NewSchema(schemaConfig)
    if err != nil {
        log.Fatalf("failed to create new schema, error: %v", err)
    }

    // Query
    query := `
            {
                blogpostsBetween {
                    id,
                    title,
                    body,
                    author
                }
            }
        `
    params := graphql.Params{Schema: schema, RequestString: query}
    r := graphql.Do(params)
    if len(r.Errors) > 0 {
        log.Fatalf("failed to execute graphql operation, errors: %+v", r.Errors)
    }
    rJSON, _ := json.Marshal(r)
    fmt.Printf("%s \n", rJSON)
}

您可以添加
blogpostType
的详细信息吗?编辑并添加了blogpostType:)@Aditya SinghI已经添加了一个基于以下更新类型的工作解决方案。谢谢!我明天会检查这是否对我有效,并会让你知道!:)这起作用了。Graphql应该得到一个切片,而不是数组。一个重要的区别!你介意在你的回答中包括变量类型的不同吗?