Go1.15更新了哪些功能
这篇文章主要介绍了Go1.15更新了哪些功能的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Go1.15更新了哪些功能文章都会有所收获,下面我们一起来看看吧。
1、新的链接器
此版本 Go
可减少链接器资源的使用(时间和内存)并提高代码的健壮性/可维护性。对于在 amd64
架构上运行的基于 ELF
的操作系统(Linux
,FreeBSD
,NetBSD
,OpenBSD
,Dragonfly
和S olaris
),代表性的大型 Go
程序集的链接速度提高 20%,平均所需内存减少 30%。其他体系结构/OS
组合的改进。改进链接程序性能的关键因素是新设计的目标文件格式,以及内部阶段的改进以提高并发性(例如,将重定位并行应用于符号)。Go 1.15
中的目标文件比其 1.14 等价文件稍大。这些更改是对 Go
链接器进行现代化改造的多版本项目的一部分,这意味着将来的版本中有望对链接器进行其他改进。现在,链接器在 linux/amd64
和 linux/arm64
上默认为 -buildmode=pie
的内部链接模式,因此这些配置不再需要 C
链接器。
2、编译器改进,包括略微小了些的二进制文件
包 unsafe
的安全规则允许在调用某些函数时将 unsafe.Pointer
转换为 uintptr
。以前,在某些情况下,编译器允许进行多个链式转换(例如 syscall.Syscall(…,uintptr(uintptr(ptr)),…)
)。编译器现在只需要一次转换。使用多次转换的代码应进行更新以满足安全规则。
与 Go 1.14
相比,Go 1.15
通过消除某些类型的 GC
元数据和更积极地消除了未使用的类型元数据,与 Go 1.14
相比将典型的二进制大小减少了大约 5%。该工具链现在通过将函数与 32 字节边界对齐并填充跳转指令来缓解 GOARCH=amd64
上的 Intel CPU
勘误 SKX102
。尽管此填充增加了二进制大小,但这远远超出了上述二进制大小改进所弥补的范围。
Go 1.15
向编译器和汇编器都添加了 -spectre
标志,以允许启用 Spectre
缓解措施。这些几乎是绝对不需要的,主要是作为“纵深防御”机制提供的。有关详细信息,请参见 Spectre Wiki
页面。
现在,编译器将拒绝 //go: compiler
指令,这些指令对其所使用的声明无意义,并出现“放错位置的编译器指令”错误。此类错误使用的指令以前已被破坏,但编译器无声地忽略了它们。
现在,编译器的 -json
优化日志记录报告大(>= 128 字节
)副本,并包含转义分析决策的说明。
3、内嵌 tzdata(时区数据)
增加了一个新包:time/tzdata
,当系统找不到时区数据时(比如 Windows 等),通过导入这个包,在程序中内嵌时区数据,也可以通过编译时传递 -tags timetzdata
来实现同样的效果。
4、增加 testing.TB.TempDir
测试生成临时文件挺常见的,这个为了更好的解决此问题。
5、增加 testing.T.Deadline
将 context
引入 testing
包。
6、关于 Ports 部分
darwin/386
、darwin/arm
不再支持;riscv64
变得更好;linux/arm64
现在作为第一类 port
支持。
7、API 的变动
net/url.URL RawFragment
和EscapedFragment
net/url.URL.Redacted
time.Ticker.Reset
,我们知道 Timer
是有 Reset
的,这次为 Ticker
也增加
regexp.Regexp.SubexpIndex
sync.Map.LoadAndDelete
crypto/tls.Dialer.DialContext
还有其他一些API
变动,不一一列举。
8、工具链
增加
go env GOMODCACHE
:https://github.com/golang/go/issues/34527;
opt-in fallbacks in GOPROXY
:https://github.com/golang/go/issues/37367;
vet:warn about string(int)
和detect impossible interface assertions
:https://github.com/golang/go/issues/32479 和 https://github.com/golang/go/issues/4483;
println
允许打印两个值。println(twoValues())
;
panic
:显示可打印的值而不是地址。比如:
type MyString stringpanic(MyString("hello"))
现在打印:
panic: (main.MyString) (0x48aa00,0x4c0840)
期望打印:
panic: main.MyString("hello")
可读性会好很多。
9、性能
在
amd64
上更好的写屏蔽;
在
Linux
上,forkAndExec
使用dup3
;
sha512
算法速度提升 15%;
ReadMemStats
延迟降低 95%;
关闭状态的
channel
接收速度提升 99%;
将小的
int
值转为interface{}
不额外分配内存。
关于“Go1.15更新了哪些功能”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Go1.15更新了哪些功能”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341