go语言发展-引领云端

Go 是非常年轻的一门语言,它的主要目标是“兼具 Python 等动态语言的开发速度和 C/C++ 等编译型语言的性能与安全性”。Go 是非常年轻的一门语言,它的主要目标是“兼具 Go语言(或 Golang)起源于 2007 年,并在 2009 年正式对外发布。从今天起要在14天系统的规划学习Go语言,有兴趣的朋友一起哦~


主要介绍Go语言的发展历史、Go语言的特性、安装和配置Golang、搭建集成开发环境GoLand、Go语言的结构组成及编码规范。

Go语言的发展历史

Go语言的三个作者分别是:罗伯特·格利茨默(Robert Griesemer)、罗伯·派克 (Rob Pike) 和 肯·汤普森(Ken Thompson)。
Robert Griesemer是Google V8、Chubby和HotSpot JVM的主要贡献者。
Rob Pike主要是UNIX、UTF-8、plan9的作者。
Ken Thompson主要是B语言、C语言的作者、同时也是UNIX之父。

2007年,Google准备推出一种既不损失性能又可以降低代码复杂性的编程语言,同年9月, Rob Pike将这门编程语言正式命名为Go;2008年5月,Google全力支持Go编程语言的研发;

2009年11月,Go将代码全部开源,并被评为当年的年度语言;

2012年3月28日,Go发布第一个正式的稳定版本。与此同时,Go团队承诺新版本都会兼容旧版本。


Ø Go语言的特点和优势


1.简单易学

Go语言语法简单,包含了类似C语言的语法。如果读者已经掌握了两到三门编程语言,那么学习Go语言只需要几天的熟悉过程。即使一名刚入门的开发者,花几个星期也能写出来性能较高的程序。


2.自由高效

Go语言的编译速度明显优于 Java 和 C++,此外,Go语言还拥有接近C语言的运行效率和接近PHP的开发效率。换言之,Go语言等同于将开发效率和运行效率进行了完美的融合。Go语言支持当前所有的编程范式,其中包括过程式编程、面向对象编程、面向接口编程、函数式编程。开发者们可根据需求自由的组合。


3.强大的标准库

Go中的标准库非常稳定,丰富的标准库覆盖网络、系统、加密、编码、图形等各个方面,尤其是网络和系统的库非常实用。使得开发者在开发大型程序中,几乎无需依赖第三方库。


4.部署方便

Go语言不使用虚拟机,Go语言的代码可以直接输出为目标平台的二进制可执行文件。Go语言有自己的链接器,不依赖任何系统提供的编译器和链接器。因此编译出的二进制可执行文件几乎可以运行在任何的系统环境中。


5.原生支持并发

Go 是一种非常高效的语言,从语言层原生支持并发,使用起来非常的简单。Go的并发是基于Goroutine。Goroutine 类似于线程,但并非线程,是 Go 面向线程的轻量级方法。创建 Goroutine 的成本很低,只需几千个字节的额外内存。通常一台普通的桌面主机运行上百个线程就会负载过大,同样的主机却可以运行上千甚至上万个 Goroutine。Goroutine 之间可以通过Channel实现通信。Goroutine 以及基于Channel的并发性方法可最大限度地使用 CPU 资源。


6.稳定性强

Go拥有强大的编译检查、严格的编码规范,具有很强的稳定性,此外Go还提供了软件生命周期(开发、测试、部署、维护等等)的各个环节的工具,如go tool、go fmt、go test。


7.垃圾回收

Go语言的使用者只需要关注内存的申请而不必关心内存的释放,Go语言内置Runtime来自动进行管理。虽然目前来说GC(内存垃圾回收机制)不算完美,但是足以应付开发者所能遇到的大多数情况,使开发者将更多精力集中在业务上,同时Go语言也允许开发者对此项工作进行优化。

Ø 使用Go语言的项目与企业


Go语言可以代替C或C++做一些系统编程,如处理日志、数据打包、虚拟机处理、文件系统等。Go语言在网络编程的应用也非常广泛,包括Web应用、API应用、下载应用。许多知名的开源项目中都使用到了Go,如分布式系统中的Etcd、由Google开发的Groupcache数据库组件、云平台中Docker和Kubernetes、区块链中的Ethereum和Hyperledger等。


Go发布之后,很多公司开始用Go重构基础架构,特别是云计算公司。很多公司直接采用Go进行开发,最近热火朝天的Docker就是采用Go语言进行开发的。


使用Go语言进行开发的一些国外公司有Google、Docker、Apple、Cloud Foundry、CloudFlare、Couchbase、CoreOS、Dropbox、MongoDB、AWS等。
使用Go语言进行开发的国内企业有阿里巴巴、百度、小米、PingCAP、华为、金山、猎豹移动、饿了么等。


Ø 安装和配置Golang

广义的Golang就是指Go语言,后缀lang代表language的意思,狭义的Golang特指Go语言开发环境。在Mac、Windows和Linux三个平台上都支持Golang。读者可以从Golang官网下载相应平台的二进制文件,该网站在国内不容易访问,也可以访问Go语言中文网进行安装软件的下载。


Ø Windows版本安装


Windows环境下(),下载格式为MSI的安装程序。双击启动安装并遵循提示。在位置c:\Go中安装Golang,并且添加目录c:\Go\bin到path环境变量。如果安装文件是MSI格式,Go语言的环境变量会自动设置完成,如图所示。


(1)右键单击【我的电脑】,选择【属性】选项,进入系统窗口。


(2)单击【高级系统设置】,打开【系统属性】窗口。


(3)单击【环境变量】按钮,打开【环境变量】窗口


(4)在【系统变量】区域,单击【新建】按钮,打开【新建系统变量】窗口。假设GO安装于C盘根目录,新建:
● GOROOT:Go安装路径(例:C:\Go\)
● GOPATH:Go工程的路径(例:D:\go\)。如果路径包含多个子目录,以分号进行分隔。


(5)在【系统变量】区域,选中系统变量Path,单击【编辑】按钮,打开【编辑系统环境变量】窗口。


(6)修改系统变量如图所示

● Path:在Path中增加C:\Go\bin;%GOPATH%\bin。

需要把GOPATH中的可执行目录也配置到环境变量中, 否则自行下载的第三方Go语言工具将无法使用。

工作目录用来存放开发者的代码,对应Golang里的GOPATH这个环境变量。该环境变量被指定之后,编译源代码所生成的文件都会放到此目录下。

GOPATH之下主要包含三个目录: bin、pkg、src。

bin目录主要存放可执行文件;

pkg目录存放编译好的库文件, 主要为*.a文件; 

src目录下主要存放go的源文件。

使用快捷键win+R键,输入cmd,打开命令行提示符,在命令行中输入:

go env # 查看得到go的配置信息,不同环境下显示会略有差异。

如图所示,可以看到GOPATH已经修改为D:\go\。


go version # 查看版本号,如图所示。


Ø Mac OS版本安装

Mac OS环境下,下载格式为osx的安装程序。双击启动安装。按照提示,在/usr/local/go中安装Golang,并且将文件夹/usr/local/go/bin添加到PATH环境变量中。

1. Mac系统下安装

双击pkg包,顺着指引,即可安装成功。 在命令行输入 go version后,如果获取到go的版本号,则代表安装成功。

2. Mac系统下配置环境变量

(1)打开终端输入cd ~进入用户主目录; 

(2)输入ls -all命令查看是否存在.bash_profile; 

(3)存在既使用vim .bash_profile 打开文件; 

(4)输入 i 进入vim编辑模式; 

(5)输入下面代码, 其中 GOPATH: 日常开发的根目录。GOBIN:是GOPATH下的bin目录。

export GOPATH=/Users/steven/Documents/go_project

export GOROOT= /Usr/local/go

export GOBIN=$GOROOT/bin

export PATH=$PATH:$GOBIN

(6)单击ESC,并输入 :wq 保存并退出编辑。可输入vim .bash_profile 查看是否保存成功。

(7)输入source ~/.bash_profile 完成对golang环境变量的配置,配置成功没有提示。

(8)输入go env 查看配置结果。


Ø Linux版本安装


Linux环境下,打开官网下载地址,选择对应的系统版本,下载格式为tar的文件,并将该安装包解压到/usr/local。将/usr/local/go/bin添加到PATH环境变量中。

搭建集成开发环境GoLand

GoLand是由JetBrains公司推出,旨在为Go开发者提供的一个符合人体工程学的新商业集成开发环境(Integrated Development Environment,IDE)。GoLand具有以下特点:

编码辅助功能;

符合人体工程学的设计;

工具的集成;

IntelliJ插件生态系统。

Ø GoLand的下载及安装
打开GoLand官方下载地址,如图所示。单击网页中【DOWNLOAD】按钮,该网站自动识别计算机系统,并下载最新的编辑器;下载完成后,在本地执行解压,安装。


单击【next】按钮,选择要安装的路径,然后单击【next】,会出现安装选项。根据计算机的型号,选择合适的版本,继续单击【next】按钮。保持默认的程序启动目录,单击【install】进行安装。整个安装过程很快,几乎一路【next】到底。


Ø GoLand的使用
(1) 打开GoLand工具。


(2)单击【New Project】创建项目,如图所示。


Ø 编写第一个程序HelloWorld


在D:\go\ch01目录下,新建一个文本文档(记事本),通常默认名为“新建文本文档.txt”。将文本重命名为后缀以 .go 结尾的文件名,例如01_HelloWorld.go,并输入以下内容:


执行Go语言程序有如下几种方式。
(1) 使用go run命令。
l 步骤1:使用快捷键win+R,输入cmd打开命令行提示符。


l 步骤2:进入01_HelloWorld.go所在的目录。


l 步骤3:输入go run 01_HelloWorld.go命令进行编译。


(2) 使用go build命令。
l 步骤1:使用快捷键win+R,输入cmd打开命令行提示符。
l 步骤2:进入01_HelloWorld.go所在的目录。
l 步骤3:输入go build 01_HelloWorld.go命令进行编译,产生同名的01_HelloWorld.exe文件。


l 步骤4:输入01_HelloWorld.exe。


(3) 使用GoLand
点击main函数左侧绿色小箭头(运行)。

(4)使用goland:

单击main函数左侧绿色小箭头(运行)。如图所示。 


Ø GoLand快捷键


工欲善其事,必先利其器。编辑器快捷键的使用将更好的提高开发效率,在此列举常用的快捷键组合,如表所示。

快捷键 说明
Ctrl + j 快速提示
Ctrl + Ctrl +上下键 上下移动行内容
Alt + 左右键 文件编辑窗口切换
Alt +上下键 光标在相邻函数跳转
Ctrl + d 向下复制行内容
Ctrl + y 删除当前行
Ctrl + Ctrl + Backspace 返回上一次编辑位置
Ctrl + Alt + Enter 光标跳上,新建空白行
Ctrl + Enter 光标跳下,新建空白行
Ctrl + Alt + l 格式化代码
Ctrl + Alt + o 格式化包声明
按两次 Ctrl 打开最近操作文件
Ctrl +左键单击 跳转到选中函数的定义
Ctrl + Shift + p 选择内容,查看其返回类型
Ctrl + Alt + v 自动创建变量名,用于接收函数返回值
Ctrl + Alt + m 将当前选择的内容抽取函数
Ctrl + Alt + s 软件设置


如果需要其他的使用组合,请参考官方文档。

Go语言的结构组成及编码规范

 


Ø Go语言的结构组成
硅谷创业之父保罗·格雷厄姆在《黑客与画家》中提到,软件工程师也是创造者,与画家、建筑师、作家一样。一个好的程序,不仅仅是技术的产物,更是技术与艺术相结合的产物。每个程序都有其自身的结构,而结构又深深地影响着程序的效率,毋庸置疑,程序的结构是功能与效率的承担者。下面通过程序了解一下Go语言的基本结构。
1 package main
2 import "fmt"
3 func main() {
4 /* 这是第一个简单的程序 */
5 fmt.Println("Hello, World!")
6 }
第1行 package main 定义了包名。必须在源文件中非注释的第1行指明这个文件属于哪个包,如package main。package main表示一个可独立执行的程序,每个 Go 应用程序都需要包含一个名为 main 的包。并且在该包包含一个叫main()的函数(该函数是Go可执行程序的执行起点,既不能带参数,也不能定义返回值)。
第2行 import "fmt" ,import语句用于导入该程序所依赖的包。由于本示例程序用到了Println()函数,所以需要导入该函数所属的fmt包。fmt 包实现了格式化 IO(输入/输出)。
第3行 func main() 是程序入口。所有Go函数以关键字func开头,每一个可执行程序所必须包含main 函数,通常是程序启动后第一个执行的函数,如果有 init() 函数则会先执行init()函数。
第4行 /*...*/ 是注释,代表着在程序执行时,这部分代码将被忽略。
第5行 fmt.Println(...) ,将字符串输出到控制台,并在最后自动增加换行字符 \n。 使用 fmt.Print("hello, world\n") 也会得到相同的结果。 
除此之外,还有以下几点值得注意。
(1) 只有 package 名称为 main 的包可以包含 main 函数。
(2) 一个可执行程序有且仅有一个 main 包。
(3) 通过 import 关键字来导入其他非 main 包。
(4) 可以通过 import 关键字单个导入,也可以同时导入多个


Ø Go语言的标识符
1. 标识符
标识符就是标识某个实体的一个符号,也就是给实体起的名字,从而与其他实体区分开。例如,在日常生活中有许多交通工具,发明者给它们起了名字,如图所示。


当然,在不同的环境下,标识符含义也不相同。比如嬴政,在现实生活中,是历史人物秦始皇,而在游戏《王者荣耀》中就是一个法师英雄,如图所示。


2. 预定义标识符
预定义标识符是Go语言系统预先定义的标识符,具有见名知义的特点,如函数“输出”(printf)、“新建”(new)、“复制”(copy)等。预定义标识符可以作为用户标识符使用,只是这样会失去系统规定的原意,使用不当还会使程序出错。下面列举了36个预定义标识符,如表所示。

append bool byte cap close complex complex64 complex128 uint16
copy false float32 float64 imag int int8 int16 uint32
int32 int64 iota len make new nil panic uint64
Print println real recover string true uint uint8 uintptr


3. 关键字
Go语言的关键字是系统自带的,是具有特殊含义的标识符。Go语言内置了25个关键字用于开发。下面列举了Go代码中会使用到的25个关键字或保留字,如表所示。

break default func interface select
case defer go map struct
chan else goto package switch
const fallthrough if range type
continue for import return var


4. 自定义标识符
用户根据需要自定义的标识符,一般用来给变量、类型、函数等程序实体起名字。
自定义标识符实际上是一个或是多个字母(A~Z和a~z)、数字(0~9)、下画线(_)组成的序列,但是第一个字符必须是字母或下画线而不能是数字。
Go不允许在自定义标识符中使用@、$和%等标点符号,或预定义标识符和关键字。Go是一种区分大小写的编程语言。因此,Manpower和manpower是两个不同的标识符。
无效的标识符如表所示。

无效标识符 无效原因
1xy 以数字开头
case Go 语言的关键字
chan Go 语言的关键字
nil 预定义标识符


需要注意的是,在现实生活中,名字可以重复,比如可能有很多人叫作张三,但是在Go语言中,标识符绝对不能重复,要确保每个标识符都代表着一个独立的个体。


Ø Go语言的编码规范
1. 注释
注释就是对代码的功能进行解释,方便开发人员理解被注释部分代码的作用。在Go语言中有以下两种形式:
(1)单行注释:最常见的注释形式,可以在任何位置使用以//开头的单行注释。
(2)多行注释:也叫块注释,均以/*开头,并以*/结尾,且不可以嵌套使用。多行注释一般用于文档描述或注释成块的代码片段。
2. 分隔符
程序中可能会使用到的分隔符:括号()、中括号[]和大括号{}。
程序中可能会使用到的标点符号,如表所示。

符号名称 符号
.
逗号 ,
分号 ;
冒号 :
省略号


3. Go 语言的空格
Go 语言中变量的声明必须使用空格隔开,如:var age int。
语句中适当使用空格能让程序更易阅读。在变量与运算符间加入空格,程序看起来更加美观,如:
a = x + y; 
4. 语句的结尾
在 Go 程序中,换行代表一个语句结束。Go语言中是不需要像Java一样以分号结尾,因为这些工作都将由Go编译器自动完成。
如果打算将多个语句写在同一行,它们则必须使用分号“;”人为区分,但在实际开发中并不鼓励这种做法。
5. 可见性规则
Go语言中,使用大小写来决定标识符(常量、变量、类型、接口、结构或函数)是否可以被外部包所调用。
如果标识符以一个大写字母开头,那么其对象就可以被外部包的代码所使用(使用时程序需要先导入这个包),如同面向对象语言中的 public。
如果标识符的对象以小写字母开头,则对包外是不可见的,但是它们在整个包的内部是可见并且可用的,如同面向对象语言中的 private 。

 

小结:14天搞定Go语言 —初识Go语言—Go语言的发展历史、Go语言的特性、安装和配置Golang、搭建集成开发环境GoLand、Go语言的结构组成及编码规范

介绍了Go语言的开发环境,首先了解Go语言环境的安装,以及GOROOT和GOPATH 的区别,然后介绍了GoLand的使用,并且演示了Go的第一个程序输出。最后通过HelloWorld案例的分析,详细的解释了Go语言的构成及编码规范。

posted @ 2024-03-03 16:52  physique  阅读(5)  评论(0编辑  收藏  举报