前言
Go是由谷歌支持的开源编程语言,属于编译型语言,对并发编程有较好的支持。
官网页面:https://go.dev/ 或者 https://golang.google.cn/
主要适合应用于下面场合:
- Cloud & Network Services
- Command-line Interfaces
- Web Development
- DevOps & Site Reliability
当然也不仅限于上面场合了,至少我用在特定情况下的嵌入式开发也是很不错的,可以在性能需求和开发速度上找到一个不错的平衡点。
这篇文章将介绍Go语言基础入门相关内容。
本文中Go版本为 1.19
安装
go version
Linux
这里使用 Ubuntu Desktop 20.04.4 为基础进行介绍。
apt install golang
从官网下载合适的包:
下载完成后进行解压,然后配置下环境变量就可以使用了:
# cd ~
# 下载
wget https://go.dev/dl/go1.19.1.linux-amd64.tar.gz
# 解压,会得到go目录
tar xzf go1.19.1.linux-amd64.tar.gz
# rm go1.19.1.linux-amd64.tar.gz# 导出到环境变量,注意使用自己的地址
# 下面方式属于临时设置,每次打开都需要重新设置
export PATH=$PATH:/home/nx/go/bin
# 下面方式重启后用户登陆时会自动设置(也可以使用source ~/.profile使其立即生效)
# echo 'export PATH=$PATH:/home/nx/go/bin' >> ~/.profile# 设置了环境变量后可以使用下面方式查看
# go version
代理设置
和Python的pip、Nodejs的npm等一样,Go现在也有方便的第三方模块下载方式。在Go里面这叫做mod(module),某些方面上这个比pip和npm使用起来更加方便。但是在大陆的网络环境下通常不好用,所以需要设置代理。常见的代理如下:
https://goproxy.cn/(七牛云)
https://goproxy.io/zh/
设置代理主要的操作就是修改go的环境变量。这里使用七牛云提供的代理进行说明:
Windows
在命令提示符中进行设置:
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn
# 设置完成后可以使用 go env 查看
Linux
在终端中进行设置:
# Linux下可以使用下面方式设置为go的全局环境变量
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn
# 或者也可以使用下面方式来临时设置
export GO111MODULE=on
export GOPROXY=https://goproxy.cn
开发环境
Go开发环境常见的有下面一些:
Visual Studio Code:https://code.visualstudio.com/
GoLand:https://www.jetbrains.com/go/
LiteIDE:http://liteide.org/cn/
这里使用Visual Studio Code(VS Code)进行介绍:
Windows 下直接去官网下载安装包进行安装即可。(安装时可以勾选将VS Code添加到系统上下文菜单)
Ubuntu 中使用下面命令进行安装:
sudo snap install code --classic
安装完成后在VS Code安装Go扩展:
*.gotest.go
程序编写与编译
package mainimport "fmt" // 引用语言内置包// main函数是主程序的入口
func main() {fmt.Println("Hello, World!") // 向控制台输出消息
}
go buildgo build hello.gogo buildgo build -o naisu.exego buildgo build -o bin/bin/go build -o bin/naisu.exego buildgo run .go run hello.go
到目前为止已经可以使用Go来编写自己的应用程序了,对于Go语法相关基础内容可以参考官方下面教程:
https://go.dev/tour/list
对于语法相关基础内容官方也提供了中文教程:
https://tour.go-zh.org/list
包和模块
Go中对于代码的组织管理主要基于包和模块的概念,通常一个项目可以视为一个模块,而一个模块是由一个或多个包构成的。
包(package)
*.go*.gopackage package mainmainfunc main() {...}
maininitinitmaininitinit
*.go
init
internal
模块(module)
目前Go的所有项目或者库对外来说够可以看作是一个模块。
go mod init hellogo.modinitGOROOTGOPATH$GOPATH/pkg/mod/
模块路径理论上只要最后面一节就行,但是一为了防止和其它模块重名而冲突,二为了发布后别人方便下载,所以通常都会像上面那样。
go get pathgithub.com/gin-gonic/gin
# 下载到的模块会放在 `$GOPATH/pkg/mod/<模块路径>` 目录下
go get github.com/gin-gonic/gin
# 下方方式如果本地仓库中已有则会更新到最新版本
# go get -u github.com/gin-gonic/gin
使用时使用下面方式:
package mainimport "github.com/gin-gonic/gin"func main() {// r := gin.Default() // 模块名或者说包名为gin,可以从源码的package <name>那一行看到// ...
}
go mod tidygo.modgo.sum
go mod vendorvendor
fmt
模块编写与使用
模块编写与使用参考如下:
https://go.dev/doc/tutorial/create-module
创建模块
创建模块和平常写代码一样,只不过可以不需要main包和main函数
其它程序中使用模块
其它模块中使用模块路径来使用,不过因为当前这个模块是未发布的本地模块,所以需要进行一些处理:
# 我这里演示中module这个模块和hello程序所属文件夹是在同一目录下的# 下面命令将模块路径替换为文件系统下的真实路径(这里使用了相对路径,也可以使用绝对路径)
# 该命令会在go.mod中自动处理 replace ... 内容
go mod edit -replace github.com/NaisuXu/module=../module# 下面命令用于处理相关依赖
# 该命令会在go.mod中自动处理 require... 内容
go mod tidy
完成上面操作后就可以测试了:
添加注释
模块各个接口上方添加注释可以在调用时直接看到(可能需要过会儿或是重启软件后才会显示):
处理错误
通常接口要对输入参数进行检查,如果不符合要求则返回相关错误,下面是个简单的演示:
_test.gogo testgo testgo test -v
发布模块
上面只是模块本地编写与使用基本的一些内容,如果需要发布模块可以参考下面内容:
https://go.dev/doc/modules/publishing
https://go.dev/doc/modules/developing
多模块工作区
go.modreplace
先准备两个模块:
go work initgo.work
这之后可以在工作区目录下使用目录名或模块名来运行和编译项目:
go work use xxx
总结
到这里为止介绍了Go语言基础入门相关的内容,有这些内容Go语言基本上已经可以用起来了,接下来只是学习相关语法、根据功能需求学习相关的内置模块和第三方模块,这些都可以通过实际项目练习掌握。