【问题标题】:Subfolders and packages when using Appengine and Go使用 Appengine 和 Go 时的子文件夹和包
【发布时间】:2015-09-21 16:09:36
【问题描述】:

在为 appengine 部署和/或测试 Go 项目时,appcfg.py 和 dev_appserver.py 工具用于编译项目

当所有 *.go 文件都在一个文件夹中时效果很好,但是当代码被分成子文件夹时如何编译项目 - 还需要相互访问函数和常量?

在 Go 中,子文件夹定义为包边界,我看不出有一种方法可以让 appengine 工具在测试或部署之前从一个项目编译多个包。

感谢您提供有关如何解决此问题的建议,而不是将其全部保存在一个文件夹中。即使解决方案是一次处理一个包(文件夹),关于如何构建它以便在一个使用所有这些包的项目上快速迭代的建议也是值得赞赏的。谢谢!

【问题讨论】:

    标签: google-app-engine go


    【解决方案1】:

    这里没有魔法。只需确保您的每个 go 文件都放在一个文件夹中,而不是放在您的 appengine 项目的根目录中。

    例如:

    -[Project root]
        app.yaml
        -[packagea]
            packagea.go
            -[packageab]
                packageab.go
        -[packageb]
                packageb.go
    

    在上面的例子中,包声明应该如下:

    • packagea.go:

      package packagea
      
    • packageab.go

      package packageab
      
    • packageb.go

      package packageb
      

    例如,如果packageb 同时使用packageapackageab,则将它们导入为:

    • packageb.go:

      import (
          "packagea"
          "packagea/packageab"
      )
      

    注意:

    请注意,您不能创建导入周期(例如 packagea 导入 packagebpackageb 导入 packagea):

    Spec: Import declarations

    导入声明声明了导入包和导入包之间的依赖关系。包直接或间接导入自身是非法的。

    您必须构建代码和包以避免导入循环,否则您的代码将无法编译。

    【讨论】:

    • 试图让它工作......到目前为止还没有运气。如果 packagea 为空,在 packageb 中导入 packageab 是否仍为 packagea/packageb?
    • @davidkomer 是的,如果文件在项目内的文件夹packagea/packageab 下,导入仍然必须是packagea/packageab
    猜你喜欢
    • 2016-08-05
    • 1970-01-01
    • 2012-07-02
    • 2015-09-14
    • 1970-01-01
    • 2012-07-24
    • 2015-06-07
    • 2020-12-26
    • 2016-03-10
    相关资源
    最近更新 更多