为了账号安全,请及时绑定邮箱和手机立即绑定

有没有办法在golang中为多个结构重用一个函数?

有没有办法在golang中为多个结构重用一个函数?

Go
哈士奇WWW 2022-07-04 10:03:44
我正在为一个项目编写后端,后端通过在请求正文中编码为 json 的 POST 请求接收用户数据。我有两个结构:在新帐户创建期间存储用户数据的结构:type User struct {    Guid        string ``    Name        string `json:"Name"`    Pass        string `json:"Pass"`    Username    string `json:"Username"`    Email       string `json:"Email"`    Phone       string `json:"Phone"`    Country     string `json:"Country"`}存储登录数据的结构type Signin struct {    Username string `json:"Username"`    Pass string `json:"Pass"`}和一个 json 解码器函数(用于解码来自请求正文的数据):func extractAndAssignInfo(req *http.Request, dataStruct interface{}) interface{}{    decoder := json.NewDecoder(req.Body)    err := decoder.Decode(&dataStruct)    if err != nil {        log.Fatal(err)    }    return reflect.ValueOf(dataStruct).Interface()}有没有办法让extractAndAssignInfo()函数返回结构?由于 Guid 是使用不同的函数计算的,所以当我尝试做userdata  := ExtractAndAssignInfo(req, User{})该函数的返回值给出了一个类型map[string]interface {},如果我将返回类型更改为一个结构,那么它将不是一个可以解码并返回所需结构的“通用”函数。我不确定这是否是解决它的最佳方法。我也很感激在返回结构时可以重用相同函数的任何其他方式。
查看完整描述

1 回答

?
holdtom

TA贡献1805条经验 获得超10个赞

使用这个功能:


func extractAndAssignInfo(req *http.Request, v interface{}) {

    decoder := json.NewDecoder(req.Body)

    err := decoder.Decode(v)

    if err != nil {

        log.Fatal(err)

    }

}

像这样调用它以将请求解码为User:


var userData User

extractAndAssignInfo(req, &userData)

并像这样解码为Signin:


var signin Signin

extractAndAssignInfo(req, &signin)

侧节点:在错误的请求数据上退出进程不是一个好主意。考虑返回错误extractAndAssignInfo而不是调用log.Fatal.


查看完整回答
反对 回复 2022-07-04
  • 1 回答
  • 0 关注
  • 175 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号