Dependency injection in Golang using higher order functions

  • 以下分别为 Go 实现和 Java 实现的对比
interface DB {
  User SelectUser(String id)
}

public class UserService {
  private final DB db;

  public UserService(DB db) {
    this.DB = db;
  }

  public UserProfile getUserProfile(String id) {
    User user = this.DB.SelectUser(id);
    ...
    return UserProfile;
  }
}
type DB interface {
  SelectUser(id string) User
}

type getUserProfile func(id string) UserProfile

func newGetUserProfile(db DB) getUserProfile{
  return func (id string) UserProfile {
    user := db.SelectUser(id)
    ...
    return userProfile
  }
}
  • 从以上的代码可以看出,Go 的实现中没有刻意去创建对象,而是实现了一个工厂函数,所以整体的实现更精简一些。
2019年03月24日 / 18:37