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  }