func (a *Args) GetUfloat(key string) (float64, error) {
	value := a.Peek(key)
	if len(value) == 0 {
		return -1, ErrNoArgValue
	}
	return ParseUfloat(value)
}
GetUfloat returns ufloat value for the given key.
package fasthttp
import (
	"bytes"
	"errors"
	"io"
	"sync"
)
func AcquireArgs() *Args {
	return argsPool.Get().(*Args)
}
func ReleaseArgs(a *Args) {
	a.Reset()
	argsPool.Put(a)
}
var argsPool = &sync.Pool{
	New: func() interface{} {
		return &Args{}
	},
}
type Args struct {
	noCopy noCopy
	args []argsKV
	buf  []byte
}
type argsKV struct {
	key   []byte
	value []byte
}
func (a *Args) Reset() {
	a.args = a.args[:0]
}
func (a *Args) CopyTo(dst *Args) {
	dst.Reset()
	dst.args = copyArgs(dst.args, a.args)
}
func (a *Args) VisitAll(f func(key, value []byte)) {
	visitArgs(a.args, f)
}
func (a *Args) Len() int {
	return len(a.args)
}
func (a *Args) Parse(s string) {
	a.buf = append(a.buf[:0], s...)
	a.ParseBytes(a.buf)
}
func (a *Args) ParseBytes(b []byte) {
	a.Reset()
	var s argsScanner
	s.b = b
	var kv *argsKV
	a.args, kv = allocArg(a.args)
	for s.next(kv) {
		if len(kv.key) > 0 || len(kv.value) > 0 {
			a.args, kv = allocArg(a.args)
		}
	}
	a.args = releaseArg(a.args)
}
func (a *Args) String() string {
	return string(a.QueryString())
}
func (a *Args) QueryString() []byte {
	a.buf = a.AppendBytes(a.buf[:0])
	return a.buf
}
func (a *Args) AppendBytes(dst []byte) []byte {
	for i, n := 0, len(a.args); i < n; i++ {
		kv := &a.args[i]
		dst = AppendQuotedArg(dst, kv.key)
		if len(kv.value) > 0 {
			dst = append(dst, '=')
			dst = AppendQuotedArg(dst, kv.value)
		}
		if i+1 < n {
			dst = append(dst, '&')
		}
	}
	return dst
}
func (a *Args) WriteTo(w io.Writer) (int64, error) {
	n, err := w.Write(a.QueryString())
	return int64(n), err
}
func (a *Args) Del(key string) {
	a.args = delAllArgs(a.args, key)
}
func (a *Args) DelBytes(key []byte) {
	a.args = delAllArgs(a.args, b2s(key))
}
func (a *Args) Add(key, value string) {
	a.args = appendArg(a.args, key, value)
}
func (a *Args) AddBytesK(key []byte, value string) {
	a.args = appendArg(a.args, b2s(key), value)
}
func (a *Args) AddBytesV(key string, value []byte) {
	a.args = appendArg(a.args, key, b2s(value))
}
func (a *Args) AddBytesKV(key, value []byte) {
	a.args = appendArg(a.args, b2s(key), b2s(value))
}
func (a *Args) Set(key, value string) {
	a.args = setArg(a.args, key, value)
}
func (a *Args) SetBytesK(key []byte, value string) {
	a.args = setArg(a.args, b2s(key), value)
}
func (a *Args) SetBytesV(key string, value []byte) {
	a.args = setArg(a.args, key, b2s(value))
}
func (a *Args) SetBytesKV(key, value []byte) {
	a.args = setArgBytes(a.args, key, value)
}
func (a *Args) Peek(key string) []byte {
	return peekArgStr(a.args, key)
}
func (a *Args) PeekBytes(key []byte) []byte {
	return peekArgBytes(a.args, key)
}
func (a *Args) PeekMulti(key string) [][]byte {
	var values [][]byte
	a.VisitAll(func(k, v []byte) {
		if string(k) == key {
			values = append(values, v)
		}
	})
	return values
}
func (a *Args) PeekMultiBytes(key []byte) [][]byte {
	return a.PeekMulti(b2s(key))
}
func (a *Args) Has(key string) bool {
	return hasArg(a.args, key)
}
func (a *Args) HasBytes(key []byte) bool {
	return hasArg(a.args, b2s(key))
}
var ErrNoArgValue = errors.New("no Args value for the given key")
func (a *Args) GetUint(key string) (int, error) {
	value := a.Peek(key)
	if len(value) == 0 {
		return -1, ErrNoArgValue
	}
	return ParseUint(value)
}
func (a *Args) SetUint(key string, value int) {
	bb := AcquireByteBuffer()
	bb.B = AppendUint(bb.B[:0], value)
	a.SetBytesV(key, bb.B)
	ReleaseByteBuffer(bb)
}
func (a *Args) SetUintBytes(key []byte, value int) {
	a.SetUint(b2s(key), value)
}
func (a *Args) GetUintOrZero(key string) int {
	n, err := a.GetUint(key)
	if err != nil {
		n = 0
	}
	return n
}