package optional import "log" func (self *Optional[T]) IfPresent(action func(T)) { if self.Present { action(self.Value) } } func (self *Optional[T]) OrElsePanic(err error) T { return self.OrElsePanicF(func() error { return err }) } func (self *Optional[T]) OrElsePanicF(errorSupplier func() error) T { if self.Present { return self.Value } err := errorSupplier() panic(err) } func (self *Optional[T]) OrElseFatal(err error) T { return self.OrElseFatalF(func() error { return err }) } func (self *Optional[T]) OrElseFatalF(errorSupplier func() error) T { if self.Present { return self.Value } err := errorSupplier() var returnStub T log.Fatal(err) // Компилятор без return не пропустит, но сюда никогда не дойдет из-за фатала выше. return returnStub } func (self *Optional[T]) OrElse(defaultValue T) T { if self.Present { return self.Value } return defaultValue } func (self *Optional[T]) OrElseGet(defaultValueSupplier func() T) T { if self.Present { return self.Value } return defaultValueSupplier() }