从URL中查询Golang中的位图类型过滤器。

huangapple go评论95阅读模式
英文:

Get a Bitmap type filter queried from URL in Golang

问题

我正在处理一个使用Gin框架构建的大型Go Web应用程序。对于请求用户信息的其中一个API,有一个filter参数,其输入类型为bitmap,表示用户是在线还是离线:

// SearchUsers API参数:filterUser
// filterUser是一个位图
在线1 << 0
离线1 << 1


// 值:
0 -> 未使用
1 -> 在线
2 -> 离线
3 -> 所有在线离线

现在我正在使用Request.URL.Query解析所有的API参数。我想知道对于位图类型,这个方法是否也适用?我需要创建一个[]byte来处理输入,然后将其转换为整数以进行数据库查询吗?

func (h *HandleManager) SearchUsers() gin.HandlerFunc {
	return func(c *gin.Context) {
        // ...
		q := c.Request.URL.Query()
        filterUsers := q.Get("filterUser")
        if filterUsers != "" {
            filterUsersByte := []byte(filterUsers)
        } 

英文:

I'm working on a large Go web app built with Gin framework. For one of the APIs requesting user info, there is a filter parameter whose input type is bitmap, denoting whether user is online or offline:

// SearchUsers API parameter: filterUser
// filterUser is a bitmap
Online: 1 &lt;&lt; 0
Offline: 1 &lt;&lt; 1


// Values:
0 -&gt; not used
1 -&gt; online
2 -&gt; offline
3 -&gt; all (online, offline)

Right now I'm parsing all the API parameters using Request.URL.Query. I was wondering if this works the same for bitmap type as well? Do I need to create a []byte to process the input and then convert it to integer for DB queries?

func (h *HandleManager) SearchUsers() gin.HandlerFunc {
	return func(c *gin.Context) {
        // ...
		q := c.Request.URL.Query()
        filterUsers := q.Get(&quot;filterUser&quot;)
        if filterUsers != &quot;&quot; {
            filterUsersByte := []byte(filterUsers)
        } 

答案1

得分: 1

q.Get() 返回一个 string 值,其中包含(可能取决于客户端)位图的十进制表示。将其转换为 []byte 将给你字符串的 UTF-8 编码字节。这不是你想要的。

使用 strconv.Atoi() 从字符串中解析数字,例如:

filterUsers := q.Get("filterUser")
bitmap, err := strconv.Atoi(filterUsers)
if err != nil {
    // 处理错误
}
// 使用位图
英文:

q.Get() returns a string value holding (likely, depends on the client) the decimal representation of your bitmap. Converting it to []byte will give you the UTF-8 encoded bytes of the string. This is not what you want.

Use strconv.Atoi() to parse the number from the string, e.g.:

filterUsers := q.Get(&quot;filterUser&quot;)
bitmap, err := strconv.Atoi(filterUsers)
if err != nil {
    // Handle error
}
// Use bitmap

huangapple
  • 本文由 发表于 2022年5月30日 15:18:06
  • 转载请务必保留本文链接:https://go.coder-hub.com/72430463.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定