Data Modeling Patterns
Optional Value
A small struct can represent an optional value without relying on a sentinel string.
Optional Value
optional_value.go
package main
import "fmt"
type OptionalName struct {
Value string
Valid bool
}
func main() {
var hasNickname =
nickname := OptionalName{Value: "", Valid: hasNickname}
if hasNickname {
nickname.Value = "Ada"
}
display := "anonymous"
if nickname.Valid {
display = nickname.Value
}
fmt.Println("has_nickname=", hasNickname)
fmt.Println("valid=", nickname.Valid)
fmt.Println("display=", display)
}
package main
import "fmt"
type OptionalName struct {
Value string
Valid bool
}
func main() {
var hasNickname =
nickname := OptionalName{Value: "", Valid: hasNickname}
if hasNickname {
nickname.Value = "Ada"
}
display := "anonymous"
if nickname.Valid {
display = nickname.Value
}
fmt.Println("has_nickname=", hasNickname)
fmt.Println("valid=", nickname.Valid)
fmt.Println("display=", display)
}
optional value
Pair a value with a boolean when missing data should be explicit in the type.