Web Analytics

2023年Go语言盘点:稳中求新,稳中求变

本文永久链接 – https://tonybai.com/2023/12/31/the-2023-review-of-go-programming-language 时光荏苒,转眼间已经是2023年的最后一天了。《2022年Go语言盘点:泛型落地,无趣很好,稳定为王》仿佛就写在昨天。 回首这一年,全球彻底从新冠大流行中得以复苏,Go语言也不例外,最直观的表现就是全球各地的GopherCon技术大会或小型Meetup都纷纷从停办/线上的状态来到了线下,并获得Gopher们的热烈欢迎和踊跃参与,比如下图中的GopherCon、GopherCon UK、GopherCon Europe、GopherCon Australia、Golab等。 ...

December 31, 2023 · 17 min · Tony Bai

Gopher Daily改版了

本文永久链接 – https://tonybai.com/2023/08/06/gopherdaily-revamped 已经记不得GopherDaily是何时创建的了,翻了一下GopherDaily项目的commit history,才发现我的这个个人项目是2019年9月创建的,最初内容组织很粗糙,但我的编辑制作的热情很高,基本能坚持每日一发,甚至节假日也不停刊: 该项目的初衷就是为广大Gopher带来新鲜度较高的Go语言技术资料。项目创建以来得到了很多Gopher的支持,甚至经常收到催刊邮件/私信以及主动report订阅列表问题的情况。 ...

August 6, 2023 · 15 min · Tony Bai

Go与神经网络:张量运算

本文永久链接 – https://tonybai.com/2023/05/21/go-and-nn-part1-tensor-operations 0. 背景 2023年年初,我们很可能是见证了一次新工业革命的起点,也可能是见证了AGI(Artificial general intelligence,通用人工智能)孕育的开始。ChatGPT应用以及后续GPT-4大模型的出现,其震撼程度远超当年AlphaGo战胜人类顶尖围棋选手。相对于AlphaGo在一个狭窄领域的建树,ChatGPT则是以摧枯拉朽之势横扫几乎所有脑力劳动行业。 ...

May 21, 2023 · 16 min · Tony Bai

单测时尽量用fake object

本文永久链接 – https://tonybai.com/2023/04/20/provide-fake-object-for-external-collaborators 1. 单元测试的难点:外部协作者(external collaborators)的存在 单元测试是软件开发的一个重要部分,它有助于在开发周期的早期发现错误,帮助开发人员增加对生产代码正常工作的信心,同时也有助于改善代码设计。Go语言从诞生那天起就内置Testing框架(以及测试覆盖率计算工具),基于该框架,Gopher们可以非常方便地为自己设计实现的package编写测试代码。 ...

April 20, 2023 · 13 min · Tony Bai

理解unsafe-assume-no-moving-gc包

本文永久链接 – https://tonybai.com/2023/04/16/understanding-unsafe-assume-no-moving-gc 1. 背景 在之前的《Go与神经网络:张量计算》一文中,不知道大家是否发现了,所有例子代码执行时,前面都加了一个环境变量ASSUME_NO_MOVING_GC_UNSAFE_RISK_IT_WITH,就像下面这样: $ASSUME_NO_MOVING_GC_UNSAFE_RISK_IT_WITH=go1.20 go run tensor.go 这是怎么回事儿呢?如果不加上这个环境变量会发生什么呢?我们来试试: // https://github.com/bigwhite/experiments/blob/master/go-and-nn/tensor-operations/tensor.go $go run tensor.go panic: Something in this program imports go4.org/unsafe/assume-no-moving-gc to declare that it assumes a non-moving garbage collector, but your version of go4.org/unsafe/assume-no-moving-gc hasn't been updated to assert that it's safe against the go1.20 runtime. If you want to risk it, run with environment variable ASSUME_NO_MOVING_GC_UNSAFE_RISK_IT_WITH=go1.20 set. Notably, if go1.20 adds a moving garbage collector, this program is unsafe to use. goroutine 1 [running]: go4.org/unsafe/assume-no-moving-gc.init.0() /Users/tonybai/Go/pkg/mod/go4.org/unsafe/assume-no-moving-gc@v0.0.0-20220617031537-928513b29760/untested.go:25 +0x1ba exit status 2 我们看到,程序panic了!我们看到panic的错误信息提到了go4.org/unsafe/assume-no-moving-gc这个包,显然是这个包在“作祟”,那么assume-no-moving-gc这个包究竟是做什么的呢?究竟有何功用?为何gorgonia.org/tensor会依赖这个包?这超出了《Go与神经网络:张量计算》那篇文章的范畴,所以我并未提及。在这篇文章中,我就和大家一起来理解一下unsafe-assume-no-moving-gc这个包。 ...

April 16, 2023 · 8 min · Tony Bai

使用go test框架驱动的自动化测试

本文永久链接 – https://tonybai.com/2023/03/30/automated-testing-driven-by-go-test 一. 背景 团队的测试人员稀缺,无奈只能“自己动手,丰衣足食”,针对我们开发的系统进行自动化测试,这样既节省的人力,又提高了效率,还增强了对系统质量保证的信心。 ...

March 30, 2023 · 10 min · Tony Bai

Go开发命令行程序指南

注:上面篇首配图的底图由百度文心一格生成。 本文永久链接 – https://tonybai.com/2023/03/25/the-guide-of-developing-cli-program-in-go 近期在Twitter上看到一个名为“Command Line Interface Guidelines”的站点,这个站点汇聚了帮助大家编写出更好命令行程序的哲学与指南。这份指南基于传统的Unix编程原则,又结合现代的情况进行了“与时俱进”的更新。之前我还真未就如何编写命令行交互程序做系统的梳理,在这篇文章中,我们就来结合clig这份指南,(可能不会全面覆盖)整理出一份使用Go语言编写CLI程序的指南,供大家参考。 ...

March 25, 2023 · 28 min · Tony Bai

聊聊Go语言的全局变量

本文永久链接 – https://tonybai.com/2023/03/22/global-variable-in-go 注:上面篇首配图的底图由百度文心一格生成。 C语言是Go语言的先祖之一,Go继承了很多C语言的语法与表达方式,这其中就包含了全局变量,虽然Go在其语法规范中并没有直接给出全局变量的定义。但是已经入门Go的童鞋都知道,在Go中包的导出变量(exported variable)起到的就是全局变量的作用。Go包导出变量与C的全局变量在优缺点与使用方式也有相似之处。 ...

March 22, 2023 · 10 min · Tony Bai

一文搞懂Go subtest

注:本篇首图片基于lexica AI生成的图片二次加工而成。 本文永久链接 – https://tonybai.com/2023/03/15/an-intro-of-go-subtest 单元测试(unit testing)是软件开发中至关重要的一环,它存在的意义包括但不限于如下几个方面: 提高代码质量:单元测试可以确保代码的正确性、可靠性和稳定性,从而减少代码缺陷和bug。 减少回归测试成本:在修改代码时,单元测试可以快速检查是否影响了其他模块的功能,避免了整个系统的回归测试成本。 促进团队合作:单元测试可以帮助团队成员更好地理解和使用彼此编写的代码,提高代码的可读性和可维护性。 提高开发效率:单元测试可以自动化执行测试,减少手动测试的时间和工作量,从而提高开发效率。 Go语言设计者在Go设计伊始就决定语言特性与环境特性“两手都要抓,两手都要硬”,事实证明:Go的成功正是因为其对工程软件项目整体环境的专注。而Go内置轻量级测试框架这一点也正是Go重视环境特性的体现。并且,Go团队对这一内置测试框架的投入是持续的,不断有更便捷的、更灵活的新特性加入Go测试框架中,可以帮助Gopher更好地组织测试代码,更高效地执行测试等。 ...

March 15, 2023 · 9 min · Tony Bai

Go是一门面向对象编程语言吗

本文永久链接 – https://tonybai.com/2023/03/12/is-go-object-oriented Go语言已经开源13年了,在近期TIOBE发布的2023年3月份的编程语言排行榜中,Go再次冲入前十,相较于Go在2022年底的排名提升了2个位次: 《Go语言第一课》专栏中关于Go在这两年开始飞起的“预言”也正在逐步成为现实^_^,大家学习Go的热情也在快速提升, 《Go语言第一课》专栏的学习的人数年后也快速增加,快突破2w了。 很多专栏的订阅者都是第一次接触Go,他们中的很多是来自像Java, Ruby这样的OO(面向对象)语言阵营的,他们学习Go之后的第一个问题便是:Go是一门OO语言吗?在这篇博文中,我们就来探讨一下。 ...

March 12, 2023 · 10 min · Tony Bai