快速指南: Go 1.19功能

简介: 快速指南: Go 1.19功能

在 Go 1.18 的发布之后,Go 仍然在继续开发新的功能。目前,1.19 RC1已经发布,该版本将于2022年8月发布。让我们来看看Go 1.19的内容。

Atomic Types

BoolInt32Int64Uint32Uint64UintptrPointersync/atomic 包下的新原子类型。如果你不熟悉,我们可以将原子包概括为 "提供对实现同步算法有用的低级原子内存原语”。


有了这些新类型,我们可以使用 Load、Store、Swap、CompareAndSwap 函数。Add 函数也可用于数字类型。这些函数简化了我们在Go 1.19之前编写的代码,你可以在Go Playground上查看这些新代码。

Soft Memory Limit

你可能知道,在 Go 上调整内存时,你只有一个选项,就是设置 GOGC(runtime/debug.SetGCPercent)。尽管这种优化基本上在 CPU 和内存之间进行了权衡,但它并不尊重用户的内存限制。


如提案中所述,我们可以用 GOMEMLIMIT 环境变量或 runtime/debug.SetMemoryLimit 函数定义一个软内存限制。


有了这个新功能,我们可以减少内存限制,定义更好的内存利用率。现在可能是时候抛弃 twitch 团队给我们的内存镇流器的工作方法了。

New Functions

Go 1.19的核心库有几个变化。当我检查这些时,我选择了其中一些对我来说似乎很重要的变化。

  • fmt 有新的函数用于追加数据。Append, AppendfAppendln
  • sort.Find 是一个新的函数,用于寻找具有比较器功能的最小索引。它提供了比 sort.Search 更好的体验。
  • 排序算法切换到 Pattern-defeating Quicksort,以便在几种情况下获得更快的结果。
  • 新的 JoinPath 函数通过连接路径元素的列表创建一个新的URL。
path, err := url.JoinPath("services", "data", id)

Unix build constraint

  • unix 是一个新的构建约束,如果 GOOS 是其中之一,则满足该约束。

Compiler

编译器现在使用跳转表来实现大型整数和字符串切换语句。切换语句的性能改进各不相同,但可以快20%左右。(仅 GOARCH=amd64GOARCH=arm64)


你可以查看这个基准的细节。


在1.19版本中,社区工作良好,并照顾到了一些性能优化。许多改进和修复也将在这个版本中出现。

相关文章
|
4月前
|
JSON Go 数据格式
从1开始,扩展Go语言后端业务系统的RPC功能
从1开始,扩展Go语言后端业务系统的RPC功能
78 0
|
4月前
|
存储 Go
Go 浅析主流日志库:从设计层学习如何集成日志轮转与切割功能
本文将探讨几个热门的 go 日志库如 logrus、zap 和官网的 slog,我将分析这些库的的关键设计元素,探讨它们是如何支持日志轮转与切割功能的配置。
254 0
Go 浅析主流日志库:从设计层学习如何集成日志轮转与切割功能
|
4月前
|
网络协议 Go Windows
Wireshark的Go 和Capture 功能都能做什么?
Wireshark的Go 和Capture 功能都能做什么?
|
数据可视化 Go 数据库
WEGO使用—在线GO功能注释
WEGO是华大基因公司的一个在线GO注释的网站,根据网站的介绍:WEGO(网络基因本体注释图)是一个简单但有用的工具,用于可视化,比较和绘制基因本体注释结果。随着围棋词汇越来越流行,WEGO在许多研究中被广泛采用和使用,最新一次的更新是在2018年。
460 0
|
3月前
|
Go
Go 中使用切片来实现动态数组的功能
Go 中使用切片来实现动态数组的功能
|
1月前
|
编译器 Go
Go语言中的闭包:封装数据与功能的强大工具
Go语言中的闭包:封装数据与功能的强大工具
|
1月前
|
开发工具 git
根据使用者反馈,对开源项目 go-gin-api 新增两个功能
根据使用者反馈,对开源项目 go-gin-api 新增两个功能
23 0
|
4月前
|
算法 Java 编译器
GO语言中的runtime功能概要
【5月更文挑战第17天】本文简介Go语言的`runtime`库支撑着高效的并发和内存管理。此外,runtime还涉及定时器、错误处理(Panic和Recover)以及反射功能。通过内联展开和逃逸分析等手段,实现性能优化。
63 1
|
Java Go 调度
Go Runtime功能初探
Go Runtime功能初探
82 2
|
4月前
|
缓存 NoSQL 前端开发
一文搞懂Go整合captcha实现验证码功能
一文搞懂Go整合captcha实现验证码功能
65 0