文章目录
- 一、Go语言介绍
- 二、Go语言特性
- 三、Go语言用途
- 四、开发环境搭建
- 五、建立工作区并创建Go程序
- 六、入口文件基本代码介绍
- 七、go命令介绍
- 7.1 基本命令
- 7.2 build 与 run命令
- 7.3 install命令介绍
- 八、命名规范
- 8.1 变量规范定义
- 8.2 关键字
- 8.3 保留字
- 8.4 需要注意的问题
道阻且长,行则将至,行而不辍,未来可期🌟。人生是一条且漫长且充满荆棘的道路,一路上充斥着各种欲望与诱惑,不断学习,不断修炼,不悔昨日,不畏将来!
GO语言也被称为21世纪的C语言,在开发与性能效率上都占据优势(Python+C)🚀。让我们一起来了解这门语言的魅力吧,希望这篇能够带给你们或多或少的帮助!!
本章节开始,我们将步入Go语言的学习,希望它能够成为您的得力工具,让我们一起来了解这门编程语言的魅力所在吧。笔者将会持续更多Go语言相关内容…
一、Go语言介绍
Go 即Golang,是Google公司2009年11月正式对外公开的一门编程语言。
Go是静态强类型语言,是区别于解释型语言的编译型语言
- 静态:创建变量时必须声明类型
- 强类型:不同类型不允许直接运算
- 编译型:在程序运行之前首先将源代码编译成机器码(二进制)再由机器来运行
Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。
Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。
二、Go语言特性
GC、内存管理、Goroutine、编译迅速、跨平台编译
简洁、快速、安全:
Go语言的语法规则严谨,没有歧义,更没什么黑魔法变异用法。任何人写出的代码都基本一致,这使得Go语言简单易学。放弃部分“灵活”和“自由”,换来更好的维护性,这是值得的。
并发编程:
Go语言最大的特色就是从语言层面支持并发(Goroutine),Goroutine是Go中最基本的执行单元。事实上每一个Go程序至少有一个Goroutine:主Goroutine。当程序启动时,它会自动创建。
高并发是Golang语言最大的亮点
很多人将GO语言称为21世纪的C语言,因为GO不仅拥有C的简洁和性能,而且还很好的提供了21世纪互联网环境下服务端开发的各种实用特性,让开发者在语言级别就可以方便的得到自己想要的东西。
三、Go语言用途
- 服务端开发
- 分布式系统,微服务
- 网络编程
- 区块链开发
- 内存KV数据库,例如boltDB、levelDB
- 云平台
Go 语言被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。
对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于游戏服务端的开发而言是再好不过了。
2015年8月 go1.5发布,这个版本被认为是历史性的。完全移除C语言部分,使用GO编译GO(自举),少量代码使用汇编实现。另外,他们请来了内存管理方面的权威专家Rick Hudson,对GC进行了重新设计,支持并发GC,解决了一直以来广为诟病的GC时延(STW)问题。并且在此后的版本中,又对GC做了更进一步的优化。到go1.8时,相同业务场景下的GC时延已经可以从go1.1的数秒,控制在1ms以内。GC问题的解决,可以说GO语言在服务端开发方面,几乎抹平了所有的弱点。
Go语言是Google公司创造的语言,也是Google主推的语言。国外如Google、AWS、Cloudflare、CoreOS等,国内如七牛、阿里、小米、京东等都已经开始大规模使用Golang开发其云计算相关产品。
有人说:GO语言之所以出名,是赶上了云时代。但为什么不能换种说法?是GO语言促使了云的发展呢?
四、开发环境搭建
Go安装包下载地址:https://golang.org/dl/
Linux安装:
1、下载二进制包:go1.13.3.linux-amd64.tar.gz
2、将下载的二进制包解压至 /usr/local目录。
tar -C /usr/local -xzf go1.16.5.linux-amd64.tar.gz
3、将 /usr/local/go/bin 目录添加至PATH环境变量:
//这样在任意 位置敲 go 就可以执行
export PATH=$PATH:/usr/local/go/bin
Mac安装:
Mac下直接双击go1.16.5.darwin-amd64.pkg,一路下一步安装即可
Window安装:
Windows 下可以使用 .msi 后缀(在下载列表中可以找到该文件,如go1.16.5.windows-amd64.msi)的安装包来安装。
默认情况下 .msi 文件会安装在 C:\Go 目录下。将 C:\Go\bin 目录添加到 Path 环境变量中。添加后你需要重启命令窗口才能生效(默认已经添加了,这样在cmd窗口下敲 go 能找到该命令)
配置GOPATH和GOROOT:
GOPATH:
代码存放路径,该目录下有三个文件夹(如果没有,要手动创建),
windows和mac默认在用户名下的go文件夹(GOPATH="/Users/ziye/go")
-src——源码(包含第三方的和自己项目的)
-bin——编译生成的可执行程序
-pkg——编译生成的包文件
GOROOT:go开发工具包的安装路径,Mac默认:/user/local/go
将GOROOT下的bin路径加入环境变量(默认已处理)这样任意位置敲 go 都能找到该命令
windows下修改在系统变量里添加Go文件的存放位置
变量名:GOPATH
变量值:C:\>GoProject
# Mac永久保存环境配置,vim ~/.bash_profile 或者 vim ~/.zprofile(根据自己终端配置来决定)
export PATH=/usr/local/go/bin:$PATH # 确保直接使用go命令能够找到编译器
export GOROOT=/usr/local/go # go编译器安装目录
export GOPATH=/Users/ziye/go # 存放项目代码,编译后等可执行文件、编译后生成的包文件
export GOBIN=/Users/ziye/go/bin # 编译后可执行文件存放目录
安装完成后在终端测试:出现反馈则说明安装成功
IDE推荐使用Jetbrains
系列的GoLand编辑器,下载地址:https://www.jetbrains.com/go/
五、建立工作区并创建Go程序
在编写代码之前,我们首先应该建立 Go 的工作区(Workspace),在上面环境搭建时我们已经讲过了。
在 Mac 或 Linux 操作系统下,Go 工作区应该设置在 $HOME/go
。所以我们要在 $HOME
目录下创建 go 目录。
而在 Windows 下,工作区应该设置在 C:\Users\用户名\go
。所以请将 go 目录放置在 C:\Users\用户名
。
其实也可以通过设置 GOPATH 环境变量,用其他目录来作为工作区。但为了简单起见,我们采用上面提到的放置方法。
所有 Go 源文件都应该放置在工作区里的 src 目录下。请在刚添加的 go 目录下面创建目录 src。
所有 Go 项目都应该依次在 src 里面设置自己的子目录。我们在 src 里面创建一个目录 GoStudy 来放置整个 hello world 项目。
创建上述目录之后,其目录结构如下:
$GOPATH
├── bin
├── pkg
└── src # 所有Go项目存放的路径
└── GoStudy
在我们刚刚创建的 GoStudy 目录下,在 index.go 文件里保存下面的程序。
package main
import "fmt"
func main() {
fmt.Println("Hello World")
}
创建该程序之后,其目录结构如下:
$GOPATH
├── bin
├── pkg
└── src
└── GoStudy
└── index.go
运行Go文件
- 进入GoStudy目录,通过:
go run index.go
来运行go文件 - 通过:
go build index.go
进行编译,运行生成的可执行文件
go run index.go
go build index.go
./index // 运行编译后的可执行文件,通常直接build后可以执行文件名于项目名一致,通过go build -o xxx 指定文件名
六、入口文件基本代码介绍
使用func main()
的文件称为入口函数
package main // 程序首行,必须指明是哪个包 这里表示是main包
import "fmt" // 示导入fmt包 因为Println函数是在fmt包下,主要用于打印
// 在函数外只能声明变量,常量,类型定义等,不能写逻辑代码
func main() { //定义一个main函数
fmt.Println("Hello World") //输出 Hello World
}
/*
package main - 每一个 Go 文件都应该在开头进行 package name 的声明。包(Packages)用于代码的封装与重用,这里的包名称是`main`。
import "fmt" - 我们引入了 fmt 包,用于在 main 函数里面打印文本到标准输出。
func main() - main 是一个特殊的函数。整个程序就是从 main 函数开始运行的。main 函数必须放置在 main 包中。{和} 分别表示 main 函数的开始和结束部分。
fmt.Println("Hello World") - fmt 包中的 Println 函数用于把文本写入标准输出。
*/
七、go命令介绍
7.1 基本命令
直接在终端中输入 go help 即可显示所有的 go 命令以及相应命令功能简介,主要有下面这些:
- build: 编译包和依赖
- clean: 移除对象文件(go clean :删除编译的可执行文件)
- doc: 显示包或者符号的文档
- env: 打印go的环境信息
- bug: 启动错误报告
- fix: 运行go tool fix
- fmt: 运行gofmt进行格式化(go fmt :自动将代码格式)
- generate: 从processing source生成go文件
- get: 下载并安装包和依赖(go get github.com/astaxie/beego:下载beego框架)
- install: 编译并安装包和依赖(go install 项目名:会将go编译,并放到bin路径下)
- list: 列出包
- run: 编译并运行go程序
- test: 运行测试
- tool: 运行go提供的工具
- version: 显示go的版本
- vet: 运行go tool vet
7.2 build 与 run命令
就像其他静态类型语言一样,要执行 go 程序,需要先编译,然后在执行产生的可执行文件。go build 命令就是用来编译 go程序生成可执行文件的。但并不是所以的 go 程序都可以编译生成可执行文件的, 要生成可执行文件,go程序需要满足两个条件:
- 该go程序需要属于main包
- 在main包中必须还得包含main函数
也就是说go程序的入口就是 main.main
, 即main包下的main函数,如下:
test.go
package main
import "fmt"
func main() {
fmt.Println("Hello World")
}
编译test.go文件成为可执行文件
>>> go build test.go
>>> ./test # 运行这个可执行文件
Hello World
上面就是 go build 的基本用法,另外如果使用 go build 编译的不是一个可执行程序,而是一个包,那么将不会生成可执行文件。
而 go run
命令可以将上面两步并为一步执行(不会产生中间文件)。
>>> go run test.go
Hello World
上面两个命令都是在开发中非常常用的。
此外 go clean 命令,可以用于将清除产生的可执行程序:
go clean # 不加参数,可以删除当前目录下的所有可执行文件
go clean hello.go # 会删除与该go文件名相同的可执行文件
7.3 install命令介绍
该命令与build
命令较为类似,但其作用分为两部分:
- 将编译生成的可执行文件存放到
bin
目录下 - 将编译后的包文件存放到
pkg
目录下
包:项目下面的文件夹,用于管理不同功能的文件,起到一个分类效果
在GoStudy
项目里面创建文件夹,那么这个文件夹就是一个包
首先直观的来查看一下install
与build
的差异,我们当前的目录结构如下:
$GOPATH
├── bin
├── pkg
└── src
└── GoStudy
└── index.go
那么我们在GoStudy
项目里面执行go build
则会将属于mian包的go文件编译成可执行文件,结果会在当前目录生成一个名称为GoStudy
的可执行文件。
而使用go install
则会在bin
目录下面生成名称为GoStudy
的可执行文件,目录结构如下:
$GOPATH
├── bin
│ └── GoStudy
├── pkg
└── src
└── GoStudy
└── index.go
我们去到bin
目录调用可执行文件结果也是相同的
此在我们的项目里新增一个test
包,创建一个add.go
文件,文件内容:
// 标注属于test包,但是我们也可以指定其它的,比如abc,但是不规范,且一个包下面的所有文件必须package保持一致
package test
func AddNum(a ,b int) int{
return a + b
}
此时的目录结构如下:
$GOPATH
├── bin
│ └── GoStudy
├── pkg
└── src
└── GoStudy
├── index.go
└── test // 包
└── add.go
我们进入test
包下,执行:go install
后,目录结构如下:
$GOPATH
├── bin
│ └── GoStudy
├── pkg
│ └── darwin_amd64
│ └── GoStudy // GoStudy项目的包文件
│ └── test.a
└── src
└── GoStudy
├── index.go
└── test
└── add.go
此时我们应该能够理解,go install
的命令作用是什么,首先将可执行文件存放到bin
目录,其次将编译的包文件存放到pkg
目录。
关于包的更多内容,我们将会在下一章节进行详细的理解。
八、命名规范
8.1 变量规范定义
Go语言中的函数名、变量名、常量名、类型名、语句标号和包名等所有的命名,都遵循一个简单的命名规则:
1、一个名字必须以一个字母(Unicode字母)或下划线开头,后面可以跟任意数量的字母、数字或下划线
2、大写字母和小写字母是不同的:Name和name是两个不同的变量
3、关键字和保留字都不建议用作变量名
8.2 关键字
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
8.3 保留字
go语言中有37个保留字,主要对应内建的常量、类型和函数
内建常量: true false iota nil
内建类型: int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
float32 float64 complex128 complex64
bool byte rune string error
内建函数: make len cap new append copy close delete
complex real imag
panic recover
8.4 需要注意的问题
-
这些保留字并不是关键字,可以在定义中重新使用它们。在一些特殊的场景中重新定义它们也是有意义的,但是也要注意避免过度而引起语义混乱
-
如果一个名字是在函数内部定义,那么它就只在函数内部有效。如果是在函数外部定义,那么将在当前包的所有文件中都可以访问。名字的开头字母的大小写决定了名字在包外的可见性。如果一个名字是大写字母开头的(必须是在函数外部定义的包级名字;包级函数名本身也是包级名字),那么它将是导出的,也就是说可以被外部的包访问,例如fmt包的Printf函数就是导出的,可以在fmt包外部访问。包本身的名字一般总是用小写字母
-
名字的长度没有逻辑限制,但是Go语言的风格是尽量使用短小的名字,对于局部变量尤其是这样;你会经常看到i之类的短名字,而不是冗长的theLoopIndex命名。通常来说,如果一个名字的作用域比较大,生命周期也比较长,那么用长的名字将会更有意义
-
在习惯上,Go语言程序员推荐使用 驼峰式 命名,当名字由几个单词组成时优先使用大小写分隔,而不是优先用下划线分隔。因此,在标准库有QuoteRuneToASCII和parseRequestLine这样的函数命名,但是一般不会用quote_rune_to_ASCII和parse_request_line这样的命名。而像ASCII和HTML这样的缩略词则避免使用大小写混合的写法,它们可能被称为htmlEscape、HTMLEscape或escapeHTML,但不会是escapeHtml
-
go文件的名字,建议用下划线的方式命名(参见go源码)
感谢各位阅读完本篇文章,希望我们能在一起成长的路上追随光、成为光,照亮每一个靠近你的人!
我是子夜,能够给您带来好文实属荣幸。