Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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: about 12 hours 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 5 years ago)
- Default Branch: master
- Last Pushed: 2024-12-30T18:36:11.000Z (10 days ago)
- Last Synced: 2025-01-02T10:07:13.345Z (8 days 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: 4
- Forks: 3
- Open Issues: 9
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# urlstruct decodes url.Values into structs
[![Build Status](https://travis-ci.org/go-pg/urlstruct.svg?branch=master)](https://travis-ci.org/go-pg/urlstruct)
[![GoDoc](https://godoc.org/github.com/go-pg/urlstruct?status.svg)](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 100var 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
}
```