gob/option/option.go

43 lines
760 B
Go
Raw Normal View History

2023-09-23 10:28:10 +00:00
package option
import (
"fmt"
)
2023-09-23 10:28:10 +00:00
// Option permet de définir des valeurs optionnelles, afin de se passer de nil.
type Option[T any] struct {
v T
ok bool
}
// Some retourne une valeur optionnelle existante.
func Some[T any](v T) (o Option[T]) {
o.v, o.ok = v, true
return
}
// None retourne une option vide.
func None[T any]() (o Option[T]) {
return
}
// Get retourne la valeur de loption et un booléen pour dire si elle est initialisée ou non.
func (o Option[T]) Get() (v T, ok bool) {
if ok = o.ok; ok {
v = o.v
}
return
}
// IsDefined retourne vrai si loption est initialisée.
func (o Option[T]) IsDefined() bool {
return o.ok
}
func (o Option[T]) String() string {
return fmt.Sprintf(`{
value: %v,
ok: %v,
}`, o.v, o.ok)
}