最近在学习go语言,一段时间后真的被它的简洁性深深吸引了,因此特别的想推荐给其他的朋友。
1、适用领域
“Go is especially well suited for building infrastructure like net worked servers, and tools and systems for programmers, but it is truly a general-purpose language and finds use in domains as diverse as graphics, mobile applications,and machine learning.”
主要适合系统程序员编写一些基础组件,如网络服务器,分布式云管理器等,著名的docker、etcd即是用go编写
2、语言特点
首先是语法简单,类C的语法设计,上手很快;
自带垃圾回收机制,我以前是用C和C++的,C中的malloc和free一不小心就会出错,搞得人是相当头大,C++的new和delete亦是如此,尽管C++11中引入了智能指针,但是还是不如自动管理内存来的方便;
对并发的原生的支持,通过Goroutine实现协程的概念,协程是比线程更细粒度的并发单位,因此并发度更高;Goroutine之间通过channel管道进行通信和同步,并发编程用起来特别方便;
标准库功能强大,标准库作为语言自带的一部分,提供了网络、操作系统、数据库、加解密等各种功能的轮子,大大节约了程序员造轮子的时间,特别方便
自带编译、测试、性能调优等丰富的工具
3、学习资料
3.1入门资料
1、书籍
短短160页的书,介绍了go基本的语法,很适合入门读
2、网站
通过代码示例讲解go语言基本知识点,真正的learn by doing,通过学习示例代码可以做到快速上手
3.2提高资料
1、书籍
这本书也比较精炼,全书240页,但难度较上本有所提高,涉及了一些go内置数据结构的底层实现、go runtime调度器原理,go对组成和多态的支持,以及一些go并发模式,是一本非常不错的资料
这本号称go语言圣经,比较厚,有400来页,我本人不喜欢一上来看大部头的书,这本书比较全,可以作为一本参考书目,不懂得地方查阅一下
2、网站
大牛讲解并发和并行的区别,获益良多
Go Concurrency from the Ground Up | doxsey.net
一个简单的goroutine并发调度器的实现,虽然是个非常简陋的版本,但也可以研究下调度器底层实现的思路
3.3 提高项目
本着learn by doing的思路,建议大家多用go做几个项目练练手,这里我十分推荐mit 6.824分布式课程的实验,总共4个实验,所有的实验都给了框架和详细的实验指南,并且网上有很多参考资料,虽然有些难度,但是做完以后会有很多收获的