Golang Go语言之 URL Query String 编码器和解码器

Golang Go语言之 URL Query String 编码器和解码器

项目地址

https://github.com/hetiansu5/urlquery

简介

使用 Go 语言实现的 URL Query 字符串编码器和解码器。写好后才发现官方已有实现的querystring,但只实现了编码器,没有解码器,且只支持顶层数据结构为结构体,实现上不算特别完善。

特性

  • 支持丰富的 Go 数据结构互转:
    • 基础数据类型: 有符号整型[8,16,32,64] 无符号整形[8,16,32,64] 字符串 布尔值 浮点型[32,64] 字节 字面量
    • 复合数据类型: 数组 切片 哈希 结构体
    • 嵌套结构体
  • 支持顶层的数据结构为数组 切片 哈希,不仅仅是结构体
  • 支持自定义的 URL-Encode 编码规则,支持全局、局部设置方式,支持默认规则
  • 支持自定义的键名映射规则(结构体 Tag 示例:query:"name"
  • 支持开启或者关闭忽略结构体零值编码(默认开启),以减少编码后字符串长度

快速入门

更多查看example

package main

import ( “github.com/hetiansu5/urlquery” “fmt” )

type SimpleChild struct { Status bool query:"status" Name string }

type SimpleData struct { Id int Name string query:"name" Child SimpleChild Params map[string]int8 query:"p" Array [3]uint16 }

func main() { data := SimpleData{ Id: 2, Name: “http://localhost/test.php?id=2”, Child: SimpleChild{ Status: true, }, Params: map[string]int8{ “one”: 1, }, Array: [3]uint16{2, 3, 300}, }

//Marshal: from go structure to url query string
bytes, _ := urlquery.Marshal(data)
fmt.Println(string(bytes))

//Unmarshal: from url query  string to go structure
v := &SimpleData{}
urlquery.Unmarshal(bytes, v)
fmt.Println(*v)

注意事项

  • 针对 Map 数据类型,Marshal 可以支持 map[基础数据类型]基础数据类型|复合数据类型,Unmarshal 只能支持 map[基础数据类型]基础数据类型
  • 结构体零值忽略编码默认开启,可以通过Option关闭此功能
  • 字节实际上是 uint8,字面量是 int32,所以编码后其实是整型,解码的时候也需要接收的是整型

更多关于Golang Go语言之 URL Query String 编码器和解码器的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于Golang Go语言之 URL Query String 编码器和解码器的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在Golang中处理URL的Query String编码和解码是一个常见的需求,Go标准库提供了net/url包来简化这一过程。

编码器

要编码URL的Query String,你可以使用url.Values类型,它提供了一个方便的map-like接口来存储键值对。然后,你可以调用Encode方法将其转换为经过编码的Query String。

示例代码:

package main

import (
    "fmt"
    "net/url"
)

func main() {
    v := url.Values{}
    v.Set("name", "John Doe")
    v.Set("age", "30")
    encoded := v.Encode()
    fmt.Println(encoded) // 输出: name=John+Doe&age=30
}

解码器

解码Query String同样简单。你可以使用url.ParseQuery函数,它接受一个编码后的Query String并返回一个url.Values对象。

示例代码:

package main

import (
    "fmt"
    "net/url"
)

func main() {
    query := "name=John+Doe&age=30"
    v, _ := url.ParseQuery(query)
    name := v.Get("name")
    age := v.Get("age")
    fmt.Println(name) // 输出: John Doe
    fmt.Println(age)  // 输出: 30
}

通过这种方式,你可以轻松地在Go程序中处理URL的Query String编码和解码,net/url包为你提供了强大的工具来简化这一过程。

回到顶部