Golang语言可以说现在炙手可热,大家熟悉的Kubernates 就是使用Golang开发的。
我们在最近于伦敦和圣地亚哥举行的GopherCon大会上调查了1000多名开发者,以更好地了解Go 开发社区和对Go Module的总体看法。随着最近发布的Go 1.13版本,现在是向社区分享一些有趣数据的好时机。

BTW, 在JFrog,我们也是Go开发者(JFrog CLI和Xray都是用Go编写的)。 同时也是GoLang社区的贡献者, 并为社区维护贡献了公共注册中心 Gocenter(goproxy) https://gocenter.io/. 加速Golang语言开发人员构建速度。

以下是我们学到的一些关键的东西:

Go开发人员是高度投入的
绝大多数的Go开发者都在使用最新版本的GoLang。超过70%的受访者表示使用的是最新版本的Go 1.12。
同样值得注意的是,超过82%的Golang开发者使用的是1.11或更新的版本,因此能够使用Go Module。只有一小部分报告使用了Go的早期版本。
关注你所关注的 - Golang社区调研报告_第1张图片

几乎同样多的使用最新版本的Go开发人员也报告在他们的组织中采用了Go Module。也有相当多的人希望尽快使用Go Module,这样到2020年中期,其使用率将上升到至少80%,并可能接近100%。
关注你所关注的 - Golang社区调研报告_第2张图片

GoLang被广泛应用于各个行业
虽然Go开发应用于广泛的计算领域,但DevOps仅排在Web开发之后,有近五分之一的报告称他们使用Go来实现这些目的。系统、数据库和网络应用程序的得分也很高,这表明在移动和嵌入式设备等有前途的领域还有很大的增长空间。
关注你所关注的 - Golang社区调研报告_第3张图片

选择Go Module很难
当开发人员选择开源组件时,他们倾向于追求安全性和质量。但在如何判断 Go Module的风险方面,几乎没有共识。
大多数报告显示人们偏好用他人使用最多的包,以及流行度所带来的保证。同时安全漏洞也是一个问题,开发人员如何确定一个包的风险在各种各样的条件下是不同的,如内网环境和外网环境同一个漏洞的处理可能是不一样的。
关注你所关注的 - Golang社区调研报告_第4张图片

如何更好更快的选择Go Module
由于开发人员在选择越来越多的Go模块时遇到了困难,GoCenter通过交互搜索帮助用户发现。一旦你有了结果,GoCenter会提供你需要的所有信息来决定哪些模块最适合你的需求,包括活动和星级。我们也正在开发一个系统,根据选择的标准来给模块打分,这将更好的帮助Golang开发人员更快的选择到合适的模块。

GoCenter
我们感谢所有对我们GoLang调查做出回应的开发者。我们从中获得的信息将帮助我们帮助您,特别是在我们继续使GoCenter成为帮助采用Go Module的有用工具的情况下。

如果您还没有听说过GoCenter,那么它提供了不可变的、版本化的模块的中心源,这些模块直接从公共源存储库中的Go项目进行处理和验证。在众多好处中,使用GoCenter可以加快GoLang应用程序的构建时间。

GoCenter现在托管了超过260,000个版本化的Go Module,这些模块可以免费提供给Go开发者社区。

GoCenter与Golang 1.13的最佳实践

  1. 使用Gocenter 作为Goproxy
    在Golang 1.13中,Go Module的支持在默认情况下是启用的。尽管Go客户端的新安装会自动设置一个默认的google托管代理,在国内你可以覆盖它并使用你选择的Go Module代理,比如GoCenter。

要使用GoCenter作为版本化go模块的代理,请将GOPROXY环境变量设置为GoCenter URL:
关注你所关注的 - Golang社区调研报告

Golang 1.13中的新特性允许您在GOPROXY中指定由逗号分隔的多个代理,以及直接从源代码下载模块的Direct 模式(这种模式的场景是goproxy中没有对应模块或版本是会返回404)。但是GoCenter目前支持了自动包含特性,意味着您在使用GoCenter进行代理时不需要使用这些Direct模式,当gocenter中目前没有缓存对用组件时,会自动触发到源码库中自动拉取对应组件以及版本。
https://github.com/jfrog/gocenter/blob/master/releases.md#2019-march-27-enhanced-automatic-inclusion-of-go-modules

  1. 校验和(checksum)数据库支持
    从Golang的1.13版开始,go get通过谷歌在sum.golang.org上维护的一个可审计的校验和数据库来执行模块的身份验证。版本1.13会使用GOSUMDB环境变量中默认设置这个校验和的DB URL。
    GoCenter已经通过代理sum.golang.org帮助我们加速构建。如果你的GOPROXY设置为GoCenter,你不需要改变任何东西-你已经通过GoCenter验证你的模块了!

  2. 私有Go Module 仓库
    GoCenter用于代理通过公共源存储库(如Github)共享的Go Module。Golang 1.13还引入了一些环境变量,特别是GOPRIVATE,用于绕过代理和校验和验证,从私有存储库下载模块版本, 此场景比较适合企业内部有大量自研发Go Module。您可以在Golang文档中了解如何使用它们。

  3. 版本验证
    在1.13版本中,为Go Module使用正确的后缀非常重要。go命令现在对请求的版本字符串执行额外的验证,如果模块不符合语义导入版本控制,go get将失败。因此,在Golang 1.13之前加载的模块的伪版本(pseudo version)可能会失败。