Thinking_Out_Loud

《Go程序设计语言》读书笔记#0

2018-09-04

写在前面

当初入坑Go的时候,怀着朝圣的心买了这本书(《Go程序设计语言》)来啃。本以为我这样的拖延症会拖到最后而不了了之,没想到硬是被我啃完了,因为书中的内容确实引人入胜,除了深入浅出讲解Go外,还有许多扩展开来的相关知识和编程思想。

在啃书途中,也用Onenote整理的不少的笔记,主要是一些关键知识的摘抄,打算在懒癌没发作的时间整理成一系列blog,希望能在年末前更新完十三章,届时可能能作为我18年的最自豪成绩。

日后如果温故而知新了,会继续追加更新。

要说为什么我当时用Onenote,因为年轻的我还是忠实的田牌教徒,用着田牌手机还要四处张扬那种。

第一章 综述

< P6 >

Go中有statement与expression的区分

Go Spec#Expressions
An expression specifies the computation of a value by applying operators and functions to operands.

Go Spec#Statements
Statements control execution.

那么,值得注意的是i++在go中是statement,不同于其它C-like语言。这就是j = i++等类似语句非法的原因。

< P7 >

  • +=进行字符串拼接时会申请内存创建新的字符串,要注意频繁的操作会引起更密集的GC;

< P9 >

  • map是对make()创建的数据结构的引用;
  • map里的键可以实任意可以使用==作比较的类型,而存储的值可以实任意类型;

    扩展阅读:Go的Comparable rules

  • map是无序的,值得注意的是,map在使用range进行遍历的访问顺序亦是随机的,这应该算Go中最应该注意的坑之一了,据说这是在设计Go的时候有意为之的(It’s not a bug, it’s a feature!)。