云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

MySQL数据库_百度云ppt模板_免费1年

小七 141 0

训练你的围棋依赖性

在DigitalOcean内部,我们的Go代码中正在酝酿一个问题基地。分开项目是在单独的Git存储库中开发的,为了将升级后的依赖项的影响降到最低,我们将所有依赖项本地镜像到单个Git存储库中。这些项目依赖于不同版本的包,问题是没有确定的方法来区分哪个项目需要什么和什么什么时候。比如作为一个团队,我们知道这种方法并不是最佳的,但就管理软件包的单一方法达成共识是一个艰难的决定。经过一点努力,我们找到了一个解决方案,解决了在不需要外部管理工具的情况下管理包版本的问题。我们把我们的努力称为cthulhu,这是我们的Go存储库。我们也把它称为单声道回购。什么是单笔回购吗?构建云是一项快节奏的业务。我们有提供API服务的Go项目,在服务器之间移动数据,并处理数据。因为这些项目中的许多共享一组公共组件,所以我们认为创建单个Git项目并导入所有现有项目会更容易。以下是项目的高层结构:```[html]{`.├——自述文件.md├—————doccode│└—src└—第三方└—src````这是一种单存储库,因为我们只有一个存储库。我们的设置很简单。我们有一个根目录作为cthulhu的基础。在这个根目录下,我们有两个额外的目录:我们的代码是"docode",其他人的是"third_party"代码。收件人开发Go软件,将你的GOPATH设置为`${cthulu}/第三方:${cthulu}/docode`。就这样!首先列出"第三方"目录的原因是为了确保在使用"go get"获取包时,它们将安装在该目录的src/而不是"docode"中。此时,您可以创建一个可以源于shell的脚本,然后开始开发。为什么这样做很好?首先,我们认为mono回购是个好主意,因为使用它是无摩擦的。配置单个开发人员的工作站。It这也是有益的,因为在DigitalOcean工程团队发展的这一点上,拥有一个用于编辑软件的存储库意味着项目丢失的可能性更小。使用mono repo和我们团队命名服务的简单约定很容易找到代码。我们有三种类型的代码:doge,我们的内部标准库,它包含在整个存储库中重用的代码;服务,它包含我们所有的业务逻辑;和工具,它们是一次性的应用程序和实用程序,用于管理我们的Go代码,比如我们的自定义导入重写器,它根据当前的数据对导入进行排序和分离代码指导原则。``[html]{`.├—docode│└—src│├—doge│└—服务││—工具—第三方```,因为我们所有的Go都在一个存储库中,所有东西都使用相同版本的外部和内部依赖项。如果一个包被升级,依赖于该包的每个服务都会收到新功能。这有助于处理安全问题。不用显式地管理版本也很好。就我们的目的而言,规范版本是"third_party/src"下的内容。如果您的工作需要升级,请安装新的依赖项,运行测试,然后发送请求。不是全部彩虹。我们的MonoRepo对我们来说是一个很好的解决方案,但它并不是没有自己的一套警告,最大的问题之一就是Git的问题。Git规定了在主存储库中包含依赖项的子模块。当子模块正常工作时,没有问题,但当它们不工作时,对所有相关人员来说都是一个棘手的难题。在这种情况下,我们选择回避这个问题。我们没有处理子模块或外部管理解决方案,而是为依赖项重命名git config目录(如果有)。因为.git目录不存在,git认为配置只是另一组文件。如果要升级包,只需还原git目录名,然后进行更新。这不是一次令人惊奇的经历,但确实如此简单。另外,当您与所有其他项目共享存储库时,您将继承其他项目的所有问题。这意味着,如果我们的某个服务有一个慢速测试套件,那么所有服务都有一个慢速测试套件。一般来说,测试Go是非常快的。当你涉及外部测试时,比如数据库集成,事情会变慢。解决方法是使用short标志跳过长测试。另一种解决方案是对单个包运行测试。数字海洋工程团队仍在测试和决定哪种解决方案最适合美国。哪里我们下一步去吗?目前,我们的mono repo很好地满足了我们的需求。对于新开发人员来说,这是一个很容易理解的概念,它不需要任何外部依赖,并且它允许我们共同定位所有的Go代码。简言之,这对我们来说是件好事,我们相信这对其他与Go-as合作的团队来说也是件好事好吧。再见布莱恩·利尔斯