Golang教程之入门篇(一)

首先谈一个问题,这个教程主要在讲什么?网上的免费电子书数不胜数,而且讲的非常详细和全面,我写的也不一定比他们的好,而且真的要写,得花很多时间。所以,我把这个教程定位成一个对Golang这门语言的布道或引导,关于技术细节可能讲的不算清楚,更多的是偏应用。这篇文章我假设你拥有一定的计算机基础, 即使对Golang完全陌生,但是拥有其它编程语言的经验,比如PHP或Java。一.简介

Golang教程之入门篇(一)插图1

Go 语言起源 2007 年,并于 2009 年正式对外发布,该项目的三位领导者均是著名的 IT 工程师:Robert Griesemer,参与开发 Java HotSpot 虚拟机;Rob Pike,Go 语言项目总负责人,贝尔实验室 Unix 团队成员,参与的项目包括 Plan 9,Inferno 操作系统和 Limbo 编程语言;Ken Thompson,贝尔实验室 Unix 团队成员,C 语言、Unix 和 Plan 9 的创始人之一,与 Rob Pike 共同开发了 UTF-8 字符集规范简单说,Golang是Google主导,背后由一群大牛的操刀设计的新时代编程语言,虽然比较年轻,但是前景还是非常明朗的。二.优点Golang经常被人称为21世纪的C语言,它的设计参考了C、C++、Java等流行编程语言,从语言类型上说,Golang是属于静态编译型语言。虽然在语法上,Golang和大多数C系编程语言都差不多,但是我认为Golang以下优点值得一说:

  1. 简单,容易上手。如果了解过C++或Rust就会知道,其语言特性之多,语法之复杂,令人生畏,Golang还去除了C里面最难理解的指针操作。
  2. GC。C、C++在编程的时候需要手动管理内存,这导致编程复杂,而且容易出现内存泄露问题,Golang自带高效的GC机制,堪比jvm。
  3. 高性能。拥有GC的语言很多,大部分动态语言,比如PHP、JS、Python都有GC,但是拥有GC并且高性能的语言并不多,比如Java,但是Java过于笨重。Golang的性能稍低于C,但是和Java可以一战。
  4. 并发编程。这个估计是Golang最为出名的特性,基于goroutines 和 channels 能够实现一个非常简单的并发编程模型。Go的协程又被称为用户态线程,单机可以轻松开启百万协程,非常适合网络编程。
  5. 资源占用低。Go在内存占用方面大概可以和C++媲美,比Java要少几倍,网上看过一篇文章说知乎核心业务使用Golang重构后节省了80%的服务器资源(之前使用的是Python)。

其它优点: 部署简单,这个是相对于Java、PHP来说的,Go的应用可以直接编译成二进制文件放在任何一台电脑上都能跑,而Java运行少不了笨重的JVM,PHP更是一堆扩展。跨平台,Golang跨平台交叉编译非常简单,build的时候加个参数就行,无论是x86、amd64、darwin、freebsd、还是arm平台都能跑,我家路由器上面就跑了一个Go的程序。编译速度快,确实非常快,如果做安卓开发的同学应该比较了解Java的编译速度。代码风格强制规范,这一点在大型项目的开发中比较好,强制你遵循一定规范,便于合作开发。三.缺点说完优点说说缺点吧:

  1. 语法过于简单。有一些在其它语言里面理所当然的东西在Go里面居然没有,比如while循环、三元运算符。不过通过其它方式也能实现同样的效果,也不能说就是缺点。可能这是语言设计者故意所为,Go的设计是大道至简,一个事物只有一种解法,不太喜欢加一些语法糖。
  2. 缺少高效的异常处理机制。这一点是现在被诟病的比较多的一点,因为Java、PHP这类语言都有一种非常高效的try catch异常处理机制,而在Go里面,是通过一个函数会返回2个参数,其中一个是error类型,然后手动处理error的。最崩溃的是,Go里面几乎每一个函数调用都可能产生error,所以项目里面到处都是if err != nil。。。不过目前Go社区正在解决这个问题,考虑增加一种新的异常处理机制!
  3. 缺少泛型。 这一点也是被诟病比较多的一点,弱类型语言基本上不存在泛型问题,但是像C++、Java这类语言都有泛型机制,泛型主要是解决代码复用问题,举个例子,我们写一个比较大小的函数,因为函数参数必须声明形参类型,在Go里面,我们就要给每一种类型都写一个函数,但是Java里面,一个函数就可以搞定。
  4. 非OOP设计。Go并不是一个面向对象的语言,虽然我们可以通过结构体去模拟OOP,但是语言语法上缺少OOP的很多特性,有一点好处就是更加灵活,缺点就是抽象程度低。虽然当今编程领域OOP思想大行其道,不过OOP毕竟只是一种编程思想,并不是一定就对。

总得来说,这些缺点并不是致命的缺点,更像是语言特性上的缺少,有利也有弊,毕竟Go还比较年轻,而且Go社区也在考虑完善这些问题。四.应用场景说到应用场景,这里先说说一些Go写的知名开源项目:

  1. docker。这个就不多说了,最火的就是这个
  2. kubernetes。常说的k8s就是这个,是用来调度和管理docker集群的管理系统
  3. gogs。一款基于git的代码托管系统,类似于github和gitlab,不过其小巧易用,功能强大,部署方便
  4. syncthing。开源的文件同步系统,它使用了其独有的对等自由块交换协议,速度很快
  5. grafana。一款开源监控度量的看板系统
  6. etcd。一款分布式的,可靠的K-V存储系统,使用简单,速度快,又安全
  7. beego。国产开源的高性能Web框架,让你快速的开发Go Web应用服务
  8. influxdb。可伸缩的数据库,使用场景主要用来存储测量数据,事件点击以及其他等实时分析数据

从上面可以看出来,大部分都是基于网络的应用,实际也是这样,目前Go主要用在网络编程上面,虽然Go的性能很好,但是并不适合拿来写OS或者GUI应用,虽然也有人尝试过这样做。说到网络编程就不得不说Web编程,利用Go的协程,轻轻松松写出高并发的Web应用,目前Go的Web框架的也很多,比如gin、beego、echo,可用性都很高,虽然开发速度和灵活性上面比PHP等动态语言差一点,但是性能上无可挑剔。另外,Go也可以用于服务器编程,比如说处理日志、分布式数据库的开发,还有很多云平台也是使用Go开发。五.学习资源虽然接下来的教程我会带领大家学习,但是本教程讲的不会太细,如果你想仔细学习Go语言,我建议你可以参考下面的资源:

  1. The Way To Go。github上面非常火的一个开源教程,非常详细,中文名字叫《Go入门指南》,推荐看一下。
  2. Go语言高级编程。也是github上面一个开源的图书,很不错,已经出版,有钱的可以买个纸质版支持一下。
Golang教程之入门篇(一)插图3
  1. 菜鸟笔记Go教程。前面2个说的都是比较重量级的资源,东西非常多和细,菜鸟笔记的教程比较简单,东西少,缺点就是讲的比较浅,但是适合入门。毕竟有时候学习一个新东西不一定要一开始什么都掌握,可以先浅后深。
  2. 视频教程。如果你实在比较懒,这里推荐一个视频教程,出自韩顺平,以前看过他的PHP教程,感觉讲的可以,这是一个Go的教程,视频我没看过,但是从目录上看,非常基础和详细,总共391节,每节10几分钟,适合基础薄弱的童鞋。这里说点题外话,现在网上有非常多卖课的平台,各种视频教程数不胜数,看视频比看书有意思点,但是我建议不要瞎看,找一门讲的比较好的看一下就行了,因为大部分视频教程讲的东西都差不多,最多就是换个老师换个场景。

作者:合一研发部-王本俊

原创文章 Golang教程之入门篇(一),版权所有
如若转载,请注明出处:https://www.itxiaozhan.cn/20229329.html

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注