https://github.com/go-pg/urlstruct
urlstruct decodes url.Values into structs
https://github.com/go-pg/urlstruct
go go-pg golang postgresql
Last synced: 4 months ago
JSON representation
urlstruct decodes url.Values into structs
- Host: GitHub
- URL: https://github.com/go-pg/urlstruct
- Owner: go-pg
- License: bsd-2-clause
- Created: 2019-09-24T10:22:16.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2025-04-06T21:58:15.000Z (9 months ago)
- Last Synced: 2025-04-09T23:16:33.352Z (9 months ago)
- Topics: go, go-pg, golang, postgresql
- Language: Go
- Homepage: https://godoc.org/github.com/go-pg/urlstruct
- Size: 76.2 KB
- Stars: 27
- Watchers: 3
- Forks: 3
- Open Issues: 9
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# urlstruct decodes url.Values into structs
[](https://travis-ci.org/go-pg/urlstruct)
[](https://godoc.org/github.com/go-pg/urlstruct)
## Example
Following example decodes URL query `?page=2&limit=100&author_id=123` into a struct.
```go
type Book struct {
tableName struct{} `pg:"alias:b"`
ID int64
AuthorID int64
CreatedAt time.Time
}
type BookFilter struct {
tableName struct{} `urlstruct:"b"`
urlstruct.Pager
AuthorID int64
}
func ExampleUnmarshal_filter() {
db := pg.Connect(&pg.Options{
User: "postgres",
Password: "",
Database: "postgres",
})
defer db.Close()
values := url.Values{
"author_id": {"123"},
"page": {"2"},
"limit": {"100"},
}
filter := new(BookFilter)
err := urlstruct.Unmarshal(values, filter)
if err != nil {
panic(err)
}
filter.Pager.MaxLimit = 100 // default max limit is 1000
filter.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 100
var books []*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
}
```