我正在使用Go和Buffalo来开发API。收到请求时,可以自动将 JSON 有效负载映射到结构:
func MyAction(c buffalo.Context) error {
u := &User{}
if err := c.Bind(u); err != nil {
return err
}
u.Name // "Ringo"
u.Email // "ringo@beatles.com"
}
但是,它假定有效负载具有以下形状:
{
"name": "Ringo",
"email": "ringo@beatles.com"
}
如果由于某种原因,传入的有效负载具有密钥:
{
"user": {
"name": "Ringo",
"email": "ringo@beatles.com"
}
}
绑定将不起作用。我找不到如何处理这个案子。我应该如何处理?
也许你可以用 map[string]User{}
包装你的结构,这里有一个例子:
func MyAction(c buffalo.Context) error {
u := map[string]User{
"user": User{},
}
if err := c.Bind(&u); err != nil {
return err
}
user := u["user"]
user.Name // "Ringo"
user.Email // "ringo@beatles.com"
}
在我看来,定义一个结构将是更干净的解决方案:
type UserObject struct {
User struct {
Email string
Name string
}
}
func MyAction(c buffalo.Context) error {
u := UserObject{}
if err := c.Bind(&u); err != nil {
return err
}
user := u.User
user.Name // "Ringo"
user.Email // "ringo@beatles.com"
}