https://github.com/mitranim/gt
Short for "Go Types". Important data types missing from the Go standard library.
https://github.com/mitranim/gt
data date datetime go golang interval json null-safety sql time url uuid
Last synced: 11 months ago
JSON representation
Short for "Go Types". Important data types missing from the Go standard library.
- Host: GitHub
- URL: https://github.com/mitranim/gt
- Owner: mitranim
- License: unlicense
- Created: 2021-09-06T11:13:30.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2023-08-30T15:18:58.000Z (over 2 years ago)
- Last Synced: 2025-02-24T06:44:38.632Z (11 months ago)
- Topics: data, date, datetime, go, golang, interval, json, null-safety, sql, time, url, uuid
- Language: Go
- Homepage: https://pkg.go.dev/github.com/mitranim/gt
- Size: 293 KB
- Stars: 2
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: readme.md
Awesome Lists containing this project
README
## Overview
Short for "**G**o **T**ypes". Important data types missing from the Go standard library. Tiny and dependency-free.
* `NullDate`: civil date without time, where zero value is empty/null.
* `NullTime`: time where zero value is empty/null.
* `Interval`: ISO 8601 duration, corresponds to Postgres `interval`.
* `NullInterval`: interval where zero value is empty/null.
* `Uuid`: simple implementation of UUID version 4.
* `NullUuid`: UUID where zero value is empty/null.
* `NullInt`: int where zero value is empty/null.
* `NullUint`: uint where zero value is empty/null.
* `NullFloat`: float where zero value is empty/null.
* `NullUrl`: actually usable variant of `url.URL`, used by value rather than pointer, where zero value is empty/null.
* `Ter`: nullable boolean (ternary), more usable and efficient than either `*bool` or `sql.NullBool`.
API docs: https://pkg.go.dev/github.com/mitranim/gt
Important features:
All types implement all relevant encoding/decoding interfaces for text, JSON, and SQL. Types can be seamlessly used for database fields, JSON fields, and so on, without the need for manual conversions.
All "nullable" `gt` types are type aliases of "normal" types, where the zero value is considered "null". This eliminates some invalid states at the type system level.
For example, for nullable DB enums, `gt.NullString` is a better choice than `*string` or `sql.NullString`, because it doesn't have the often-invalid state of non-null `""`. Eliminating invalid states eliminates bugs. Similarly, `gt.NullTime` is a better choice than `time.Time`, `*time.Time` or `sql.NullTime`. It avoids the hassle of pointers or manual JSON conversions, while preventing your from accidentally inserting `0001-01-01`.
## License
https://unlicense.org
## Misc
I'm receptive to suggestions. If this library _almost_ satisfies you but needs changes, open an issue or chat me up. Contacts: https://mitranim.com/#contacts