教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 Golang各版本特点以及安装包下载地址

Golang各版本特点以及安装包下载地址

发布时间:2022-02-16   编辑:jiaochengji.com
教程集为您提供Golang各版本特点以及安装包下载地址等资源,欢迎您收藏本站,我们将为您提供最新的Golang各版本特点以及安装包下载地址资源

安装包下载:

链接:https://pan.baidu.com/s/1AJdXS8P-dFA-UoK7vuosuw
提取码:ekks

对每一个开发者来说,Go 的发展历史是必须知道的知识。了解几年来每个发行版本的主要变化,有助于理解 Go 的设计思想和每个版本的优势/弱点。想了解特定版本的更详细信息,可以点击每个版本号的链接来查看修改记录。

<h2 id="-go-1-0-https-blog-golang-org-go-version-1-is-released-2012-3-">Go 1.0 — 2012 年 3 月:</h2>

Go 的第一个版本,带着一份兼容性说明文档来保证与未来发布版本的兼容性,进而不会破坏已有的程序。

第一个版本已经有 <code>go tool pprof</code> 命令和 <code>go vet</code> 命令。 <code>go tool pprof</code> 与 Google 的 pprof C profiler 稍微有些差异。<code>go vet</code>(前身是 <code>go tool vet</code>)命令可以检查包中潜在的错误。

<h2 id="-go-1-1-https-blog-golang-org-go-11-is-released-2013-5-">Go 1.1 — 2013 年 5 月:</h2>

这个 Go 版本专注于优化语言(编译器,gc,map,go 调度器)和提升它的性能。下面是一些提升的例子:

这个版本也嵌入了竞争检测,在语言中是一个很强大的工具。

<em>你可以在我的文章 ThreadSanitizer 竞争检测中发现更多的信息。</em>

重写了 Go 调度器 显著地提升了性能。Go 调度器现在被设计成这样:

<code>M</code> 是一个 OS 线程,<code>P</code> 表示一个处理器(<code>P</code> 的数量不能大于 GOMAXPROCS),每个 <code>P</code> 作为一个本地协程队列。在 1.1 之前 <code>P</code> 不存在,协程是用一个全局的 mutex 在全局范围内管理的。随着这些优化,工作窃取也被实现了,允许一个 <code>P</code> 窃取另一个 <code>P</code> 的协程:

<em>阅读 Jaana B.Dogan 的 Go 的工作窃取调度器 可以查看更多关于 Go 调度器和工作窃取的信息。</em>

<h2 id="-go-1-2-https-blog-golang-org-go12-2013-12-">Go 1.2 — 2013 年 12 月:</h2>

本版本中 <code>test</code> 命令支持测试代码覆盖范围并提供了一个新命令 <code>go tool cover</code> ,此命令能测试代码覆盖率:

这个命令也能提供覆盖信息:

<h2 id="-go-1-3-https-blog-golang-org-go1-3-2014-6-">Go 1.3 — 2014 年 6 月:</h2>

这个版本对栈管理做了重要的改进。栈可以申请连续的内存片段,提高了分配的效率,使下一个版本的栈空间降到 2KB。

栈频繁申请/释放栈片段会导致某些元素变慢,本版本也改进了一些由于上述场景糟糕的分配导致变慢的元素。下面是一个 <code>json</code> 包的例子,展示了它对栈空间的敏感程度:

使用连续的栈修复了这个元素效率低下的问题。下面是另一个例子,<code>html/template</code> 包的性能对栈大小也很敏感:

<em>阅读我的Go 协程栈空间的发展查看更多信息。</em>

这个版本在 <code>sync</code> 包中发布了 <code>Pool</code>。 这个元素允许我们复用结构体,减少了申请的内存的次数,同时也是很多 Go 生态获得改进的根源,如标准库或包里的 <code>encoding/json</code> 或 <code>net/http</code>,还有 Go 社区里的 <code>zap</code>。

<em>可以在我的文章 Sync.Pool 设计理解 中查看更多关于 <code>Pool</code> 的信息。</em>

Go 团队也对通道作了改进,让它们变得更快。下面是以 Go 1.2 和 Go 1.3 作对比运行的基准:

<h2 id="-go-1-4-https-blog-golang-org-go1-4-2014-12-">Go 1.4 — 2014 年 12 月:</h2>

此版本带来了官方对 Android 的支持,golang.org/x/mobile ) 让我们可以只用 Go 代码就能写出简单的 Android 程序。

归功于更高效的 gc,之前用 C 和汇编写的运行时代码被翻译成 Go 后,堆的大小降低了 10% 到 30%。

与版本无关的一个巧合是,Go 项目管理从 Mercurial 移植到了 Git,代码从 Google Code 移到了 Github。

Go 也提供了 <code>go generate</code> 命令通过扫描用 <code>//go:generate</code> 指示的代码来简化代码生成过程。

<em>在 Go 博客 和文章生成代码中可以查看更多信息。</em>

<h2 id="-go-1-5-https-blog-golang-org-go1-5-2015-8-">Go 1.5 — 2015 年 8 月:</h2>

这个新版本,发布时间推迟了两个月,目的是在以后每年八月和二月发布新版本:

这个版本对 gc 进行了重新设计。归功于并发的回收,在回收期间的等待时间大大减少。下面是一个 Twitter 生产环境的服务器的例子,等待时间由 300ms 降到 30ms:

这个版本也发布了运行时追踪,用命令 <code>go tool trace</code> 可以查看。测试过程或运行时生成的追踪信息可以用浏览器窗口展示:

<h2 id="-go-1-6-https-blog-golang-org-go1-6-2016-2-">Go 1.6 — 2016 年 2 月:</h2>

这个版本最重大的变化是使用 HTTPS 时默认支持 HTTP/2。

在这个版本中 gc 等待时间也降低了:

<h2 id="-go-1-7-https-blog-golang-org-go1-7-2016-8-">Go 1.7 — 2016 年 8 月:</h2>

这个版本发布了 context 包,为用户提供了处理超时和任务取消的方法。

<em>阅读我的文章 传递上下文和取消来获取更多关于 context 的信息。</em>

对编译工具链也作了优化,编译速度更快,生成的二进制文件更小,有时甚至可以减小 20% 到 30%。

<h2 id="-go-1-8-https-blog-golang-org-go1-8-2017-2-">Go 1.8 — 2017 年 2 月:</h2>

把 gc 的停顿时间减少到了 1 毫秒以下:

其他的停顿时间已知,并会在下一个版本中降到 100 微秒以内。

这个版本也改进了 defer 函数:

<em>我的文章 defer 语句工作机制中有更多信息。</em>

<h2 id="-go-1-9-https-blog-golang-org-go1-9-2017-8-">Go 1.9 — 2017 年 8 月:</h2>

这个版本支持下面的别名声明:

<pre><code>type byte = uint8 </code></pre>

这里 <code>byte</code> 是 <code>uint8</code> 的一个别名。

<code>sync</code> 包新增了一个 Map 类型,是并发写安全的。

<em>我的文章 Map 与并发写 中有更多信息。</em>

<h2 id="-go-1-10-https-blog-golang-org-go1-10-2018-2-">Go 1.10 — 2018 年 2 月:</h2>

<code>test</code> 包引进了一个新的智能 cache,运行会测试后会缓存测试结果。如果运行完一次后没有做任何修改,那么开发者就不需要重复运行测试,节省时间。

<pre><code>first run: ok /go/src/retro 0.027s second run: ok /go/src/retro (cached) </code></pre>

为了加快构建速度,<code>go build</code> 命令现在也维持了一份最近构建包的缓存。

这个版本没有对 gc 做实际的改变,但是确定了一个新的 SLO(Service-Level Objective):

<h2 id="-go-1-11-https-blog-golang-org-go1-11-2018-8-">Go 1.11 — 2018 年 8 月:</h2>

Go 1.11 带来了一个重要的新功能:Go modules。去年的调查显示,Go modules 是 Go 社区遭遇重大挑战后的产物:

第二个特性是实验性的 WebAssembly,为开发者提供了把 Go 程序编译成一个可兼容四大主流 Web 浏览器的二进制格式的能力。

<h2 id="-go-1-12-https-blog-golang-org-go1-12-2019-2-">Go 1.12 — 2019 年 2 月:</h2>

基于 <code>analysis</code> 包重写了 <code>go vet</code> 命令,为开发者写自己的检查器提供了更大的灵活性。

<em>我的文章构建自己的分析器中有更多信息。</em>

<h2 id="-go-1-13-https-blog-golang-org-go1-13-2019-9-">Go 1.13 — 2019 年 9 月:</h2>

改进了 <code>sync</code> 包中的 <code>Pool</code>,在 gc 运行时不会清除 pool。它引进了一个缓存来清理两次 gc 运行时都没有被引用的 pool 中的实例。

重写了逃逸分析,减少了 Go 程序中堆上的内存申请的空间。下面是对这个新的逃逸分析运行基准的结果:

<h2 id="-go1-14-https-blog-golang-org-go1-14-2020-2-">Go1.14 - 2020 年 2 月:</h2>

现在 Go Module 已经可以用于生产环境,鼓励所有用户迁移到 Module。该版本支持嵌入具有重叠方法集的接口。性能方面做了较大的改进,包括:进一步提升 defer 性能、页分配器更高效,同时 timer 也更高效。

现在,Goroutine 支持异步抢占。

 

到此这篇关于“Golang各版本特点以及安装包下载地址”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
【跟着我们学Golang】Go语言全平台安装
go基础(1)安装系统环境以及工具
给大家推荐一个bind下载地址
Go语言环境搭建(Windows版本)2020
Go语言安装环境
解决支付宝安全控件安装后还提示安装办法
安装Elasticsearch7.4.2、IK分词器以及Head插件步骤
Golang 微服务 - 01 环境和工具
GOLANG环境安装
CentOS 7下安装nsq

[关闭]
~ ~