greet_service.go 1000 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package service
  2. import (
  3. "fmt"
  4. "LMS/database"
  5. "LMS/environment"
  6. )
  7. // GreetService example service.
  8. type GreetService interface {
  9. Say(input string) (string, error)
  10. }
  11. // NewGreetService returns a service backed with a "db" based on "env".
  12. func NewGreetService(env environment.Env, db database.DB) GreetService {
  13. service := &greeter{db: db, prefix: "Hello"}
  14. switch env {
  15. case environment.PROD:
  16. return service
  17. case environment.DEV:
  18. return &greeterWithLogging{service}
  19. default:
  20. panic("unknown environment")
  21. }
  22. }
  23. type greeter struct {
  24. prefix string
  25. db database.DB
  26. }
  27. func (s *greeter) Say(input string) (string, error) {
  28. if err := s.db.Exec("simulate a query..."); err != nil {
  29. return "", err
  30. }
  31. result := s.prefix + " " + input
  32. return result, nil
  33. }
  34. type greeterWithLogging struct {
  35. *greeter
  36. }
  37. func (s *greeterWithLogging) Say(input string) (string, error) {
  38. result, err := s.greeter.Say(input)
  39. fmt.Printf("result: %s\nerror: %v\n", result, err)
  40. return result, err
  41. }