dongtanlin0765 2018-03-22 07:17
浏览 42

GoLang GraphQL无法从nil文字中告知nil指针

In my GoLang GraphQL query, I have the following method (takes user id and returns profile data):

    "userProfile": &graphql.Field{
        Type: UserProfileType,
        Args: graphql.FieldConfigArgument{
            "uid": &graphql.ArgumentConfig{
                Type:         graphql.Int,
            },
        },
        Resolve: func(p graphql.ResolveParams) (interface{}, error) {
            uid := p.Args["uid"].(int)
            u, err := db.GetUserProfile(p.Context.Value(handler.CtxId("currentUser")).(int), uid)
            return u, err
        },
    },

When user id is invalid db.GetUserProfile returns nil pointer u and nil error err, but GraphQL responds the following:

{
"data": { "userProfile": null },
"errors": [
        {
            "message": "runtime error: invalid memory address or nil pointer dereference",
            "locations": []
        }
    ]
}

Although when I modify GraphQL code like this (explicit nil check and return literal):

...
u, err := db.GetUserProfile(p.Context.Value(handler.CtxId("currentUser")).(int), uid)
if u == nil {
    return nil, err
}
return u, err

everything works as expected and GraphQL returns this:

{
    "data": {
        "userProfile": null
    }
}

How do I manage without explicit checking for nil and teach GraphQL to distinguish nil pointer from nil literal?

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 本题的答案是不是有问题
    • ¥15 关于#r语言#的问题:(svydesign)为什么在一个大的数据集中抽取了一个小数据集
    • ¥15 C++使用Gunplot
    • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
    • ¥15 matlab数字图像处理频率域滤波
    • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
    • ¥15 ELGamal和paillier计算效率谁快?
    • ¥15 蓝桥杯单片机第十三届第一场,整点继电器吸合,5s后断开出现了问题
    • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
    • ¥15 Arcgis相交分析无法绘制一个或多个图形