登录
首页 >  Golang >  Go问答

使用 gorm 解析用户载荷的步骤

来源:stackoverflow

时间:2024-03-04 08:54:23 389浏览 收藏

在IT行业这个发展更新速度很快的行业,只有不停止的学习,才不会被行业所淘汰。如果你是Golang学习者,那么本文《使用 gorm 解析用户载荷的步骤》就很适合你!本篇内容主要包括##content_title##,希望对大家的知识积累有所帮助,助力实战开发!

问题内容

我是 golang 新手,来自 python。我想知道是否有办法在验证数据后将其解压。具体来说,我想在这里从结构转换为 gorm 模型。

在python中我习惯做这样的事情:

user_payload = {'id': 123, 'name': 'alex', 'preferences': ['one', 'two']}
new_user = userorm(**user_payload)
session.commit(new_user)

其中 **user_payload 位相当于我写的:

new_user = userorm(id=123, name='alex', preferences=['one', 'two'])

这是我正在研究的 golang 项目,并试图找出如何实现它:

// media controller

func categorizemedia(context *gin.context) {
    payload, err := validaterequest[categorizemediarequest](context)
    if err != nil {
        context.json(http.statusbadrequest, gin.h{"error": err.error()})
        return
    }
    media := models.media{category: &payload.category,
        date:        payload.descriptivefields.date,
        description: payload.descriptivefields.description,
        people:      payload.descriptivefields.people,
        tags:        payload.descriptivefields.tags,
    }

    if err := database.connection.create(&media).error; err != nil {
        context.json(http.statusinternalservererror, gin.h{"error": err.error()})
        return
    }
    context.json(http.statusok, gin.h{"done": true})
}
// Request models

package controllers

import (
    "github.com/gin-gonic/gin"
    "time"
)

type DescriptiveFields struct {
    Date        *time.Time `json:"date"`
    Description *string    `json:"description"`
    People      *[]string  `json:"people"`
    Tags        *[]string  `json:"tags"`
}

type CategorizeMediaRequest struct {
    Category          string            `json:"category" binding:"required"`
    DescriptiveFields DescriptiveFields `json:"descriptors"`
}

// Removed the other models mentioned here for simplicity's sake

func ValidateRequest[T CreateUserRequest | DeleteUserRequest | LoginRequest | CategorizeMediaRequest |
    EditMediaRequest | UpdateUserRequest](context *gin.Context) (T, error) {
    var payload T
    err := context.ShouldBindJSON(&payload)
    return payload, err
}

正确答案


据我所知,您需要显式设置所有参数,并且 Go 中没有与 Python 的 kwargs 类似的内置工具。
您可以编写该方法,例如 mediaPayloadToModel 并在必要时重新使用它

本篇关于《使用 gorm 解析用户载荷的步骤》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>