github.com/tawesoft/golib/v2@v2.10.0/legacy/operator/example_test.go (about) 1 // This example demonstrates using operators in lookup tables for a 2 // command-line calculator program. 3 package operator_test 4 5 import ( 6 "bufio" 7 "fmt" 8 "os" 9 "strconv" 10 "strings" 11 12 "github.com/tawesoft/golib/v2/legacy/operator" 13 ) 14 15 type checkedOperation func(float64, float64) (float64, error) 16 17 var reader = bufio.NewReader(os.Stdin) 18 19 var operations = map[string]checkedOperation { 20 "+": operator.Float64Checked.Binary.Add, 21 "-": operator.Float64Checked.Binary.Sub, 22 "*": operator.Float64Checked.Binary.Mul, 23 "/": operator.Float64Checked.Binary.Div, 24 } 25 26 func getNumber(prompt string) float64 { 27 for { 28 fmt.Print(prompt) 29 var text, _ = reader.ReadString('\n') 30 var result, err = strconv.ParseFloat(strings.TrimSpace(text), 64) 31 if err != nil { 32 fmt.Printf("Sorry, try again. (%v)\n", err) 33 continue 34 } 35 return result 36 } 37 } 38 39 func getOperation(prompt string) checkedOperation { 40 for { 41 fmt.Print(prompt) 42 var text, _ = reader.ReadString('\n') 43 var operator, ok = operations[strings.TrimSpace(text)] 44 if !ok { 45 fmt.Println("Sorry, try again.") 46 continue 47 } 48 return operator 49 } 50 } 51 52 func Example() { 53 var firstNumber = getNumber("Enter a number (then press enter): ") 54 var operation = getOperation("Enter +, -, * or / (then press enter) for add, subtract, multiply, or divide: ") 55 var secondNumber = getNumber("Enter another number (then press enter): ") 56 var result, err = operation(firstNumber, secondNumber) 57 if err != nil { 58 fmt.Printf("Sorry, something went wrong: %v\n", err) 59 } else { 60 fmt.Printf("The result is %.2f!\n", result) 61 } 62 }