【问题标题】:how to organize GO project packages if it will hosted on different repos (GitHub & SourceForge)如果 GO 项目包托管在不同的存储库(GitHub 和 SourceForge)上,如何组织它
【发布时间】:2018-12-27 00:53:13
【问题描述】:

假设我想创建一个项目并将其托管在 GitHub 上,我 必须 像这样创建项目结构:

src/github.com/user/      
     myproject/
     main.go
     util/
       fileutil.go

main.go 中,我必须将导入写为:

import github.com/user/myproject/util/fileutil

现在我也想把这个项目托管到 SourceForge 上,我应该复制整个项目并修改路径吗?似乎还不够好。有没有其他方法可以做到这一点?我需要的只是在 src 文件夹下创建我的项目,并且可以根据需要托管到任何 repo,而无需更改包。

【问题讨论】:

    标签: go


    【解决方案1】:

    如果开发的是应用程序而不是库

    如果您不打算让其他项目“导入”您自己的项目(也就是说,如果您正在实现应用程序而不是库),您可以避免在您的本地路径。

    注意:这不是推荐的方法,但从我的测试来看,它确实有效,如果您以这种方式构建代码,您可以编译、运行和测试您的代码。

    您可以按如下方式创建项目结构:

    src/
        myproject/
            main.go
            util/
                fileutil.go
    

    然后你可以像这样导入:

    import "myproject/util/fileutil"
    

    然后,您可以在任何地方托管 myproject 文件夹的内容,而无需更改项目文件中的路径。

    如果开发库

    如果您实际上正在开发一个其他人能够导入的库,那么它会变得更加复杂,因为这些项目实际上需要一个完整的路径来导入您的项目。

    您可以使用meta 标签创建一个“虚荣”导入路径,例如myproject.io/...,如下所述:

    https://golang.org/cmd/go/#hdr-Remote_import_paths

    这样,当go 工具查询您的myproject.io/ 页面时,您应该使用这样的标题进行响应:

    <meta name="go-import" content="myproject.io git https://github.com/user/myproject">
    

    如果您决定离开 github,然后更改您返回的标头。

    请注意,这不会阻止用户直接从 github 导入您的项目,如果您想避免需要使用 canonical import path 规范中描述的技术:

    https://golang.org/doc/go1.4#canonicalimports

    【讨论】:

    • @@eugenioy ,Thx 以这种方式发出,但仍然不如预期的方便。我正在开发一个APP模块(类似于Java Maven Module的概念),它可以被其他go项目设计导入。
    • @rellocswood,那么我描述的第二种方法就是要走的路。有关更多信息,请参见此处:texlution.com/post/golang-canonical-import-paths
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-28
    • 2012-12-10
    • 2015-06-15
    • 2012-12-04
    • 1970-01-01
    • 2017-01-18
    • 1970-01-01
    相关资源
    最近更新 更多