要么返回错误值,要么输出日志,别两样都做
本文永久链接 – https://tonybai.com/2024/04/14/either-return-error-or-log-them-do-not-do-both 1. 缘起 这周,一个产品团队内进行Go代码评审时,得到了一个结论:所有的if err != nil的地方都应该输出错误日志。然而,这种做法并不是最佳实践,它存在一些问题。 ...
本文永久链接 – https://tonybai.com/2024/04/14/either-return-error-or-log-them-do-not-do-both 1. 缘起 这周,一个产品团队内进行Go代码评审时,得到了一个结论:所有的if err != nil的地方都应该输出错误日志。然而,这种做法并不是最佳实践,它存在一些问题。 ...
本文永久链接 – https://tonybai.com/2024/01/01/go-testing-by-example 2023年11月初,Go语言技术负责人Russ Cox在GopherCon Australia 2023大会上进行了题为“Go Testing By Example”的演讲: 12月初Russ Cox重新录制了该演讲内容的视频,并在个人网站上放了出来。这个演讲视频是关于如何编写好的Go测试的,Russ Cox介绍了20个实用建议,非常值得Go初学者甚至Go资深开发者学习并应用到实践中。这里是基于该视频整理的文字稿(可能并非逐字逐句),供广大Gopher参考。 ...
本文永久链接 – https://tonybai.com/2023/09/01/slog-a-new-choice-for-logging-in-go 在大约一年前,我就写下了《slog:Go官方版结构化日志包》一文,文中介绍了Go团队正在设计并计划在下一个Go版本中落地的Go官方结构化日志包:slog。但slog并未如预期在Go 1.20版本中落地,而是在golang.org/x/exp/slog下面给出了slog的初始实现供社区体验。 ...
本文永久链接 – https://tonybai.com/2023/05/14/a-guide-of-using-go-error-chain 0. Go错误处理简要回顾 Go是一种非常强调错误处理的编程语言。在Go中,错误被表示为实现了error接口的类型的值,error接口只有一个方法: ...
本文永久链接 – https://tonybai.com/2023/02/23/learn-go-in-10-min 本文旨在带大家快速入门Go语言,期望小伙伴们在花费十分钟左右通读全文后能对Go语言有一个初步的认知,为后续进一步深入学习Go奠定基础。 ...
本文永久链接 – https://tonybai.com/2023/02/19/how-to-determine-if-two-interface-vars-are-equal 近日一位《Go语言第一课》专栏的读者向我提出一个问题,代码如下: func main() { printNonEmptyInterface1() } type T struct { name string } func (t T) Error() string { return "bad error" } func printNonEmptyInterface1() { var err1 error // 非空接口类型 var err1ptr error // 非空接口类型 var err2 error // 非空接口类型 var err2ptr error // 非空接口类型 err1 = T{"eden"} err1ptr = &T{"eden"} err2 = T{"eden"} err2ptr = &T{"eden"} println("err1:", err1) println("err2:", err2) println("err1 = err2:", err1 == err2) // true println("err1ptr:", err1ptr) println("err2ptr:", err2ptr) println("err1ptr = err2ptr:", err1ptr == err2ptr) // false } 他的问题就是:“当动态类型是指针的时候,接口变量不相等;当动态类型不是指针的时候,接口变量相等,这个怎么理解呢?”。 ...
本文永久链接 – https://tonybai.com/2023/02/08/some-changes-in-go-1-20 美国时间2023年2月1日,唯一尚未退休的Go语言之父Robert Griesemer代表Go核心开发团队在Go官博撰文正式发布了Go 1.20版本。就像Russ Cox在2022 GopherCon大会所说的那样:Go2永不会到来,Go 1.x.y将无限延续! ...
本文永久链接 – https://tonybai.com/2022/11/17/go-1-20-foresight 在近期Russ Cox代表Go核心团队发表的“Go, 13周年”一文中,他提到了“在Go的第14个年头,Go团队将继续努力使Go成为用于大规模软件工程的最好的环境,将特别关注供应链安全,提高兼容性和结构化日志记录,当然还会有很多其他改进,包括profile-guided optimization等”。 ...
本文永久链接 – https://tonybai.com/2022/10/30/first-exploration-of-slog Go自诞生以来就在其标准库内置了log包作为Go源码输出日志的标准组件,该包被广泛应用于Go标准库自身以及Go社区项目中。 不过,针对Go标准库log包,Go社区要求改进的声音始终不断,主流声音聚焦在以下几点: log包是为了方便人类可读而设计的,不支持便于机器解析的结构化日志(比如像zap那样输出json格式的日志); 不支持日志级别(log level); log包采用专有日志输出格式,又没有提供可供Go社区共同遵循的Logger接口类型,导致Go社区项目使用的log输出格式五花八门,相互之间又难以兼容。 Go社区曾经尝试过合力改进标准库log包,并撰写了Proposal设计初稿,但最终因各种原因都没有被Go核心团队接受。 ...
本文永久链接 – https://tonybai.com/2022/07/07/gocn-community-go-book-club-issue2-go-programming-from-beginner-to-master 本文是2022年6月26日我在GoCN社区的Go读书会第二期《Go语言精进之路》直播的文字稿。本文对直播的内容做了重新整理与修订,供喜欢阅读文字的朋友们在收看直播后的揣摩和参考。视频控的童鞋可以关注GoCN公众号和视频号看剪辑后的视频,也可以在B站GopherChina专区下收看视频回放(https://www.bilibili.com/video/BV1p94y1R7jg)。 ...