{"id":13808994,"url":"https://github.com/LukaGiorgadze/gonull","last_synced_at":"2025-05-14T05:32:55.924Z","repository":{"id":159341872,"uuid":"634598300","full_name":"LukaGiorgadze/gonull","owner":"LukaGiorgadze","description":"Go package simplifies nullable fields handling using Go Generics.","archived":false,"fork":false,"pushed_at":"2024-02-15T19:38:28.000Z","size":66,"stargazers_count":76,"open_issues_count":2,"forks_count":9,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-11-16T16:51:20.158Z","etag":null,"topics":["go","golang","json","null","nullable","pointers","testing"],"latest_commit_sha":null,"homepage":"https://pkg.go.dev/github.com/LukaGiorgadze/gonull","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/LukaGiorgadze.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-04-30T16:43:09.000Z","updated_at":"2024-11-08T01:02:06.000Z","dependencies_parsed_at":"2023-12-01T01:29:19.105Z","dependency_job_id":"ef7d03ee-74c7-4c94-98d1-9671ed9ff99a","html_url":"https://github.com/LukaGiorgadze/gonull","commit_stats":null,"previous_names":["lukagiorgadze/gonull","lomsa-dev/gonull"],"tags_count":11,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LukaGiorgadze%2Fgonull","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LukaGiorgadze%2Fgonull/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LukaGiorgadze%2Fgonull/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LukaGiorgadze%2Fgonull/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/LukaGiorgadze","download_url":"https://codeload.github.com/LukaGiorgadze/gonull/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225277948,"owners_count":17448789,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["go","golang","json","null","nullable","pointers","testing"],"created_at":"2024-08-04T01:01:57.197Z","updated_at":"2025-05-14T05:32:55.903Z","avatar_url":"https://github.com/LukaGiorgadze.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"# Go Nullable with Generics\n\n[![PkgGoDev](https://pkg.go.dev/badge/github.com/LukaGiorgadze/gonull)](https://pkg.go.dev/github.com/LukaGiorgadze/gonull) ![go-mod-verify](https://github.com/LukaGiorgadze/gonull/workflows/Go%20mod/badge.svg) ![go-vuln](https://github.com/LukaGiorgadze/gonull/workflows/Security/badge.svg) ![golangci-lint](https://github.com/LukaGiorgadze/gonull/workflows/Linter/badge.svg) [![codecov](https://codecov.io/gh/LukaGiorgadze/gonull/branch/main/graph/badge.svg?token=76089e7b-f137-4459-8eae-4b48007bd0d6)](https://codecov.io/gh/LukaGiorgadze/gonull)\n\n## Go package simplifies nullable fields handling with Go Generics.\n\n`gonull` is a Go package that provides type-safe handling of nullable values using generics. It's designed to work seamlessly with JSON and SQL operations, making it perfect for web services and database interactions.\n\n## Features\n\n- 🎯 Type-safe nullable values using Go generics\n- 💡 Omitzero support\n- 🔄 Built-in JSON marshaling/unmarshaling\n- 📊 SQL database compatibility\n- ✨ Zero dependencies\n\n## Usage\n\n```bash\ngo get github.com/LukaGiorgadze/gonull/v2\n```\n\n### Example\n\n```go\npackage main\n\nimport (\n    \"encoding/json\"\n    \"fmt\"\n\n    \"github.com/LukaGiorgadze/gonull\"\n)\n\ntype MyCustomInt int\ntype MyCustomFloat32 float32\n\ntype Person struct {\n    Name     string                           `json:\"name\"`\n    Age      gonull.Nullable[MyCustomInt]     `json:\"age\"`\n    Address  gonull.Nullable[string]          `json:\"address\"`\n    Height   gonull.Nullable[MyCustomFloat32] `json:\"height\"`\n    IsZero   gonull.Nullable[bool]            `json:\"is_zero,omitzero\"` // This property will be omitted from the output since it's not present in jsonData.\n}\n\nfunc main() {\n    jsonData := []byte(`\n    {\n        \"name\": \"Alice\",\n        \"age\": 15,\n        \"address\": null,\n        \"height\": null\n    }`)\n\n    var person Person\n    json.Unmarshal(jsonData, \u0026person)\n    fmt.Printf(\"Unmarshalled Person: %+v\\n\", person)\n\n    marshalledData, _ := json.Marshal(person)\n    fmt.Printf(\"Marshalled JSON: %s\\n\", string(marshalledData))\n\n    // Output:\n    // Unmarshalled Person: {Name:Alice Age:15 Address: Height:0 IsZero:false}\n    // Marshalled JSON: {\"name\":\"Alice\",\"age\":15,\"address\":null,\"height\":null}\n    // As you see, IsZero is not present in the output, because we used the omitzero tag introduced in go v1.24.\n}\n```\n\n### Database example\n\n```go\ntype User struct {\n    Name     gonull.Nullable[string]\n    Age      gonull.Nullable[int]\n}\n\nfunc main() {\n    // ...\n    rows, err := db.Query(\"SELECT id, name, age FROM users\")\n    if err != nil {\n        log.Fatal(err)\n    }\n    defer rows.Close()\n\n    for rows.Next() {\n        var user User\n        err := rows.Scan(\u0026user.Name, \u0026user.Age)\n        if err != nil {\n            log.Fatal(err)\n        }\n        fmt.Printf(\"ID: %d, Name: %v, Age: %v\\n\", user.Name.Val, user.Age.Val)\n    }\n    // ...\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FLukaGiorgadze%2Fgonull","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FLukaGiorgadze%2Fgonull","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FLukaGiorgadze%2Fgonull/lists"}