疫情下的选择
编者实际接触Go语言始于2020年3月12日,在此之前主要以C/C++作为开发语言,涉及产业为汽车工程软件开发,可概括为windows下的桌面软件类别。在使用Go语言开发之前,编者对Go基本没有了解,好在编者有一定开发经验,因此在接受需求之后,开始搜寻资料、查阅书籍、搭配环境,大约花费一周的时间熟悉了Go语言的语法、特点,并通过实例练习进一步了解了Go语言的特性。而后参与实际项目开发,逐渐掌握Go语言编程的方法,并配合docker和Kubernetes的使用,让我对Go在微服务和分布式的实现上有了更深的认识。但真正的精通一门编程语言还有很多的工作需要做,这包括对开发工具的使用、对语言高效性的理解、对相关辅助工具的熟悉程度等,因而特意分享一些学习心得和开发经验供诸君参考,如有不当之处,也请诸君批评指正。
Go语言的诞生
Go语言诞生于谷歌公司内部,2007年的时候由三位非常知名工程师(科学家)Robert Griesemer、Rob Pike和Ken Thompson构建,2009年11月正式向外发布,同时向所有开发者开源代码。随后Go语言社区逐渐规范,诸多的go语言爱好者加入社区参与Go的进一步开发,目前Go语言已经相当完善,但是版本仍在不断更新,编者当前使用的是go1.14版本,后续实例均在1.14版本上演示。
Go语言的特性
Go被创立之初的目的就是简单、高效、实用,让程序的开发变得简单。互联网时代的典型特征是多核化和集群化,高性能服务器拥有64核、128核,甚至更多核,但是我们依旧在使用为单核设计的技术在编程。编程的技术同样在演化。大部分程序不再由单个开发者来完成,而是由处于不同时区、不同时间段工作的一组人来完成。大项目被分解为小项目,指派给不同的程序员,程序员开发完成后,再以可以在各个应用程序中交叉使用的库或者包的形式,提交给整个团队。Go语言是一种让代码分享更容易的编程语言。Go语言自带一些工具,让使用别人写的包更容易,并且Go语言也让分享自己写的包更容易。
作为一门语言,Go不仅定义了能做什么,还定义了不能做什么。Go语言的语法简洁到只有几个关键字,便于记忆。Go语言的编译器速度非常快,有时甚至会让人感觉不到在编译。所以,Go开发者能显著减少等待项目构建的时间。因为 Go语言内置并发机制,所以不用被迫使用特定的线程库,就能让软件扩展,使用更多的资源。 Go语言的类型系统简单且高效,不需要为面向对象开发付出额外的心智,让开发者能专注于代码复用。Go语言还自带垃圾回收器,不需要用户自己管理内存。
Go语言使用了更加智能的编译器,并简化了解决依赖的算法,最终提供了更快的编译速度。编译Go程序时,编译器只会关注那些直接被引用的库,而不是像 Java、 C 和 C++那样,要遍历依赖链中所有依赖的库。因此,很多G 程序可以在 1 秒内编译完。在现代硬件上,编译整个Go语言的源码树只需要 20 秒。Go语言对并发的支持是这门语言最重要的特性之一。goroutine很像线程,但是它占用的内存远少于线程,使用它需要的代码更少。通道(channel)是一种内置的数据结构,可以让用户在不同的goroutine之间同步发送具有类型的消息。这让编程模型更倾向于在goroutine之间发送消息,而不是让多个goroutine争夺同一个数据的使用权。
第一个Go程序
这里我们写下第一个Go程序,期待后面的内容会更精彩
package main
import "fmt"
func main() {
fmt.Println("Hello, world. 你好,世界")
}