Bulding pointers to pointers can be tricky and need some extra lines of code.
We could use a generic Optional type behind some command flag:
type Optional[T any] struct {
Valid bool
Value T
}
func NewValidOptional[T any](value T) Optional[T] {
return Optional[T]{
Valid: true,
Value: value,
}
}
func NewEmptyOptional[T any]() Optional[T] {
return Optional[T]{
Valid: false,
}
}
func init() {
v1 := NewValidOptional(uuid.Nil)
v2 := NewEmptyOptional[uuid.UUID]()
}