Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在golang中有没有一种方法可以为多个结构重用一个函数?_Go - Fatal编程技术网

在golang中有没有一种方法可以为多个结构重用一个函数?

在golang中有没有一种方法可以为多个结构重用一个函数?,go,Go,我正在为一个项目编写一个后端,后端通过请求体中编码为json的POST请求接收用户数据 我有两种结构: 创建新帐户期间存储用户数据的结构: type User struct { Guid string `` Name string `json:"Name"` Pass string `json:"Pass"` Username string `json:"Userna

我正在为一个项目编写一个后端,后端通过请求体中编码为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解码器函数(用于解码来自请求主体的数据):

有没有办法让
extractAndAssignInfo()
函数返回结构

由于Guid是使用不同的函数计算的,因此当我尝试执行以下操作时

userdata  := ExtractAndAssignInfo(req, User{})

函数的返回值给出了一种类型的
map[string]interface{}
,如果我将返回类型更改为struct,那么它将不是一个可以解码并返回所需结构的“通用”函数

我不确定这是否是解决问题的最佳方法。我还希望在返回结构时能够以任何其他方式重用相同的函数。

使用此函数:

func extractAndAssignInfo(req *http.Request, v interface{}) {
    decoder := json.NewDecoder(req.Body)
    err := decoder.Decode(v)
    if err != nil {
        log.Fatal(err)
    }
}
像这样调用它来解码对
用户的请求

var userData User
extractAndAssignInfo(req, &userData)
像这样解码成一个
符号

var signin Signin
extractAndAssignInfo(req, &signin)
侧节点:在错误请求数据上退出进程不是一个好主意。考虑返回一个错误<代码> Extutand AdvestFiels<代码>,而不是调用<代码>日志。
var signin Signin
extractAndAssignInfo(req, &signin)