// package main contains an example on how to use the ReadQuery, // same way you can do the ReadJSON & ReadProtobuf and e.t.c. package main import ( "github.com/kataras/iris/v12" ) type MyType struct { Name string `url:"name,required"` Age int `url:"age"` } func main() { app := iris.New() app.UseRouter(iris.AllowQuerySemicolons) // Optionally: to restore pre go1.17 behavior of url parsing. app.Get("/", func(ctx iris.Context) { var t MyType err := ctx.ReadQuery(&t) // To ignore errors of "required" or when unexpected values are passed to the query, // use the iris.IsErrPath. // It can be ignored, e.g: // if err!=nil && !iris.IsErrPath(err) { ... return } // // To receive an error on EMPTY query when ReadQuery is called // you should enable the `FireEmptyFormError/WithEmptyFormError` ( see below). // To check for the empty error you simple compare the error with the ErrEmptyForm, e.g.: // err == iris.ErrEmptyForm, so, to ignore both path and empty errors, you do: // if err!=nil && err != iris.ErrEmptyForm && !iris.IsErrPath(err) { ctx.StopWithError(...); return } if err != nil { ctx.StopWithError(iris.StatusInternalServerError, err) return } ctx.Writef("MyType: %#v", t) }) app.Get("/simple", func(ctx iris.Context) { names := ctx.URLParamSlice("name") ctx.Writef("names: %v", names) }) // http://localhost:8080?name=iris&age=3 // http://localhost:8080/simple?name=john&name=doe&name=kataras // // Note: this `WithEmptyFormError` will give an error if the query was empty. app.Listen(":8080", iris.WithEmptyFormError, iris.WithoutServerError(iris.ErrServerClosed, iris.ErrURLQuerySemicolon)) }