func (c *Ctx) Append(field string, values ...string) {
	if len(values) == 0 {
		return
	}
	h := c.app.getString(c.fasthttp.Response.Header.Peek(field))
	originalH := h
	for _, value := range values {
		if len(h) == 0 {
			h = value
		} else if h != value && !strings.HasPrefix(h, value+",") && !strings.HasSuffix(h, " "+value) &&
			!strings.Contains(h, " "+value+",") {
			h += ", " + value
		}
	}
	if originalH != h {
		c.Set(field, h)
	}
}
Append the specified value to the HTTP response header field.
If the header is not already set, it creates the header with the specified value.
package fiber
import (
	"bytes"
	"context"
	"encoding/xml"
	"errors"
	"fmt"
	"io"
	"mime/multipart"
	"net"
	"net/http"
	"path/filepath"
	"reflect"
	"strconv"
	"strings"
	"sync"
	"text/template"
	"time"
	"github.com/gofiber/fiber/v2/internal/bytebufferpool"
	"github.com/gofiber/fiber/v2/internal/go-json"
	"github.com/gofiber/fiber/v2/internal/schema"
	"github.com/gofiber/fiber/v2/utils"
	"github.com/valyala/fasthttp"
)
const maxParams = 30
const queryTag = "query"
const userContextKey = "__local_user_context__"
type Ctx struct {
	app                 *App                  
	route               *Route                
	indexRoute          int                   
	indexHandler        int                   
	method              string                
	methodINT           int                   
	baseURI             string                
	path                string                
	pathBuffer          []byte                
	detectionPath       string                
	detectionPathBuffer []byte                
	treePath            string                
	pathOriginal        string                
	values              [maxParams]string     
	fasthttp            *fasthttp.RequestCtx  
	matched             bool                  
}
type Range struct {
	Type   string
	Ranges []struct {
		Start int
		End   int
	}
}
type Cookie struct {
	Name     string    `json:"name"`
	Value    string    `json:"value"`
	Path     string    `json:"path"`
	Domain   string    `json:"domain"`
	MaxAge   int       `json:"max_age"`
	Expires  time.Time `json:"expires"`
	Secure   bool      `json:"secure"`
	HTTPOnly bool      `json:"http_only"`
	SameSite string    `json:"same_site"`
}
type Views interface {
	Load() error
	Render(io.Writer, string, interface{}, ...string) error
}
type ParserType struct {
	Customtype interface{}
	Converter  func(string) reflect.Value
}
type ParserConfig struct {
	IgnoreUnknownKeys bool
	SetAliasTag       string
	ParserType        []ParserType
	ZeroEmpty         bool
}
func (app *App) AcquireCtx(fctx *fasthttp.RequestCtx) *Ctx {
	c := app.pool.Get().(*Ctx)
	c.app = app
	c.indexRoute = -1
	c.indexHandler = 0
	c.matched = false
	c.pathOriginal = app.getString(fctx.URI().PathOriginal())
	c.method = app.getString(fctx.Request.Header.Method())
	c.methodINT = methodInt(c.method)
	c.fasthttp = fctx
	c.baseURI = ""
	c.configDependentPaths()
	return c
}
func (app *App) ReleaseCtx(c *Ctx) {
	c.route = nil
	c.fasthttp = nil
	app.pool.Put(c)
}
func (c *Ctx) Accepts(offers ...string) string {
	if len(offers) == 0 {
		return ""
	}
	header := c.Get(HeaderAccept)
	if header == "" {
		return offers[0]
	}
	spec, commaPos := "", 0
	for len(header) > 0 && commaPos != -1 {
		commaPos = strings.IndexByte(header, ',')
		if commaPos != -1 {
			spec = utils.Trim(header[:commaPos], ' ')
		} else {
			spec = utils.TrimLeft(header, ' ')
		}
		if factorSign := strings.IndexByte(spec, ';'); factorSign != -1 {
			spec = spec[:factorSign]
		}
		var mimetype string
		for _, offer := range offers {
			if len(offer) == 0 {
				continue
			} else if spec == "*/*" {
				return offer
			}
			if strings.IndexByte(offer, '/') != -1 {
				mimetype = offer  
			} else {
				mimetype = utils.GetMIME(offer)  
			}
			if spec == mimetype {
				return offer
			}
			s := strings.IndexByte(mimetype, '/')
			if strings.HasPrefix(spec, mimetype[:s]) && (spec[s:] == "/*" || mimetype[s:] == "/*") {
				return offer
			}
		}
		if commaPos != -1 {
			header = header[commaPos+1:]
		}
	}
	return ""
}
func (c *Ctx) AcceptsCharsets(offers ...string) string {
	return getOffer(c.Get(HeaderAcceptCharset), offers...)
}
func (c *Ctx) AcceptsEncodings(offers ...string) string {
	return getOffer(c.Get(HeaderAcceptEncoding), offers...)
}
func (c *Ctx) AcceptsLanguages(offers ...string) string {
	return getOffer(c.Get(HeaderAcceptLanguage), offers...)
}
func (c *Ctx) App() *App {
	return c.app
}