gpt4 book ai didi

go - 有没有一种方法可以在golang中为多个结构重用功能?

转载 作者:行者123 更新时间:2023-12-01 21:09:19 26 4
gpt4 key购买 nike

我正在为项目编写后端,后端通过在请求正文中编码为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 {}的类型,如果我将返回类型更改为struct,那么它将不是可以解码并返回所需struct的“通用”函数。
我不确定这是否是解决问题的最佳方法。我还希望以其他任何方式在返回结构的同时重用相同的函数。

最佳答案

使用此功能:

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

关于go - 有没有一种方法可以在golang中为多个结构重用功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64037314/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com