go-playground-converter is formatter error response inspiration like express-validator in Node.js. go-playground-converter
builds on top of
go-playground/validator
, see more about struct references and follow this documentation, And for the new version of go-playground-converter
, you can use custom messages using gpc
struct tags, and you need the core go-playground/validator
you can access use GoValidator
.
$ go get -u github.com/restuwahyu13/go-playground-converter
package main
import (
"fmt"
gpc "github.com/restuwahyu13/go-playground-converter"
)
type Login struct {
Email string `validate:"required" json:"email"`
Password string `validate:"required" json:"password"`
}
func main() {
payload := Login{Email: "", Password: ""}
res, err := gpc.Validator(payload) // if not errors, validator return res & err nil value
if err != nil {
panic(err)
}
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(&res)
})
http.ListenAndServe(":3000", nil)
}
// {
// "errors": [
// {
// "msg": "Email is a required field",
// "param": "Email",
// "tag": "required"
// },
// {
// "msg": "Password is a required field",
// "param": "Password",
// "tag": "required"
// }
// ]
// }
package main
import (
"fmt"
gpc "github.com/restuwahyu13/go-playground-converter"
)
type Login struct {
Email string `validate:"required" gpc:"required=Email tidak boleh kosong" json:"email"`
Password string `validate:"required" gpc:"required=Password tidak boleh kosong" json:"password"`
}
func main() {
payload := Login{Email: "", Password: ""}
res, err := gpc.Validator(payload) // if not errors, validator return res & err nil value
if err != nil {
panic(err)
}
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(&res)
})
http.ListenAndServe(":3000", nil)
}
// {
// "errors": [
// {
// "msg": "Email tidak boleh kosong",
// "param": "Email",
// "tag": "required"
// },
// {
// "msg": "Password tidak boleh kosong",
// "param": "Password",
// "tag": "required"
// }
// ]
// }
package main
import (
"encoding/json"
"net/http"
"github.com/go-playground/validator/v10"
gpc "github.com/restuwahyu13/go-playground-converter"
)
type Login struct {
Email string `validate:"required" json:"email"`
Password string `validate:"required" json:"password"`
}
func main() {
payload := Login{Email: "", Password: ""}
res, err := gpc.Validator(payload, validator.WithRequiredStructEnabled()) // if not errors, validator return res & err nil value
if err != nil {
panic(err)
}
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(&res)
})
http.ListenAndServe(":3000", nil)
}
// {
// "errors": [
// {
// "msg": "Email is a required field",
// "param": "Email",
// "tag": "required"
// },
// {
// "msg": "Password is a required field",
// "param": "Password",
// "tag": "required"
// }
// ]
// }
func GoValidator(s interface{}) (*gpc.FormatError, error) {
res, err := gpc.Validator(s) // <- pass your struct from param in here
if err != nil {
return nil, err
}
return res, nil
}
func GoValidator(s interface{}) (*gpc.FormatError, error) {
var (
wg *sync.WaitGroup = new(sync.WaitGroup)
errChan chan error = make(chan error, 1)
resChan chan *gpc.FormatError = make(chan *gpc.FormatError, 1)
)
wg.Add(1)
go func() {
defer wg.Done()
res, err := gpc.Validator(s) // <- pass your struct from param in here
if err != nil {
errChan <- err
resChan <- nil
}
if res != nil {
errChan <- nil
resChan <- res
}
}()
defer close(errChan)
defer close(resChan)
wg.Wait()
if err := <-errChan; err != nil {
return nil, err
}
return <-resChan, nil
}
-
Testing Via Local
go test --race -v --failfast .
-
Testing Via Docker
docker build -t go-playground-converter --compress . && docker run go-playground-converter go test --race -v --failfast .
For information on bugs related to package libraries, please visit here
Want to make Go Playground Converter more perfect ? Let's contribute and follow the contribution guide.