栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在Go中将所有GET请求查询参数放入一个结构中?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在Go中将所有GET请求查询参数放入一个结构中?

使用大猩猩的
schema
包装

github.com/gorilla/schema
包装正是为此而发明的。

您可以使用struct标记]来告诉如何将URL参数映射到struct字段,

schema
程序包会寻找
"schema"
标记键。

使用它:

import "github.com/gorilla/schema"type Filter struct {    Offset int64  `schema:"offset"`    Limit  int64  `schema:"limit"`    SortBy string `schema:"sortby"`    Asc    bool   `schema:"asc"`    //User specific filters    Username   string `schema:"username"`    First_Name string `schema:"first_name"`    Last_Name  string `schema:"last_name"`    Status     string `schema:"status"`}func MyHandler(w http.ResponseWriter, r *http.Request) {    if err := r.ParseForm(); err != nil {        // Handle error    }    filter := new(Filter)    if err := schema.NewDeprer().Depre(filter, r.Form); err != nil {        // Handle error    }    // Do something with filter    fmt.Printf("%+v", filter)}

封送和解封使用
json

请注意,

schema
程序包还将尝试将参数值转换为字段的类型。

如果该结构仅包含

[]string
类型的字段(或者您愿意做出让步),则可以在不使用
schema
包的情况下执行此操作。

Request.Form
是一个
map
string
到的映射
[]string
(因为一个参数可能会在URL中多次列出:

Form url.Values

url.Values

type Values map[string][]string

因此,例如,如果您的

Filter
结构如下所示:

type Filter struct {    Offset []string `json:"offset"`    Limit  []string `json:"limit"`    SortBy []string `json:"sortby"`    // ..other fields}

您可以简单地使用该

json
软件包进行封送
r.Form
,然后将其解封到您的结构中:

func MyHandler(w http.ResponseWriter, r *http.Request) {    if err := r.ParseForm(); err != nil {        // Handle error    }    data, err := json.Marshal(r.Form)    if err != nil {        // Handle error    }    filter := new(Fiter)    if err = json.Unmarshal(data, filter); err != nil {        // Handle error    }    fmt.Printf("%+v", filter)}

此解决方案处理是否为同一参数名称提供了多个值。如果您不关心多个值,而只想要一个,则必须首先将“”转换

r.Form
map
单个
string
值而不是
[]string

它看起来像这样:

type Filter struct {    Offset string `json:"offset"`    Limit  string `json:"limit"`    SortBy string `json:"sortby"`    // ..other fields}// Transformation from map[string][]string to map[string]string:m := map[string]string{}for k, v := range r.Form {    m[k] = v[0]}

然后您可以以相同的方式

m
将其编入
Filter
结构并将其编入结构。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/394608.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号