main.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package main
  2. import "fmt"
  3. //举例说明:
  4. // 这个例子完成一个旅游,旅游需要依赖一个交通工具和旅游目的地,旅行完再发一个朋友圈
  5. // 旅行结构体
  6. type Trip struct {
  7. Msg string
  8. TrafficTools *Airplane //交通工具,举例飞机
  9. Destination *DunHuang //目的地,举例敦煌
  10. }
  11. // 旅游的provider
  12. func NewTrip(trafficTools *Airplane, destination *DunHuang) *Trip {
  13. return &Trip{
  14. TrafficTools: trafficTools,
  15. Destination: destination,
  16. }
  17. }
  18. // 旅行,发朋友圈的操作
  19. func (t *Trip) CircleOfFriends() {
  20. fmt.Printf("我坐%s去%s旅游了,好开心\n", t.TrafficTools.Name, t.Destination.Name)
  21. }
  22. // 交通工具相关
  23. type Airplane struct {
  24. Name string
  25. }
  26. func NewAirplane() *Airplane {
  27. return &Airplane{
  28. Name: "波音飞机",
  29. }
  30. }
  31. // 目的地相关
  32. type DunHuang struct {
  33. Name string
  34. }
  35. func NewDunHuang() *DunHuang {
  36. return &DunHuang{
  37. Name: "敦煌",
  38. }
  39. }
  40. // 手动依赖注入
  41. func HandleDI() {
  42. dh := NewDunHuang()
  43. air := NewAirplane()
  44. trip := NewTrip(air, dh)
  45. trip.CircleOfFriends()
  46. }
  47. func main() {
  48. //调用手动依赖注入
  49. HandleDI()
  50. //调用wire生成的依赖注入
  51. GetTrip().CircleOfFriends()
  52. }