Go 1.23中的自定义迭代器与iter包

本文永久链接 – https://tonybai.com/2024/06/24/range-over-func-and-package-iter-in-go-1-23 在《Go 1.23新特性前瞻》一文中,我们提到了Go 1.23中增加的一个主要的语法特性就是支持了用户自定义iterator,即range over func试验特性的正式转正。为此,Go 1.23还在标准库中增加了iter包,这个包对什么是Go自定义iterator做了诠释: ...

June 24, 2024 · 19 min · Tony Bai

手把手教你使用ANTLR和Go实现一门DSL语言(第五部分):错误处理

本文永久链接 – https://tonybai.com/2022/05/30/an-example-of-implement-dsl-using-antlr-and-go-part5 无论是端应用还是云应用,要上生产环境,有一件事必须要做好,那就是错误处理。在本系列前面的文章中,我们设计了文法与语法、建立并验证了语义模型,但我们没有特别关注错误处理。在这一篇中,我们就来补上这个环节。 DSL设计与实现过程有以下几个主要环节,在不同环节,我们关注的错误处理的主要对象是不同的。如下图所示: ...

May 30, 2022 · 8 min · Tony Bai

手把手教你使用ANTLR和Go实现一门DSL语言(第四部分):组装语义模型并测试DSL

本文永久链接 – https://tonybai.com/2022/05/28/an-example-of-implement-dsl-using-antlr-and-go-part4 在上一篇文章中,我们为DSL建立了完整的语义模型,我们距离DSL的语法示例真正run起来还差最后一步,那就是基于语法树提取信息(逆波兰式)、组装语义模型,在加载语义模型并实例化各个规则处理器(processor)后,我们就可以处理数据了!下面是我们部署在海洋浮标上的指标采集程序的全景图: 在这一篇中,我们就来按照上图,通过语法树提取逆波兰式并组装语义模型,让我们的语法示例能真正按预期run起来! 一. 从语法树提取逆波兰式并组装语义模型 通过上面语义模型的讲解,我们知道了语法树与语义模型之间的联系包括逆波兰式、windowsRange、result和enumableFunc。其主要联系是那个逆波兰式,而像windowsRange、result和enumableFunc这些信息都相对容易提取。 ...

May 28, 2022 · 7 min · Tony Bai

手把手教你使用ANTLR和Go实现一门DSL语言(第三部分):建立和验证语义模型

本文永久链接 – https://tonybai.com/2022/05/27/an-example-of-implement-dsl-using-antlr-and-go-part3 在前面的系列文章中,我们为气象学家们设计了一门名为Tdat的DSL,使用ANTLR的文法规则编写了Tdat的文法,基于该文法生成了Tdat的语法解析器代码并初步验证了文法的正确性,Tdat可以成功将我们编写的Tdat语法代码样例解析为一颗内存中的树结构。 此时此刻,我们编写的DSL语法代码还无法按预期工作,因为缺少执行语义。在这篇文章中,我们就来为这门DSL建立语义模型,并单独对这个语义模型进行验证。 ...

May 27, 2022 · 13 min · Tony Bai

使用具名返回值巧妙解决泛型函数返回零值的问题

本文永久链接 – https://tonybai.com/2022/05/20/solving-problems-in-generic-function-implementation-using-named-return-values Go语言泛型语法特性在Go 1.18版本落地后,不出所料,在github上看到大量的基础容器类型数据结构被用泛型重写。这种重写我觉得是很正常、很自然的,并且实现良好的通用数据结构改为泛型其实也不难,有些简单的结构可能分分钟就能搞定。 ...

May 20, 2022 · 5 min · Tony Bai

图解git原理的几个关键概念

git是那个“爱骂人”的Linux之父Linus Torvalds继Linux内核后奉献给全世界程序员的第二个礼物(不能确定已经逐渐老去的Torvalds能否迸发第三春,第三次给我们一个超大惊喜^_^)。这里再强调一下,git读作**/git/,而不是/dʒit/**。 ...

April 7, 2020 · 15 min · Tony Bai