我正在为我在Go语言中编写的BE的GraphQL查询编写一个解析器函数,在这个解析器中,我有一些用户数据需要更新,使用的输入值包含了几个可能的更新属性。
在JavaScript中,这可以通过解构(伪)快速完成:const mergedObj = {...oldProps, ...newProps}
现在,我的解析器函数如下所示(使用gqlgen作为GraphQL Go解析器):
func (r *mutationResolver) ModifyUser(ctx context.Context, input *model.ModifyUserInput) (*model.User, error) {
id := input.ID
us, ok := r.Resolver.UserStore[id]
if !ok {
return nil, fmt.Errorf("not found")
}
if input.FirstName != nil {
us.FirstName = *input.FirstName
}
if input.LastName != nil {
us.LastName = *input.LastName
}
if input.ProfileImage != nil {
us.ProfileImage = input.ProfileImage
}
if input.Password != nil {
us.Password = *input.Password
}
if input.Email != nil {
us.Email = *input.Email
}
if input.InTomorrow != nil {
us.InTomorrow = input.InTomorrow
}
if input.DefaultDaysIn != nil {
us.DefaultDaysIn = input.DefaultDaysIn
}
r.Resolver.UserStore[id] = us
return &us, nil
}
这让人感觉很老套。在这种情况下遍历结构键有意义吗?或者我遗漏了另一个模式?
1条答案
按热度按时间gtlvzcf81#
使用函数来减少样板文件:
使用reflect包减少更多样板文件:
按如下方式使用函数: