网站首页 > 技术文章 正文
Go语言的发布就像钟表一样规律——基本每六个月发布一次,广大程序员也不用等的太辛苦。要知道,Go语言现在已经十分火热了。Go 1.8于2017年2月发布,所以,还有两个月,GO 1.9将与广大程序员见面。
根据thedraft的发行说明,新版的Go语言有不小的变化,增加了对类别别名的支持,大多数更改是在工具链,运行时和库的实现层面。该版本还增加了并行编译包中的函数,同时更好地支持测试,包括一个新的位操作包,并具有新的并发映射类型。
键入别名
回到语言更改:新版本将支持类型别名以支持逐行代码修复,同时可在包之间移动类型。
提案中写道:主要动机是在大规模重构过程中实现逐步的代码修复,特别是将类型从一个包转移到另一个包,这样引用代码旧名与代码互操作指的是新名称。类型别名对于允许将大型软件包分解为具有单个导出API的多个软件包以及用于对现有软件包的扩展版本进行实验也是有用的。
简而言之,类型别名声明的形式如下:
type T1 = T2
该声明引入了一个别名T1,表示为T2的类型。也就是说,T1和T2都表示相同的类型。
兼容性
现有代码继续编译,符合兼容性准则。
在库中,go/ast的TypeSpec有一个新的领域,go/types有一个新的类型,即types.Alias。这些都是库级别的更改。Go类型语义的代码可能需要更新以处理别名,这会影响到编程工具,但这在几乎任何语言的更改中都是无可避免的。
Go 1.9 - 概述
性能
根据发布说明草案,由于垃圾收集器的加速,生成的代码更好,核心库的优化,大多数程序应该会运行得更快一些。
垃圾收集器
用于触发垃圾收集的库函数现在可触发并发垃圾收集。具体来说,runtime.GC,debug.SetGCPercent和debug.FreeOSMemory,可触发并发垃圾回收,阻止调用goroutine,直到垃圾收集完成。
此外,如果由于新的GOGC值的需要,debug.SetGCPercent函数可以仅触发垃圾回收,这使得可以即时调整GOGC。
在使用包含许多对象的大型(> 50GB)堆的应用程序中,对象的分配性能显着提高。
runtime.ReadMemStats函数即使对于非常大的堆也少于100μs。
工具
并行编译
Go编译器现在可利用多个内核支持并行编译程序包的功能。默认情况下,并行编译是打开的,但可以通过将环境变量G019CONCURRENTCOMPILATION设置为0来禁用。
vendor与./...匹配
./ ...不再匹配工具接收包名下vendor目录中的包,例如go test。要匹配vendor目录,请写./vendor / ....
编译器工具链
链接器现在将为Windows上的cgo可执行文件生成DWARF信息。
编译器现在包括生成的DWARF中的词法作用域,允许调试器隐藏不在范围内的变量。.debug_info部分现在是DWARF版本4。
GOARM和GO386的值将影响编译包的构建ID,由go工具的依赖关系缓存所使用。
Doc
长的参数列表现在被截断,这提高了go doc对某些生成代码的可读性。
go doc struct.field支持查看struct字段的文档。
Env
新的env -json flag启用JSON输出,而不是默认的操作系统特定的输出格式。
Test
go测试命令接受一个新的-list标志,它将正则表达式作为参数,并打印到stdout与其匹配的任何测试,基准或示例的名称,而不运行它们。
Pprof
go工具pprof命令现在使用环境中定义的HTTP代理信息usehttp.ProxyFromEnvironment。
TODO
TODO:完成记录各项工具更改
CL 42028:https://golang.org/cl/42028:cmd / asm:修正ARM的MULA指令的操作数顺序
CL 40112:https://golang.org/cl/40112:cmd / go:允许在go vet中进行完整的标志处理
CL 42990:https://golang.org/cl/42990:cmd / internal / obj / x86:add ADDSUBPS / PD
CL 40331:https://golang.org/cl/40331:cmd / link,runtime / cgo:启用OpenBSD上的PT_TLS
猜你喜欢
- 2024-11-02 武汉课工场大数据培训:Java正则表达式入坑指南
- 2024-11-02 Go语言进阶之路:并发爬虫,爬取空姐网所有相册图片
- 2024-11-02 golang常用库:gorilla/mux-http路由库使用
- 2024-11-02 golang 使用pprof和go-torch做性能分析
- 2024-11-02 Golang Gin 入门 (一)(golang官方教程)
- 2024-11-02 日志文件转运工具Filebeat笔记(日志转载)
- 2024-11-02 Linux 命令行下搜索工具大盘点,效率提高不止一倍
- 2024-11-02 SlimTrie:战胜Btree单机百亿文件的极致索引-实现篇
- 2024-11-02 Go的安全编程和防御性编程(输入验证和过滤)
- 2024-11-02 清华学神尹成带你学习golang2021(56)(Go语言测试命令)
- 1507℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 504℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 484℃MySQL service启动脚本浅析(r12笔记第59天)
- 465℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 462℃启用MySQL查询缓存(mysql8.0查询缓存)
- 442℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 422℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 418℃MySQL server PID file could not be found!失败
- 最近发表
-
- netty系列之:搭建HTTP上传文件服务器
- 让deepseek教我将deepseek接入word
- 前端大文件分片上传断点续传(前端大文件分片上传断点续传怎么操作)
- POST 为什么会发送两次请求?(post+为什么会发送两次请求?怎么回答)
- Jmeter之HTTP请求与响应(jmeter运行http请求没反应)
- WAF-Bypass之SQL注入绕过思路总结
- 用户疯狂点击上传按钮,如何确保只有一个上传任务在执行?
- 二 计算机网络 前端学习 物理层 链路层 网络层 传输层 应用层 HTTP
- HTTP请求的完全过程(http请求的基本过程)
- dart系列之:浏览器中的舞者,用dart发送HTTP请求
- 标签列表
-
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- linux删除一个文件夹 (65)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)