Web Analytics

聊聊Go语言的向前兼容性和toolchain规则

本文永久链接 – https://tonybai.com/2023/09/10/understand-go-forward-compatibility-and-toolchain-rule Go语言在发展演进过程中一直十分注重向后兼容性(backward compatibility),在Go 1.0版本发布之初就发布了Go1兼容性承诺,简单来说就是保证使用新版本Go(比如Go 1.21版本)可以正常编译和运行老版本的Go代码(比如使用Go 1.18版本语法编写的go代码),不会出现breaking change(其实也不是绝对的不会出现)。 ...

September 10, 2023 · 12 min · Tony Bai

Go项目初始化不再困扰你:gonew全方位解析

本文永久链接 – https://tonybai.com/2023/08/11/introduction-to-the-gonew-tool 近日,Go官博介绍了一个名为gonew的新工具。该工具支持基于go project template clone并创建一个属于你的Go项目。gonew工具的引入大幅简化了Go项目的创建,同时由于对自定义项目模板的支持,也可以提高Go项目的标准化水平。gonew工具刚刚被放入Go工具项目代码仓库,目前还处于实验阶段,后续可能会增加新特性,但当前的核心特性(core functionality)会持续保留。 ...

August 11, 2023 · 6 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开发命令行程序指南

注:上面篇首配图的底图由百度文心一格生成。 本文永久链接 – 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 module拉取方案3

本文永久链接 – https://tonybai.com/2023/03/03/the-approach-to-go-get-private-go-module-in-house-part3 1. 缘起 我们的Go团队这两年完全是按照之前写的《小厂内部私有Go module拉取方案》和《小厂内部私有Go module拉取方案(续)》中的方案搭建的内部拉取私有仓库的基础设施,总体感觉不错,目前也没有什么大问题。 ...

March 3, 2023 · 11 min · Tony Bai

十分钟入门Go语言

本文永久链接 – https://tonybai.com/2023/02/23/learn-go-in-10-min 本文旨在带大家快速入门Go语言,期望小伙伴们在花费十分钟左右通读全文后能对Go语言有一个初步的认知,为后续进一步深入学习Go奠定基础。 ...

February 23, 2023 · 23 min · Tony Bai

Go,13周年[译]

本文永久链接 – https://tonybai.com/2022/11/11/go-opensource-13-years 在中华大地的老百姓抱着手机进行双十一购物节狂欢,忙着支付尾款和秒杀的时候,Go核心团队的Russ Cox代表Go语言项目团队在Go官博上发表了《Thirteen Years of Go》的博文,纪念Go语言开源13周年,并对2021年以来Go语言的演进进行了归纳总结,对Go在其第14个年头将要做的改进也做了简单的说明。这里对博文做简单翻译,供大家参考。 ...

November 11, 2022 · 7 min · Tony Bai

Go标准库依赖的那些modules

本文永久链接 – https://tonybai.com/2022/10/25/the-modules-that-go-standard-library-depend-on 对于程序员来说,编写的代码依赖标准库是“天经地义”的事情。标准库在程序员眼中就是高质量的代名词,也是最值得信赖的非自己所写的代码,当然更是代码包依赖关系链条上的最后一环,即所有直接或间接依赖的第三方module最终都会依赖标准库。 ...

October 25, 2022 · 5 min · Tony Bai

GoCN社区Go读书会第二期:《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)。 ...

July 7, 2022 · 23 min · Tony Bai

小厂内部私有Go module拉取方案(续)

本文永久链接 – https://tonybai.com/2022/06/18/the-approach-to-go-get-private-go-module-in-house-part2 自从去年在公司搭建了内部私有Go module proxy后,我们的私有代理工作得基本良好。按理说,这篇续篇本不该存在:)。 日子一天天过去,Go团队逐渐壮大,空气中都充满了“Go的香气”。 ...

June 18, 2022 · 6 min · Tony Bai