【问题标题】:Should I import package if it contains the same name part?如果包含相同名称的部分,我应该导入包吗?
【发布时间】:2020-01-12 21:53:38
【问题描述】:

我有一个奇怪的问题。如果包含其他包名的一半,我是否需要在 Go 中导入 2 个包?

例如,如果我已经导入 "os/exec"

,我应该导入 "os"

【问题讨论】:

    标签: go package


    【解决方案1】:

    没有。事实上,即使你想,你也做不到。导入您不直接引用的包将阻止 Go 编译。见this example

    package main
    
    import (
        "os"
        "os/exec"
    )
    
    func main() {
        _ = exec.Cmd{}
    }
    

    产生这个编译错误:

    ./prog.go:4:2: 导入但未使用:“os”

    仅当您需要os/exec 中的功能时才导入os/exec,并且仅当您需要os 中的功能时才导入os

    在某些(但绝对不是全部)情况下,包 x/y 可能依赖于 x,但它会自行导入,因此您无需担心。

    【讨论】:

      【解决方案2】:

      错误

      package main
      
      import (
          "os/exec"
      )
      
      func main() {
          _ = exec.Cmd{}
          _, _ = os.Getwd()
      }
      

      上面的代码会报错

      未定义:操作系统

      因为我们没有导入os 包。正确的实现是:

      package main
      
      import (
          "os"
          "os/exec"
      )
      
      func main() {
          _ = exec.Cmd{}
          _, _ = os.Getwd()
      }
      

      错误

      package main
      
      import (
          "os"
          "os/exec"
      )
      
      func main() {
          _ = exec.Cmd{}
      }
      

      上面的代码会报错

      导入但未使用:“os”

      因为我们没有使用os 包。正确的实现是:

      package main
      
      import (
          "os/exec"
      )
      
      func main() {
          _ = exec.Cmd{}
      }
      

      因此,如果您需要 os 包的功能,那么您应该导入它,如果您需要 os/exec 的功能,您还应该明确导入它。否则,如果您的代码中只需要其中一个,则不需要同时导入osos/exec

      【讨论】:

      • @Flimzy For example should I import "os" if I already imported "os/exec"我给出了这个问题的答案。
      • 这也是我的答案,但为了清楚起见,我给出了多个代码示例:)
      • 您的回答对问题有不同的(我认为是不正确的)解释。
      • @Flimzy 可能是一种沟通或语言问题
      • 我在回答中添加了更多描述,我认为可能就足够了
      猜你喜欢
      • 2022-01-25
      • 1970-01-01
      • 2013-02-07
      • 1970-01-01
      • 1970-01-01
      • 2018-08-09
      • 1970-01-01
      • 2017-09-30
      • 2020-03-30
      相关资源
      最近更新 更多