为团队构建Go子包

汤姆·乔威特

我们目前正在将部分代码库移至Go,并为团队中的多个开发人员使用灵活的目录结构进行了一些努力。抱歉,如果这是一个菜鸟问题,但我在其他地方进行过搜索,但没有给出答案。

说我有一个具有以下结构的软件包:

package main

import "username/myproject/subpackage"

func main() {

}

和一个子包:

package subpackage

func main() {

}

这很好用,并且通过阅读Github上的其他人的代码,似乎这是定义子包的公认方法。

请参阅CoreOS源代码作为示例:https : //github.com/coreos/etcd/blob/master/main.go

我的问题是,由于Go的目录结构,这些程序包存储在特定的git repo中,并且如果团队中的其他人签出该代码进行工作,由于分叉,它们的目录结构也会有所不同。路径和导入语句中的用户名将更改。我们彼此拉动而不是使用集中式回购,这无济于事。

package main

import "otherusername/myproject/subpackage" (This line will have to be changed)

func main() {

}

我所读过的所有关于Go的内容都指出了它在团队环境中的可用性,所以我想知道我是否正确地了解了打包系统。

理想情况下,我们希望能够使用相对路径调用子包。我们习惯于使用名称空间,我知道Go没有它们。即:

package main

import "myproject/subpackage"

func main() {

}

但是Go找不到该文件,并且我确定这不是正确的处理方式,因为没有示例在线使用相对路径。

有几个问题:

1)软件包应具有已定义的所有者,并始终将用户名保留为导入路径的一部分吗?

2)此“所有者”存储库是否应为所有代码都应推送到/从中提取的集中存储库(例如公司或组织)?

3)处理代码的其他团队成员是否应该在创建者文件夹/命名空间中而不是在自己的代码/命名空间中使用它?

4)有没有一种方法可以在import语句中定义相对路径,如果可以,为什么没人做呢?是否认为这是不良做法?

5)如何用Go子包处理仓库分叉?

谢谢。

cre

精简版:

  1. 程序包应该始终是可获取的(可与一起使用go get package),因此99%的时间里,您的程序包都会被使用,github.com/user/reponame并且您始终将其保存在整个项目中。

  2. 是的,这应该是中央回购,并且贡献者(内部员工或社区)应该创建对该回购的拉取请求,而不是对其进行实际操作。

  3. 是的,他们应该在原始文件夹中使用它,并将其git远程分支(请参见下面的内容)

  4. 不,是的。您可以为non go-gettable包定义相对导入。也就是说,当您不在自己的小路中时,可以import "./subpackage"但是,如果转到GOPATH,Go将抱怨您混合了本地和远程导入。在一般情况下,请勿使用相对导入。

  5. 子包的派生是通过派生主包来进行的。

长版:

我将以一个有多个团队成员的Github存储库为例。

中央仓库将是http://github.com/central/repo

这个仓库有像github.com/central/repo/pkg,github.com/central/repo/whatever这样的子仓库。

最简单的方法和恕我直言,最好的方法是使用git remote。

假设我想为一个子仓库(或其他任何事情)做出贡献,过程很简单:就像其他语言一样,分叉该仓库。

现在,正如您所提到的,您拥有一个带有导入功能的存储库副本,该副本针对中央存储库。确实不是很实用。这就是为什么(希望用于简单的小型项目),我从来没有go get我的叉子,我go get是中央存储库,请转到$GOPATH/src/github.com/central/repo并添加我的遥控器git remote add creack https://github.com/creack/repo

现在,我可以处理该项目,就像将它用作中心项目一样使用它。完成后,我将分支推送到我的fork,然后创建一个pull请求。

在这种情况下,fork只是github上源代码的占位符,没有被使用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为启动板构建Python扩展包

来自分类Dev

TFS2013-使用git为团队项目克隆构建定义

来自分类Dev

TFS2013-使用git为团队项目克隆构建定义

来自分类Dev

XJC:为complexTypes生成子包

来自分类Dev

使用Maven构建时无法读取子包

来自分类Dev

构建自定义RPM,但程序包为空?

来自分类Dev

为shell脚本构建debian软件包

来自分类Dev

Cordova缺少为Ubuntu 16.04构建的软件包

来自分类Dev

构建自己的包,但加载后名称空间为空

来自分类Dev

如何在RStudio中为R包构建API文档?

来自分类Dev

为CLI脚本构建python软件包

来自分类Dev

为Debian构建一个软件包

来自分类Dev

构建自定义RPM,但程序包为空?

来自分类Dev

在Mac上为Windows构建Building R软件包

来自分类Dev

每个团队的Jenkins子域

来自分类Dev

没有基本软件包的情况下构建RPM子软件包

来自分类Dev

如何使用go1.6.2为32位Linux构建

来自分类Dev

Rails 构建了子级,但父级 id 为零

来自分类Dev

Dagger - 为子组件构建器设置动态值

来自分类Dev

从模板包生成大小为N的所有子包

来自分类Dev

Log4j2 - 为包和子包设置日志级别

来自分类Dev

为Spring Boot应用程序生成war软件包时,maven构建失败?

来自分类Dev

为不同的基于Debian的发行版构建相同的源包

来自分类Dev

强制NuGet下载为项目.Net版本构建的软件包

来自分类Dev

为Ubuntu 18.04和20.04构建Deb软件包:依赖关系问题

来自分类Dev

无法为Netbeans RCP应用程序构建OSGi捆绑包

来自分类Dev

如何正确触发TeamCity在git上为单个程序包构建?

来自分类Dev

包安装冻结在“为 4.15.0-33-generic 构建初始模块

来自分类Dev

为 buildroot 构建一个新包:hub-ctrl

Related 相关文章

热门标签

归档