Urlquery
URL Query string Encoder and Parser based on go
Install / Use
/learn @hetiansu5/UrlqueryREADME
Introduction
A URL Query string Encoder and Parser based on go.
- Parse from URL Query string to go structure
- Encode from go structure to URL Query string
Keywords
x-www-form-urlencoded Query Encoder URL-Query Http-Query go
Feature
- Support full go structure Translation
- Basic Structure: Int[8,16,32,64] Uint[8,16,32,64] String Bool Float[32,64] Byte Rune
- Complex Structure: Array Slice Map Struct
- Nested Struct with above Basic or Complex Structure
- Support top-level structure: Map, Slice or Array, not only Struct
- Support self-defined URL Query Encode rule example
- Support self-defined key name relation rule example
- Support self-defined value encode and decode function example
- Support to control whether ignoring Zero-value of struct member example
Quick Start
More to see 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)
//output Id=2&name=http%3A%2F%2Flocalhost%2Ftest.php%3Fid%3D2&Child%5Bstatus%5D=1&p%5Bone%5D=1&Array%5B%5D=2&Array%5B%5D=3&Array%5B%5D=300
fmt.Println(string(bytes))
//Unmarshal: from url query string to go structure
v := &SimpleData{}
urlquery.Unmarshal(bytes, v)
//output {Id:2, Name:"http://localhost/test.php?id=2", Child: SimpleChild{Status:true}, Params:map[one:1], Array:[2, 3, 300]}
fmt.Println(*v)
}
Attention
- For Map structure, Marshal supports map[Basic]Basic|Complex, but Unmarshal just supports map[Basic]Basic
- Default: ignoring Zero-value of struct member. You can enable it with Option
- Remember that: Byte is actually uint8, Rune is actually int32
License
MIT
Related Skills
node-connect
351.2kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
110.6kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
351.2kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
351.2kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
