Web Analytics

从 Rob Pike 的提案到社区共识:Go 或将通过 new(v) 彻底解决指针初始化难题

本文永久链接 – https://tonybai.com/2025/08/17/create-pointer-to-simple-types 大家好,我是Tony Bai。 在 Go 中创建一个指向基本类型(如 int 或 string)的指针,为何比创建一个指向结构体的指针更繁琐?这个长期存在的“人体工程学”问题,由 Go 语言的共同创造者之一 Rob Pike 在提案 #45624 中再次带入公众视野,并由此引发了一场长达数年、充满深度思辨的社区大讨论。最终,在权衡了多种方案的利弊后,社区逐渐形成共识,Go 提案委员会倾向于接受 new(v) 语法。本文将和大家一起回顾这场关于指针初始化的“十年之辩”,深入探讨各种方案的优劣,并解读为何 new(v) 可能成为最终赢家。 ...

August 17, 2025 · 6 min · Tony Bai

11个现代Go特性:用gopls/modernize让你的代码焕然一新

本文永久链接 – https://tonybai.com/2025/04/15/embrace-modern-go-style-with-gopls-modernize 大家好,我是Tony Bai。 最近在思考Go语言的发展时,不禁让我想起了当年学习C++的经历。Bjarne Stroustrup在《C++程序设计语言(特别版)》中就专门强调了“现代 C++”(Modern C++)的编程风格,鼓励使用模板、STL等新特性来编写更优雅、更高效的C++代码。 ...

April 15, 2025 · 10 min · Tony Bai

Go 1.25规范大扫除:移除“Core Types”,为更灵活的泛型铺路

Go 1.25规范大扫除:移除“Core Types”,为更灵活的泛型铺路 - Tony Bai =============== Tony Bai 一个程序员的心路历程 Google Go语言编码风格规范 ...

March 27, 2025 · 7 min · Tony Bai

Go 1.21中值得关注的几个变化

本文永久链接 – https://tonybai.com/2023/08/20/some-changes-in-go-1-21 美国时间2023年8月8日,Go团队在Go官博上正式发布了1.21版本! 早在今年4月末,我就撰写了文章《Go 1.21新特性前瞻》,对Go 1.21可能引入的新特性、新优化和新标准库包做了粗略梳理。 ...

August 20, 2023 · 26 min · Tony Bai

当函数设计遇到切片

本文永久链接 – https://tonybai.com/2022/10/27/when-encountering-slice-during-function-design 切片(slice)是Go语言中的一种重要的也是最常用的同构数据类型。在Go语言编码过程中,我们多数情况下会使用slice替代数组,一来是因为其动态可扩展,二来在多数场合传递slice的开销要比传递数组要小(这里有一些例外)。 ...

October 27, 2022 · 5 min · Tony Bai

len(s)表达式的求值结果究竟是常量还是变量?我来告诉你

本文永久链接 – https://tonybai.com/2022/03/24/the-result-of-a-len-expression-is-constant-or-variable len是Go预定义标识符,同时也是Go内置的预定义函数,通过go doc工具我们能查到len函数的doc如下: $go doc builtin.len package builtin // import "builtin" func len(v Type) int The len built-in function returns the length of v, according to its type: Array: the number of elements in v. Pointer to array: the number of elements in *v (even if v is nil). Slice, or map: the number of elements in v; if v is nil, len(v) is zero. String: the number of bytes in v. Channel: the number of elements queued (unread) in the channel buffer; if v is nil, len(v) is zero. For some arguments, such as a string literal or a simple array expression, the result can be a constant. See the Go language specification's "Length and capacity" section for details. 对于len函数,即便是Go初学者也不会陌生,因为在日常Go开发中,len是一个高频使用的函数。len的参数主要是复合数据类型的变量,比如数组(包括执行数组的指针类型)、切片、字符串、channel等,返回的结果是这些复合数据变量的长度(length),是一个int类型的值。太多细节我就不说了,大家可能也都很熟悉。我要说的是,关于len函数的一个大家可能不熟悉的或不太在意的地方,那就是len(s)表达式在什么时候的求值结果为一个常量(constant),什么时候的求值结果为变量。别忽视这个细节,这很可能让你的程序输出你意想不到的结果,下面我就来举例说明。 ...

March 24, 2022 · 7 min · Tony Bai

一文告诉你神奇的Go内建函数源码在哪里

Go内建函数源码,我好像在哪里见过你。 – 佚名 1. 何为Go内建函数 众所周知,Go是最简单的主流编程语言之一,截至Go 1.15版本,Go语言的关键字的规模依旧保持在25个: ...

December 17, 2020 · 6 min · Tony Bai