modulepackage
0.0.0-20230117041332-6715e831ac05
Repository: https://github.com/mattn/go-nulltype.git
Documentation: pkg.go.dev
# README
go-nulltype
Nullable types friendly to json.Encoder, json.Decoder, database/sql, fmt.Stringer, text/template, html/template, some of ORMs.
Supported types:
- NullBool
- NullString
- NullFloat64
- NullInt64
- NullTime
Usage
import "github.com/mattn/go-nulltype"
type User struct {
Name nulltype.NullString `json:"name"`
}
friendly to Stringer
var user User
fmt.Println(user.Name.Valid()) // false
fmt.Println(user.Name) // ""
user.Name.Set("Bob")
fmt.Println(user.Name.Valid()) // true
fmt.Println(user.Name) // "Bob"
fmt.Println(user.Name.StringValue() == "Bob") // true
user.Name.Reset()
fmt.Println(user.Name.Valid()) // false
fmt.Println(user.Name) // ""
friendly to json.MarshalJSON
var user User
fmt.Println(user.Name.Valid()) // false
json.NewEncoder(os.Stdout).Encode(user) // {"name": null}
user.Name.Set("Bob")
fmt.Println(user.Name.Valid()) // true
json.NewEncoder(os.Stdout).Encode(user) // {"name": "Bob"}
friendly to json.UnmarshalJSON
var user User
s := `{"name": "Bob"}`
json.NewDecoder(strings.NewReader(s)).Decode(&user)
fmt.Println(user.Name.Valid()) // true
fmt.Println(user.Name) // "Bob"
s = `{"name": null}`
json.NewDecoder(strings.NewReader(s)).Decode(&user)
fmt.Println(user.Name.Valid()) // false
fmt.Println(user.Name) // ""
friendly to database/sql
var user User
db.QueryRow(`SELECT name FROM users`).Scan(&user.Name)
fmt.Println(user.Name.Valid()) // true or false
fmt.Println(user.Name) // "Bob" or ""
db.Exec(`INSERT INTO users(name) VALUES($1)`, user.Name)
friendly to ORM
Struct tag with gorp.
type Post struct {
Id int64 `db:"post_id"`
Created int64
Title string `db:",size:50"`
Body nulltype.NullString `db:"body,size:1024"`
}
p := Post{
Created: time.Now().UnixNano(),
Title: title,
Body: nulltype.NullStringOf(body),
}
err = dbmap.Insert(&p)
Installation
go get github.com/mattn/go-nulltype
License
MIT
Author
Yasuhiro Matsumoto
# Functions
NullBoolOf return NullBool that the value is set.
NullFloat64Of return NullFloat64 that the value is set.
NullInt64Of return NullInt64 that the value is set.
NullStringOf return NullString that the value is set.
NullTimeOf return NullTime that the value is set.
# Structs
NullBool is null friendly type for bool.
NullFloat64 is null friendly type for float64.
NullInt64 is null friendly type for int64.
NullString is null friendly type for string.
NullTime is null friendly type for string.