文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Go 语言十五周年!权力交接、回顾与展望

2024-11-28 14:38

关注

2024 年 11 月 11 日,Go 语言迎来了它的 15 岁生日。自 2009 年开源发布以来,Go 语言以其稳定性、安全性和对大规模软件工程的支持而闻名。

本文将回顾 Go 语言的发展历程,探讨其最新特性,并展望 Go 语言的未来。

Go 语言的快速增长

在过去的五年中,Go 的用户基数增长了三倍多,成为增长最快的编程语言之一。

Go 语言不仅跻身于十大编程语言之列,更成为现代云计算的首选语言。

Go 1.22 和 Go 1.23 的新特性

for 循环的变革

Go 1.22 和 Go 1.23 的发布标志着 for 循环的重大变革。

Go 1.22 引入了变量作用域的变更,使得 for 循环中引入的变量作用域为每次迭代,而非整个循环,解决了长期存在的语言 “陷阱”。

如下代码:

for i := 0; i < 5; i++ {
    go func() {
        fmt.Println(i)
    }()
}

在 Go 1.22 之前,这会打印最后 i 的值 5 次;现在会打印出 0 到 4 的数值。

这一决策的背后是 Go 团队对历史决策的反思和社区反馈的重视。

向前兼容的语言特性

这些变革得以实现,得益于 Go 1.21 引入的向前语言兼容性。

这一特性建立在 Go 模块的基础上,Go 模块自 Go 1.14 引入以来,已经过去了四年半。

迭代器和用户定义的 for-range 循环

Go 1.23 在此基础上进一步引入了迭代器和用户定义的 for-range 循环。

迭代器的代码例子:

func Backward[E any](s []E) iter.Seq2[int, E] {
 return func(yield func(int, E) bool) {
  for i := len(s) - 1; i >= 0; i-- {
   if !yield(i, s[i]) {
    return
   }
  }
 }
}

func main() {
 sl := []string{"脑子", "进", "煎鱼", "了"}
 for i, s := range Backward(sl) {
  fmt.Printf("%d: %s\n", i, s)
 }
}

结合 Go 1.18 引入的泛型,这为自定义集合和其他编程模式提供了强大而便捷的基础。

各项特效的功能增强

这些版本还带来了许多生产就绪性的提升,带来了非常大的提升。

例如,标准库 net/http 的 HTTP ServerMux 的功能增强:

mux.HandleFunc("POST /eddycjy/create", func(w http.ResponseWriter, r *http.Request) {
    fmt.Fprint(w, "脑子进煎鱼了!")
})

mux.HandleFunc("GET /eddycjy/update", func(w http.ResponseWriter, r *http.Request) {
    fmt.Fprint(w, "煎鱼进脑子了...")
})

mux.HandleFunc("/eddycjy/{id}", func(w http.ResponseWriter, r *http.Request) {
    id := r.PathValue("id")
    fmt.Fprintf(w, "id 值为 %s", id)
})

mux.HandleFunc("/eddycjy/{path...}", func(w http.ResponseWriter, r *http.Request) {
    path := r.PathValue("path")
    fmt.Fprintf(w, "path 值为 %s", path)
})
...

还有 Trace 执行追踪的全面改革,以及为所有 Go 应用程序提供更强的随机性的新包 math/rand/v2。

此外,首个 v2 标准库包的引入为未来库的演变和现代化树立了新的 v2 模板。(后面要搞 encoding/json/v2,值得期待!)

Go 工具的遥测

过去一年,Go 团队谨慎推出了 Go 工具 Gotelemetry 的可选遥测系统。

这一系统将为 Go 开发者提供数据,帮助他们做出更好的决策,同时保持完全开放和匿名。

图片图片

Go 遥测首先出现在 gopls 中,已经带来了许多改进。

未来的发展方向

硬件适应性

Go 团队正在进化 Go 语言,以更好地利用当前和未来的硬件能力。

为了确保 Go 在未来 15 年继续支持高性能、大规模的生产工作负载,Go 需要适应大型多核、高级指令集以及在日益非均匀的内存层次结构中局部性的重要性。

新的 map 实现

Go 1.24 将有一个全新的 map 实现,它在现代 CPU 上更高效。

同时,Go 团队正在原型设计新的垃圾回收算法(就是上次说到新任负责人去日本喝抹茶,结果想出来个抹茶新算法)。

这些新算法将基于现代硬件的能力和限制会进行调整,给 Go 带来更大的效益。

新 API 和工具

一些改进将以新 API 和工具的形式出现,以便 Go 开发者更好地利用现代硬件。

Go 团队正在研究如何支持最新的向量和矩阵硬件指令,以及应用程序如何构建 CPU 和内存局部性。

可组合优化

指导这些努力的核心原则是可组合优化:优化对代码库的影响应尽可能局部化。

确保代码库其余部分的开发简便性不受影响。

安全性

Go 团队继续确保 Go 的标准库默认安全、设计安全。

图片图片

这包括持续努力将 FIPS 认证的加密支持内置到 Go 中,使得需要 FIPS 加密的应用程序只需切换一个标志即可。

AI 与 Go

Go 团队正在通过增强 Go 在 AI 基础设施、应用程序和开发者辅助方面的能力,使 Go 更好地服务于 AI,同时也使 AI 更好地服务于 Go。

Go 作为构建生产系统的可靠语言,Go 团队希望它也能成为构建生产 AI 系统的可靠语言。

图片图片

Gabyhelp

OscarOscar

Go 在云基础设施中的可靠性使其成为 LLM 基础设施的自然选择。

对于 AI 应用程序,Go 团队将继续在流行的 AI SDK(LangChainGo 和 Genkit) 中为 Go 提供一流的支持。

来源:脑子进煎鱼了内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯