V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
hetiansu5
V2EX  ›  Go 编程语言

Go 之 URL Query String 编码器和解码器

  •  
  •   hetiansu5 · 2020-01-10 01:06:59 +08:00 · 2525 次点击
    这是一个创建于 1540 天前的主题,其中的信息可能已经有所发展或是发生改变。

    项目地址

    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,所以编码后其实是整型,解码的时候也需要接收的是整型
    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1519 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 17:17 · PVG 01:17 · LAX 10:17 · JFK 13:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.