今天是Go语言系列的第一篇文章,我们来聊聊这门新的语言和它的基础语法。
浅谈Golang
作为程序员而言,往往对于学习新的语言都是有抗拒的。如果你用惯了Java,那么你可能不太愿意去学Python,如果你刚学C或者C++可能你也会看不上Java。因为这个原因还会引发很多口水仗,这很正常。我当时写C++的时候也看不上Java,写了Java又不想学Python,现在学会了Python,有时候也会不想看其他语言写的代码。
但是随着我们的成长和实力的提升,我逐渐发现学习一门语言的成本在飞快地下降。毕竟天下语言都是程序,就好像武侠小说里各门各派的武功眼花缭乱,但是归结起来无非是拳脚功夫、刀剑或者是内功这么几种。语言也是一样,虽然我会的语言也不够多,远远没达到可以指点江山的地步。但也发现了很多语言之间的相关性实在是很强,有些理念一脉相承,有些更像是一个模子里刻出来的。既然如此,我们为什么需要学习Go这样一门语言呢?
网上相关的信息很多,很多大牛架构师高谈阔论。很多观点和看法我并没有很深的体会,所以我就不做搬运工了。简单说下我个人的一点浅薄的看法。
当初学习Golang这门语言的原因很简单,纯粹是因为工作需要。当前的公司几乎所有的系统都是以Golang写的,所以学习Golang是必须的。但是学会语言基本的使用和精通一门语言这是两回事,学会基本的用法是因为工作需要,而让我想要花时间把这门语言精通是因为一门课程。这门课程非常著名,它是MIT(麻省理工)的分布式系统的公开课,当中的内容和课后作业都非常硬核,更关键的是课后作业是用Golang写的。
在学习这门课程的过程当中,经过了一些思考和一些观察,Golang的确在分布式处理的场景和问题当中有一定的优势,许多优秀的解决方案都是基于Golang写的。并且这两年各类语言的流行变迁情况也印证了这一点,在最新的全世界程序员最想要学习的语言当中,Golang排名前3。在全球语言流行排行当中,Golang也冲进了前十,要知道这门语言才诞生十年。
并且在国内Golang工程师的需求量也与日俱增,我纯属好奇去拉勾网看了一下,全国Golang的岗位是341个。
看起来似乎不多,但是我们再来看下就业大户Java,也才500+
要知道,Java几乎是CS必学的语言,所有CS毕业以及相关专业毕业的学生都可以号称自己会Java。但是Go不一样,它太新了,诞生不过十年,以目前高校的反应速度以及筛选课程的能力,它入选中国的教材目测最少还需要5-10年。并且和Java相比,Golang要好学的多。所以如果你还没有毕业,想要成为一名工程师,想要找一份工作,那可以考虑学习一下Go,说不定竞争压力会比Java小得多。
我个人觉得Golang是一门非常有个性的语言,长处与短处都非常的明显。关于它的长处很多,相比于一一列举出来,在实际学习和运用的过程当中领会到的感受会深得多。
Hello World
学语言第一件事就是敲Hello World,我想所有语言都不例外,我们也来看下Golang的Hello World,来看下它的基本结构。
package main
import (
"fmt"
)
func main() {
fmt.Println("Hello World")
}
我们来简单看下这段代码,可以把这段代码分成三个部分。
最上面的是模块名,也可以说成是包名,然后是引入包的语句。这一块其实没什么好说的,很多语言都是这样的结果,比如Java和Python。在Golang当中main package表示一个独立的程序,而不是一个包。在main package下的main函数代表这个独立程序的执行入口,和C++以及Java当中的main函数比较类似。我们可以在main函数里调用其他包的各种函数。
fmt是Golang当中的标准输出包,我们调用它来输出我们想打印的东西。
写完了Hello World之后就要执行了,Golang提供了两种执行方式,一种是直接go run + 要执行的文件名。还有一种是和C++一样先进行编译,再通过./调用编译之后的二进制包。
当然执行之前我们需要在电脑上配置Golang的环境,这方面网上的资料很多,并且Golang的安装也比较简单,基本上没有什么坑,所以照着网上的博客安装就好了。
我们来分别看下这两种调用方式,第一种我们直接使用go run执行代码:
还有一种方式是我们先通过go build对Golang的代码先进行编译,会生成一个二进制文件,之后我们直接./运行这个文件。
所以从这里我们可以看出来,Golang是编译型语言而不是解释性语言,因此它的效率会非常高,实际上由于Golang的一些底层设计和特性,Golang的运行效率非常高,在绝大多数场景比Java更快,仅仅次于C++。
IDE
最后简单聊聊Golang的开发环境,其实现在开发环境已经普世化了,很多代码编辑器可以用来写各种语言。比如业内比较流行的vscode,Atom,Sublime等等,这几种当中我个人最喜欢vscode,功能非常强大,拥有海量的插件支持,并且页面风格和使用体验也不错,并且还是免费的。
另外一个比较常用的是Goland,它是Jet Brains公司专门为Golang开发的IDE。Jet Brains公司专门发开各种语言的IDE,几乎每一种语言的IDE都广受欢迎。写过Java的同学应该对IDEA都不陌生,它的体验比eclipse要好用得多。同样,Goland对于Golang的支持也非常好,使用体验非常棒,而且如果之前用过它家的其他产品会非常适应。
Goland页面风格以及各方面体验都非常棒,但缺点也很明显,一个是基本上只支持Golang,另一个缺点就是贵。免费的社区版要阉割掉一些功能,而专业版则要好几千人民币。不过如果是学生的话可以免费申请,不得不说还是非常人性化。
除了这些之外,还有七牛团队开源的liteide,基于C++ QT开发,因此执行效率很高,但据说调试功能不太好用。我也没有用过,感兴趣的小伙伴可以试试。
今天的文章就是这些,如果觉得有所收获,请顺手点个在看或者转发吧,你们的举手之劳对我来说很重要。