世界读书日:如何高效阅读“砖头”技术书?我的心法分享(文末赠书)
世界读书日:如何高效阅读“砖头”技术书?我的心法分享(文末赠书) - Tony Bai =============== Tony Bai 一个程序员的心路历程 Google Go语言编码风格规范 ...
世界读书日:如何高效阅读“砖头”技术书?我的心法分享(文末赠书) - Tony Bai =============== Tony Bai 一个程序员的心路历程 Google Go语言编码风格规范 ...
本文永久链接 – https://tonybai.com/2022/05/17/understand-the-nature-of-go-method-and-how-to-choose-the-correct-receiver-type Go语言虽然不支持经典的面向对象语法元素,比如:类、对象、继承等,但Go语言也有方法(method)。和函数相比,Go语言中的方法在声明形式上仅仅多了一个参数,Go称之为receiver参数,而receiver参数正是方法与类型之间的纽带。 ...
本文永久链接 – https://tonybai.com/2022/04/20/some-changes-in-go-1-18 从3月23日开始,我居家办公了20+天。这期间我本来是应该有时间写下这篇综述类文章的,但是封了两天后,抢菜、带娃的事情就开始困扰着我。我实在没有下笔写下这篇文章的心思。4月13日终于解封了,上班后的气象就是不一样,人也精神了很多,于是这篇文章也被提上了日程。希望新冠疫情早日结束吧,希望每个人都能在晴朗的户外享受那春日的暖意。 ...
本文永久链接 – https://tonybai.com/2022/03/25/intro-generics Go核心团队在官博上发布了一篇名为《An Introduction To Generics》的文章,该文章基于Robert Griesemer和Ian Lance Taylor在2021年GopherCon大会上的演讲,这是Go团队发布Go 1.18版本后官博发表的首篇有关Go泛型的文章,值得大家认真阅读,这里将全文做一下翻译,供大家参考。 ...
本文永久链接 – https://tonybai.com/2022/02/27/go-addressable 近期在“Go语言第一课”专栏后台看到一位学员的一则留言,如下图: 由于有课程上下文,所以我这里将问题的上下文重新描述一下。 在专栏的第25讲,我们学习了Go语言提供的一个“语法糖”,比如下面这个例子: type T struct { a int } func (t T) M1() { t.a = 10 } func (t *T) M2() { t.a = 11 } func main() { var t1 T t1.M1() t1.M2() var t2 = &T{} t2.M1() t2.M2() } Go语言的类型有方法集合(method set)的概念,以上面例子来说,类型T的方法集合为{M1},而类型*T的方法集合为{M1, M2}。不过方法集合仅用于判断某类型是否实现某接口类型。当我们通过类型实例来调用方法时,Go会提供“语法糖”。上面这个例子先声明了类型T的变量t1,我们看到它不仅可以调用其方法集合中receiver参数类型为T的方法M1,它还可以直接调用不属于其方法集合的、receiver参数类型为*T的方法M2。T类型的实例t1之所以可以调用receiver参数类型为*T的方法M2都是Go编译器在背后自动进行转换的结果,即t1.M2()这种用法是Go提供的“语法糖”:Go判断t1的类型为T,与方法M2的receiver参数类型*T不一致后,会自动将t1.M2()转换为(&t1).M2()。 ...