Thank you very much, I’m definitely going to take this for a spin! Can I ask if you or someone you know uses this? I’m curious what the experience is like and if theres any downfalls.
funcGetConfig(path string) mo.Result[*Config] {
return mo.Try(func(*Config, error) {
// logic to get the config
})
}
conf := GetConfig.OrElse(&DefaultConfig)
While it might not make much sense for a function you use just once, it can get actually pretty useful to simplify error handling like this for something you use more often.
mostly the Result type. MustGet where you’d except a panic OrElse to pass a fallback value (can be a function with return value of the same type, as the inner function, but without an error). Useful in e.g. more complex constructors where some fields might not be readily available. Either can for instance be useful to have arbitrary type unions in structs. I haven’t used Option that much but seems similar to Rust’s.
Here you are https://pkg.go.dev/github.com/samber/mo
Thank you very much, I’m definitely going to take this for a spin! Can I ask if you or someone you know uses this? I’m curious what the experience is like and if theres any downfalls.
A simple example:
func GetConfig(path string) mo.Result[*Config] { return mo.Try(func (*Config, error) { // logic to get the config }) } conf := GetConfig.OrElse(&DefaultConfig)
While it might not make much sense for a function you use just once, it can get actually pretty useful to simplify error handling like this for something you use more often.
mostly the
Result
type.MustGet
where you’d except a panicOrElse
to pass a fallback value (can be a function with return value of the same type, as the inner function, but without an error). Useful in e.g. more complex constructors where some fields might not be readily available.Either
can for instance be useful to have arbitrary type unions in structs. I haven’t usedOption
that much but seems similar to Rust’s.