在我的GoLang GraphQL查询中,我有以下方法(获取用户ID并返回配置文件数据):
"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
},
},
当用户ID无效时db.GetUserProfile
返回nil指针u
和nil错误err
,但GraphQL会响应以下内容:
{
"data": { "userProfile": null },
"errors": [
{
"message": "runtime error: invalid memory address or nil pointer dereference",
"locations": []
}
]
}
虽然我修改这样的GraphQL代码(显式nil检查和返回文字):
...
u, err := db.GetUserProfile(p.Context.Value(handler.CtxId("currentUser")).(int), uid)
if u == nil {
return nil, err
}
return u, err
一切都按预期工作,GraphQL返回:
{
"data": {
"userProfile": null
}
}
如何在没有明确检查nil的情况下管理并教导GraphQL区分nil指针和nil文字?