编程熟手入门Go语言

2018年看完的第一本书,《Introducing Go》是一本介绍 Go 语言的书,针对人群是已经有编程经验的读者。全书,算上封面、目录、附录、索引,总共才 124 页,实际阅读时间(包括手打一遍示例代码并完成每章后面的习题),不到15个小时。我是一次一小时左右断断续续看完的,但是需要的话,完全可以在一个周末看完。 总体评价是短小精悍,有编程经验的读者入门 Go 语言的理想书籍。

编程熟手入门Go语言

2018年看完的第一本书,《Introducing Go》是一本介绍 Go 语言的书,针对人群是已经有编程经验的读者。全书,算上封面、目录、附录、索引,总共才 124 页,实际阅读时间(包括手打一遍示例代码并完成每章后面的习题),不到15个小时。我是一次一小时左右断断续续看完的,但是需要的话,完全可以在一个周末看完。

总体评价是短小精悍,有编程经验的读者入门 Go 语言的理想书籍。

书籍内容

本书章节安排非常主流,第一章介绍背景、开发环境、编辑器配置,第二三章介绍简单类型和变量,第四章讲控制结构,第五章讲复杂类型,第六章讲函数,第七章讲结构体和接口,第八章讲包,第九章讲测试,第十章讲并发,十一章介绍进一步学习的方向和参考资料。

Go 语言的类型与 C 语言非常相似,不过浮点数用 float32 和 float64。排除别名的话,按前缀 int uint float complex 分类非常清晰。其中 complex 是复数,同时字符串也纳入了基本类型,不再是“字符的数组”,虽然也许本质还是如此。

Go 语言是强类型语言,但变量支持类型推导,定义的时候不必明确指定类型,编译器会根据初始值推断类型。未明确赋初始值的变量,其值也不再像 C 语言是随机的。作用域的规则和 C 相同。

Go 的控制结构非常精简,循环只有 for ,取消了 while until 等关键字,所有功能并入 for 中,同时 for 也兼具了部分语言的 foreach 功能,可以在循环时直接把键和值都取出来。if 没什么特别的好讲,switch 比较特殊,不需要 break ,因为默认就不会“穿透”到下一个条件。另外一点就是在表现形式上,紧跟在 for if switch 后面的内容都不再需要括号。

再接下来讲到 Array, Slice 和 Map,Slice 可以简单理解成动态长度的数组,Map 是键值对,键和值的类型都可以自行定义。同时也内置了不少方法来简化它们的使用。这些内容的引入,使 Go 相对 C 来说,明显更“现代”了。

Go 语言的函数使得返回多个变量更加方便,同时函数也像 JavaScript 中一样,可以赋值给一个变量,既可以作为参数进行传递,也可以作为返回值。这样一来,实现闭包就非常方便了。panic 和 recover 则提供了异常处理功能。Go 语言中也可以使用指针,但是由于函数已经能方便的返回多个值,指针的主要发挥空间,可能就在于节约内存,提高性能方面了。

结构体 Struct 是又一个和 C 语言对应的概念,一个结构体可以有多个字段,每个字段可以是不同类型,非常适合与数据库的一条记录对应。和 C 语言单纯用来存储数据的结构体不同,Go 的结构体更像是面向对象编程语言中的类,可以有自己的方法,但是这样一来就定下了一个基调,数据是根本,方法围绕数据展开工作。结构体中的字段也可以是另一个结构体,就这两点而言和 JavaScript 中的对象更加接近。Go 还为结构体引入了接口 Interface 概念,这个概念一般也是被用在面向对象语言中,接口的引入使具备同名方法的不同结构体能被统一使用。

现代编程语言都有自己的包和包管理工具,Go 也是如此,首先就像 C 语言有标准库,Go 自带大量核心包,包括输入输出、文件和目录读写等基本功能,也包括列表等复杂结构、哈希及加密算法、TCP HTTP RPC 网络操作。通过 import 关键字,就可以引入 Go 的核心包或者第三方包。最后介绍了如何创建自己的包,在这一节提到了如何用 godoc 命令快速给自己的包编写文档,和后文的 test 命令一起,体现出了 Go 语言的体系是非常完整的,在核心功能中,就为这些东西定义了标准的方法。这样一来 Go 语言就不容易像其他语言一样,在官方未定义的刚需领域,出现多种互不兼容的解决方案分散社区的精力。

Go 语言内置了 testing 包,用于测试,通过 go test 命令即可执行写好的测试代码。测试文件的文件名都以 _test 结尾,函数名都是以 Test 开头,又一次体现了其约定优于配置的设计思想。

第十章介绍了并发,是 Go 语言的一大宣传亮点,在代码中,通过 go 关键字执行一个函数,那个函数就可以在一个独立进程中运行,我想已经没有比这更简单的并发方案了。进程之间通信,通过 Channels 进行,一个进程监听,另一个进程发送,就完成了数据在进程间的传递。监听和发送都使用了 <- 操作符来进行,非常简洁,又非常形象和直观。

总结

Go 语言堪称完美,和 C 语言一样极简、精确、标准、高效,基础功能更强大、更现代,并在便利性上大大超过 C 语言,接近了 JavaScript 这样的动态语言。核心功能非常完善,文档和测试也被考虑在内,甚至编辑器插件也非常到位,能将代码格式标准化,避免用户代码风格不同导致的精力分散。

Introducing Go 这本书,也和 Go 语言一样,没有半句废话,却涵盖了 Go 语言的方方面面,各章节点到即止(毕竟平均算下来,每章分到的篇幅不足 10 页,其中还有 1 页是习题)。因此阅读这本书,首先要求读者有一定的编程经验,最好是多种语言的经验,和自己熟悉的语言相互验证参照,才能更好理解书中内容。这样的安排,不浪费大家时间,作者的工作主要就是给读者一份地图,不至于在刚入门时两眼一抹黑,像个无头苍蝇。一方面对 Go 语言建立一个整体的了解,另一方面要针对具体功能点查资料时,就有了线索和关键字,至于在一条具体的路上要走多远或能走多远,就全看读者自己了。

更多

12KB的Excel导出库sheetex是怎么来的

这是一个关于前端 Excel 导出库 sheetex 的故事:我为什么要做这个库,它为什么会这么小,以及你是否值得一试。 如过你问我“为什么非要在前端导出”,那将是另一个故事。 我的数据导出史 不知道你是否还记得自己是从什么时候开始接触数据导出的? 我对自己的“数据导出史”还算有些印象:在还没有正式工作的时候,如果有人问我要数据,我会在数据库管理工具里写个查询语句,然后视对方的用途,导出成SQL 语句、CSV 文件或者Excel 等;待到工作了,需要开发面向最终用户的系统,就不能再这么手工处理,导出功能成为系统标配,用户点击一个按钮,就要下载到相应的文件。 最早是 CSV 格式,因为其生成相对容易,而且也可以通过 Excel 软件进行查看,加上主要是内部用户,偶有无法打开也只要简单培训就能解决。 但随着用户类型变得广泛起来,这种“偶尔”也逐渐变成无法忍受,那么干脆直接导出 Excel 文件吧,反正开源库也已经成熟,于是使用 SheetJS

By 熊立丁
用 Aria2 & AriaNg 搭建离线下载平台

用 Aria2 & AriaNg 搭建离线下载平台

环境 硬件:Mac Mini 2014 4C4G 操作系统:Debian 12 IP地址:192.168.2.2 流程 1. 切换到管理员权限 su root 2. 安装 aria2 apt install aria2 3. 以服务的形式运行 aria2 aria2c --enable-rpc --rpc-listen-all=true --rpc-allow-origin-all --enable-rpc 启动 rpc 服务 --rpc-listen-all=true 允许从任意 IP 访问 --rpc-allow-origin-all 允许浏览器跨域访问 4. 配置 nginx 增加站点用于放置前端界面

By 熊立丁
浙ICP备15043004号-1