Categorygithub.com/hetiansu5/urlquery
modulepackage
1.2.7
Repository: https://github.com/hetiansu5/urlquery.git
Documentation: pkg.go.dev

# README

Language GoDoc Go Report Card License codecov

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

# Packages

No description provided by the author

# Functions

Marshal do encoding go structure to string it is thread safety.
NewEncoder return new encoder object do some option initialization.
NewParser make a new parser object do some option initialization.
SetGlobalQueryEncoder set global query encoder.
Unmarshal is supposed to decode string to go structure It is thread safety.
WithNeedEmptyValue is supposed to control whether to ignore zero value.
WithQueryEncoder is supposed customized query encoder option.

# Constants

SymbolAnd is key character of querystring.
SymbolEqual is key character of querystring.

# Structs

A DefaultQueryEncoder is a default URL-Encoder.
An ErrInvalidMapKeyType is a customized error.
An ErrInvalidMapValueType is a customized error.
An ErrInvalidUnmarshalError is a customized error.
An ErrTranslated is a customized error type.
An ErrUnhandledType is a customized error.
An ErrUnsupportedBitSize is a customized error.

# Interfaces

A QueryEncoder is a interface implementing Escape and UnEscape method.

# Type aliases

An Option is a func type for applying diff options.