Following example decodes URL query ?page=2&limit=100&author_id=123 into a struct.
typeBookstruct {
tableNamestruct{} `pg:"alias:b"`IDint64AuthorIDint64CreatedAt time.Time
}
typeBookFilterstruct {
tableNamestruct{} `urlstruct:"b"`
urlstruct.PagerAuthorIDint64
}
funcExampleUnmarshal_filter() {
db:=pg.Connect(&pg.Options{
User: "postgres",
Password: "",
Database: "postgres",
})
deferdb.Close()
values:= url.Values{
"author_id": {"123"},
"page": {"2"},
"limit": {"100"},
}
filter:=new(BookFilter)
err:=urlstruct.Unmarshal(values, filter)
iferr!=nil {
panic(err)
}
filter.Pager.MaxLimit=100// default max limit is 1000filter.Pager.MaxOffset=100000// default max offset is 1000000// Following query generates://// SELECT "b"."id", "b"."author_id", "b"."created_at"// FROM "books" AS "b"// WHERE "b".author_id = 123// LIMIT 100 OFFSET 100varbooks []*Book_=db.Model(&books).
WhereStruct(filter).
Limit(filter.Pager.GetLimit()).
Offset(filter.Pager.GetOffset()).
Select()
fmt.Println("author", filter.AuthorID)
fmt.Println("limit", filter.GetLimit())
fmt.Println("offset", filter.GetLimit())
// Output: author 123// limit 100// offset 100
}