{"id":23609976,"url":"https://github.com/gandarfh/god","last_synced_at":"2026-02-06T22:31:22.766Z","repository":{"id":177408431,"uuid":"658208289","full_name":"gandarfh/god","owner":"gandarfh","description":"Simple Golang schema validation","archived":false,"fork":false,"pushed_at":"2023-10-20T02:18:26.000Z","size":61,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-07-27T00:37:39.323Z","etag":null,"topics":["brazil","golang","library","validate","validation"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gandarfh.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2023-06-25T05:20:33.000Z","updated_at":"2025-05-25T12:24:50.000Z","dependencies_parsed_at":"2023-09-22T02:31:08.444Z","dependency_job_id":"6cc23478-4a8f-42ed-903a-aaedd91efca6","html_url":"https://github.com/gandarfh/god","commit_stats":{"total_commits":11,"total_committers":2,"mean_commits":5.5,"dds":0.09090909090909094,"last_synced_commit":"6347b10e503ad32a9b03462d5f27a968b381f1a1"},"previous_names":["gandarfh/god"],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/gandarfh/god","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gandarfh%2Fgod","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gandarfh%2Fgod/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gandarfh%2Fgod/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gandarfh%2Fgod/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gandarfh","download_url":"https://codeload.github.com/gandarfh/god/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gandarfh%2Fgod/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29179415,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-06T22:12:24.066Z","status":"ssl_error","status_checked_at":"2026-02-06T22:12:09.859Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["brazil","golang","library","validate","validation"],"created_at":"2024-12-27T15:15:18.310Z","updated_at":"2026-02-06T22:31:22.750Z","avatar_url":"https://github.com/gandarfh.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg\n    src=\"assets/god.png\"\n    alt=\"httui\"\n    style=\"width: 100%\"\n  /\u003e\n  \u003cp\u003eGod é uma alternativa que roda encima do go-playground/validator\u003c/p\u003e\n\u003c/div\u003e\n\n## Introdução\n\nGod é uma biblioteca de validação de dados leve e eficaz escrita em Go. Oferece uma maneira limpa e concisa para validar estruturas complexas e tipos de dados em Go.\n\n## Instalação\n\nPara adicionar o God ao seu projeto Go, execute o seguinte comando:\n\n```bash\ngo get github.com/gandarfh/god\n```\n\n## Uso Básico\n\nGod fornece uma série de funções de validação prontas para uso que você pode usar para validar seus dados. Cada função de validação retorna um erro que pode ser usado para determinar se a validação foi bem-sucedida ou não.\n\n```go\n\nimport (\n\t\"github.com/gandarfh/god\"\n)\n\n// Defining the validation schema\nvar schema = god.Object(god.Map{\n    \"stringField\": god.String(god.Required(), god.Uppercase()),\n    \"intField\":    god.Int64(god.Required()),\n    \"boolField\":   god.Bool(),\n    \"floatField\":  god.Float64(),\n    \"sliceField\":  god.Slice(god.Int64(god.Required())),\n    \"nestedField\": god.Object(god.Map{\n        \"name\":  god.String(god.Required()),\n        \"email\": god.String(god.Required(), god.Contains(\"@\"), god.Email()),\n    }),\n})\n\nfunc main () {\n\texemple := map[string]interface{}{\n\t\t\"stringField\": \"TEST\",\n\t\t\"intField\":    int64(10),\n\t\t\"boolField\":   true,\n\t\t\"floatField\":  3.14,\n\t\t\"sliceField\":  []int64{1, 2, 3},\n\t\t\"nestedField\": map[string]interface{}{\n\t\t\t\"name\":  \"John\",\n\t\t\t\"email\": \"john@example.com\",\n\t\t},\n\t}\n\n\tif err := god.Validate(exemple, schema); err != nil {\n\t\tfmt.Println(err)\n\t}\n}\n```\n\n| Tipo   | Função  | Validações Suportadas                                                              |\n| ------ | ------- | ---------------------------------------------------------------------------------- |\n| string | String  | Required, Min, Max, Email, URL, Lowercase, Uppercase, Contains, Eq                 |\n| int64  | Int64   | Required, Min, Max, Eq, Ne, Gt, Gte, Lt, Lte                                       |\n| bool   | Boolean | Required, Eq                                                                       |\n| slice  | Slice   | Required, Min, Max                                                                 |\n| map    | Object  | N/A (usa um Map para mapear campos de estrutura para seus schemas correspondentes) |\n\n## Criando um Schema Customizado\n\nVocê pode facilmente criar um schema personalizado para validar seus próprios dados.\n\nPara ilustrar melhor, vamos criar um Schema personalizado que valida se um valor é uma string e contém exatamente 3 caracteres.\n\n```go\npackage god\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n)\n\nfunc CustomLengthString(v ...god.Validation) god.SchemaFunc {\n\treturn func(value interface{}) god.Schema {\n\t\treturn god.CommonTypeValidation(v, value, \"string\", func(val interface{}) (interface{}, bool) {\n\t\t\tstrVal, ok := val.(string)\n\t\t\treturn strVal, ok \u0026\u0026 len(strings.TrimSpace(strVal)) == 3\n\t\t})\n\t}\n}\n```\n\nNesse exemplo, `CustomLengthString` é uma função que cria um schema personalizado que valida se um valor é uma `string` e contém exatamente 3 caracteres.\n\nAgora, você pode usar este schema personalizado em seu código, como qualquer outra validação fornecida pela biblioteca:\n\n```go\nfunc main() {\n    userSchema := god.Object( god.Map{\n        \"username\": CustomLengthString(Required()),\n        // ...\n    })\n\n    user := map[string]interface{}{\n        \"username\": \"abc\", // esse valor vai passar na validação\n        // ...\n    }\n\n    if err := god.Validate(user, userSchema); err != nil {\n        fmt.Println(err)\n    }\n}\n```\n\nAqui, 'username' deve ser uma string de exatamente 3 caracteres. Se for diferente, a validação retornará um erro. Dessa forma, você pode criar suas próprias validações para se adequar às necessidades específicas de seu projeto.\n\nNo caso acima, a função `CustomLengthString` é uma função de validação personalizada que usa a função `CommonValidation` para fazer o trabalho pesado. Ela simplesmente fornece uma função que sabe como validar o tipo de dado necessário e passa essa função, juntamente com os outros parâmetros necessários, para `CommonValidation`.\n\n## Criando uma validação Customizado\n\nPara criar uma validação personalizada, você precisará fornecer sua própria função de validação. Por exemplo, você pode criar uma função de validação `MyCustomValidation` que exige que uma string seja \"hello\".\n\n```go\nfunc MyCustomValidation(message ...string) god.Validation {\n\treturn Validation{\n\t\tTag: \"custom\",\n\t\tMessage: god.GetMessage(message, \"Failed on custom validation!\"),\n\t\tFunc: func(v interface{}) Schema {\n      schema := god.Schema{}\n\t\t\tstr, ok := v.(string)\n\t\t\tif !ok {\n\t\t\t\tschema.Error = fmt.Errorf(\"value is not a string\")\n\t\t\t}\n\n\t\t\tif str != \"hello\" {\n\t\t\t\tschema.Error = fmt.Errorf(god.GetMessage(message, \"value is not 'hello'\"))\n\t\t\t}\n\n\t\t\treturn schema\n\t\t},\n\t}\n}\n```\n\nAgora você pode usar MyCustomValidation como qualquer outra validação.\n\n```go\nfunc main() {\n\tschema := god.String(\n\t\tgod.Required(),\n\t\tgod.MyCustomValidation(),\n\t)\n\n\terr := god.Validate(\"hello\", schema)\n\tif err != nil {\n\t\tfmt.Println(err)\n\t}\n\n\terr = god.Validate(\"world\", schema)\n\tif err != nil {\n\t\tfmt.Println(err)  // irá imprimir \"Failed on custom validation!\"\n\t}\n}\n```\n\nNo exemplo acima, a validação `MyCustomValidation` verifica se o valor fornecido é a string \"hello\". Se não for, ele retorna um erro com a mensagem especificada. Isso permite que você crie validações personalizadas que se adequem às necessidades específicas do seu projeto.\n\n## Contato\n\nTwitter - [@gandarfh](https://twitter.com/gandarfh)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgandarfh%2Fgod","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgandarfh%2Fgod","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgandarfh%2Fgod/lists"}