【问题标题】:What is the common type to golangs *ecr.ECR and *ecs.ECS?golangs *ecr.ECR 和 *ecs.ECS 的常见类型是什么?
【发布时间】:2021-09-24 22:47:56
【问题描述】:

我想写一个根据输入返回服务的golang函数:

func GetService(service string) <what to write here> {
    session, _ := session.NewSession(&aws.Config{Region: aws.String(Region)})
    switch {
       case service == 'ecr':
        var svc *ecr.ECR
        svc = ecr.New(session)
        return svc
       case service == 'ecs':
        var svc *ecs.ECS
        svc = ecs.New(session)
        return svc
   }
}

这是 aws 服务的一种工厂,但是它们必须返回的常见类型是什么?

【问题讨论】:

    标签: amazon-web-services go aws-sdk factory aws-sdk-go


    【解决方案1】:

    你可以做的是编写两个函数,每个函数都会返回其中一个。

    另一种选择是返回一个接口并让用户在他知道它是什么的情况下转换该值。如果对象共享同名的方法,接口可以定义一些方法。

    我认为最合适的最后一种方法是模块化方法,我还将对其进行演示。但是使用伪代码。

    func NewSession
        session, err = (create session)
        (handle error)
        return session
    
    // now lets use this
    func MyUseCase
        ecr = NewEcr(NewSession())
        (use ecr)
    

    您在代码中抽象的东西根本不应该被抽象。用户应该创建他的实例,因为它比强制转换更简单,甚至更快。

    抽象的主要目标是简化顶层代码并消除重复。请记住这一点。

    【讨论】:

      猜你喜欢
      • 2018-02-14
      • 2015-09-06
      • 1970-01-01
      • 1970-01-01
      • 2020-08-03
      • 2011-09-03
      • 1970-01-01
      • 2012-09-19
      • 1970-01-01
      相关资源
      最近更新 更多