You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Apollo Client与graphql-go时GraphQL查询报‘Unknown type Int’错误

解决graphql-go中传递Int标量参数报错"Unknown type 'Int'"的问题

这问题我之前帮朋友排查过,大概率是你在graphql-go服务端定义Schema的时候,没正确使用内置的Int标量类型,或者没把它正确注册到Schema中。咱们一步步来定位解决:

1. 检查查询字段的参数类型定义

你在定义client查询字段时,参数id的类型必须使用graphql-go内置的graphql.Int,而不是手写字符串"Int"或者其他自定义类型。举个正确的示例:

// 先定义你的Client对象类型
clientType := graphql.NewObject(graphql.ObjectConfig{
    Name: "Client",
    Fields: graphql.Fields{
        "id":   &graphql.Field{Type: graphql.Int},
        "name": &graphql.Field{Type: graphql.String},
    },
})

// 定义client查询字段
clientField := &graphql.Field{
    Type: clientType,
    Args: graphql.FieldConfigArgument{
        "id": &graphql.ArgumentConfig{
            Type: graphql.Int, // 这里必须用graphql-go内置的Int类型,不能写错!
        },
    },
    Resolve: func(p graphql.ResolveParams) (interface{}, error) {
        // 解析参数时注意类型断言
        id, ok := p.Args["id"].(int)
        if !ok {
            return nil, fmt.Errorf("无效的ID类型")
        }
        // 这里替换成你的业务逻辑,比如从数据库查询Client
        return getClientByID(id), nil
    },
}

2. 确认导入了正确的graphql-go包

确保你的代码里导入了官方的graphql-go包,这样才能访问到它的内置标量类型(Int、String、Boolean等):

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

如果用的是第三方分支或自定义包,可能内置标量的定义会有差异,优先用官方包来避免这类问题。

3. 检查根查询与Schema的组装

要确保你的根查询类型正确包含了client字段,并且Schema初始化时正确关联了根查询:

// 定义根查询
rootQuery := graphql.NewObject(graphql.ObjectConfig{
    Name: "RootQuery",
    Fields: graphql.Fields{
        "client": clientField, // 把上面定义的client字段加进来
    },
})

// 初始化Schema
schema, err := graphql.NewSchema(graphql.SchemaConfig{
    Query: rootQuery,
    // 如果有Mutation操作,也在这里添加
})
if err != nil {
    log.Fatalf("Schema初始化失败: %v", err)
}

额外排查:自定义标量的特殊情况

如果你因为特殊需求自定义了Int标量,那必须把这个自定义标量注册到Schema中,否则服务端会识别不了。比如:

// 自定义Int标量示例(一般没必要,除非特殊需求)
customInt := graphql.NewScalar(graphql.ScalarConfig{
    Name: "Int",
    // 实现序列化、反序列化逻辑...
})

// 初始化Schema时要把自定义标量加入Types列表
schema, err := graphql.NewSchema(graphql.SchemaConfig{
    Query: rootQuery,
    Types: []graphql.Type{customInt},
})

总结

你客户端的查询代码是没问题的($id: Int符合GraphQL规范),报错核心原因是服务端没有正确识别Int类型。按照上面的步骤检查一遍,尤其是字段参数类型是否用了graphql.Int,应该就能解决这个问题。

内容的提问来源于stack exchange,提问作者slowcode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:42:38