package option import ( "fmt" ) // 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 l’option 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 l’option 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) }