Releases: coregx/opt
Releases · coregx/opt
Release list
v0.3.0 — Option[T] rename, driver.Valuer fix
Breaking Changes
Value[T]renamed toOption[T]— fixesdriver.Valuershadow bug where all concrete types failed to implementdriver.Valuerdue to Go selector rulesField.ToValue()renamed toField.ToOption()
New
FieldFromOption[T]()— lossless conversion fromOption[T]toField[T]for PATCH workflows- Compile-time interface checks — verifies
driver.Valuer,sql.Scanner,json.Marshaleron all 16 concrete types
Fixed
- All concrete types now correctly implement
driver.Valuervia method promotion - pgx v5 INSERT/Exec works without explicit forwarding methods
doc.gocorrected:driver.Valuerclaim is now accurate
Migration from v0.2.0
opt.Value[T] → opt.Option[T]
.Value field access → .Option
.ToValue() → .ToOption()
Concrete types (opt.String, opt.Int, etc.) and constructors (New, From, FromPtr, OrNull) are unchanged.
v0.2.0 — OrNull constructors
OrNull — zero value → null mapping
New constructors that treat zero values as "not set" → null. Eliminates boilerplate helpers in DB/API projects.
Added
- Generic
OrNull[T]—opt.OrNull(0)→ null,opt.OrNull(42)→ valid - Typed constructors —
StringOrNull,IntOrNull,Int32OrNull,Int16OrNull,FloatOrNull,BoolOrNull,ByteOrNull,TimeOrNull
Usage
// Before (boilerplate in every project)
func optStr(s string) opt.String {
return opt.NewString(s, s != "")
}
row.City = optStr(c.City())
// After (library API)
row.City = opt.StringOrNull(c.City())Constructor Guide
| Constructor | Semantics |
|---|---|
From(v) |
Always valid — zero IS a value |
OrNull(v) |
Zero → null — zero means "not set" |
FromPtr(p) |
nil → null |
New(v, valid) |
Manual control |
Install
go get github.com/coregx/opt@v0.2.0Full docs: README | pkg.go.dev
v0.1.0 — Optional types for Go
First Release
opt — Go-idiomatic Option<T> with full SQL + JSON integration.
Highlights
- Generic
Value[T]— foundation onsql.Null[T](Go 1.24+) - 9 concrete types — String, Int, Int32, Int16, Float, Bool, Byte, Time
Field[T]— three-state (absent/null/value) for PATCH API — unique in Go ecosystem- Functional API —
Map,FlatMap,Equal zero/subpackage — alternative semantics (zero value = null)- Zero-allocation unmarshal, Bool marshal <1ns
encoding/json/v2compatible- Stdlib only — zero external dependencies
Install
go get github.com/coregx/opt@v0.1.0Quick Start
name := opt.StringFrom("Alice")
age := opt.NewInt(0, false) // null
fmt.Println(name.Or("unknown")) // "Alice"
fmt.Println(age.OrZero()) // 0
data, _ := json.Marshal(struct {
Name opt.String `json:"name"`
Age opt.Int `json:"age"`
}{name, age})
// {"name":"Alice","age":null}Full documentation: README | pkg.go.dev