Exercises & activities from the go workshop provided by Packt: https://courses.packtpub.com/courses/go
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

62 lines
1.2 KiB

  1. package main
  2. import (
  3. "errors"
  4. "fmt"
  5. )
  6. func doubler(v interface{}) (string, error) {
  7. switch t := v.(type) {
  8. case string:
  9. return t + t, nil
  10. case bool:
  11. if t {
  12. return "truetrue", nil
  13. }
  14. return "falsefalse", nil
  15. case float32, float64:
  16. if f, ok := t.(float64); ok {
  17. return fmt.Sprint(f * 2), nil
  18. }
  19. return fmt.Sprint(t.(float32) * 2), nil
  20. case int:
  21. return fmt.Sprint(t * 2), nil
  22. case int8:
  23. return fmt.Sprint(t * 2), nil
  24. case int16:
  25. return fmt.Sprint(t * 2), nil
  26. case int32:
  27. return fmt.Sprint(t * 2), nil
  28. case int64:
  29. return fmt.Sprint(t * 2), nil
  30. case uint:
  31. return fmt.Sprint(t * 2), nil
  32. case uint8:
  33. return fmt.Sprint(t * 2), nil
  34. case uint16:
  35. return fmt.Sprint(t * 2), nil
  36. case uint32:
  37. return fmt.Sprint(t * 2), nil
  38. case uint64:
  39. return fmt.Sprint(t * 2), nil
  40. default:
  41. return "", errors.New("unsupported type passed")
  42. }
  43. }
  44. func main() {
  45. res, _ := doubler(-5)
  46. fmt.Println("-5: ", res)
  47. res, _ = doubler(5)
  48. fmt.Println("5: ", res)
  49. res, _ = doubler("yum")
  50. fmt.Println("yum: ", res)
  51. res, _ = doubler(true)
  52. fmt.Println("true:", res)
  53. res, _ = doubler(float32(3.14))
  54. fmt.Println("3.14:", res)
  55. }