github.com/l3x/learn-fp-go@v0.0.0-20171228022418-7639825d0b71/2-design-patterns/ch04-solid/02_maybe/main.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "maybe" 6 ) 7 8 type Work struct { Succeeded bool } 9 10 func main() { 11 fmt.Println("Has value:", maybe.SomeString("Hi")) 12 fmt.Println("Is empty :", maybe.EmptyString()) 13 fmt.Println() 14 printResults(Work{Succeeded:true}) 15 fmt.Println() 16 printResults(Work{Succeeded:false}) 17 } 18 19 func runTask(success bool) maybe.Either { 20 if success { 21 return maybe.EitherSuccess("I succeeded") 22 } else { 23 return maybe.EitherFailure(fmt.Errorf("ERROR: %s", "I failed")) 24 } 25 } 26 27 func printResults(work Work) { 28 maybeWorked := runTask(work.Succeeded) 29 fmt.Printf("Either: %+v\n", maybeWorked) 30 fmt.Println("maybeWorked.Succeeded:", maybeWorked.Succeeded()) 31 fmt.Println("maybeWorked.Failed:", maybeWorked.Failed()) 32 33 fmt.Println("maybeWorked.Succeeded().Val():", maybeWorked.Succeeded().Val()) 34 fmt.Printf("maybeWorked.Failed().Err(): %v\n", maybeWorked.Failed().Err()) 35 }