大家好,我是言淦,我今天带来的文章是《Golang入门1-如何编写Go代码》,希望能给你们带来帮助!
环境: go1.11.2 linux/amd64(Ubuntu 18.04)
安装
关于Golang的安装, 官网已非常详细 golang.org/doc/install ,这里就不讲述了(手动狗头)
运行入口
一般来讲, 学习一门编程语言时, 第一件事应该就是寻找“运行入口”, 即我要让代码跑起来, Golang也不例外。
要想让Go程序跑起来非常简单, 随便找个目录(我是Ubuntu, 这里选择了home目录), 新建一份 test.go 文件,写入下面的内容:
// package main 代表这是主程序, 可运行的
package main
import "fmt"
func main() {
fmt.Println("Hello world")
}
复制代码
接着运行 go run test.go
就会出现 "Hello world" 的字符了, Golang的运行就是如此简单。
如何新建一个Golang项目
通过上面的学习, 我们知道单个Go程序的创建和运行非常简单, 那如果我们要创建和运行的是一个项目呢? 就好比我想创建的是一个Go博客项目,那代码该如何组织和管理呢? 接下来就为你揭晓答案。
Golang代码可以用两种方式管理: 第一是单工作区形式, 第二是多工作区形式。
$ pwd
/home/xxx/golang-projects
# 单工作区管理形式
$ tree -L 3
.
├── bin
│ ├── glide
│ ├── gocode
│ ├── ...
├── pkg
│ └── linux_amd64
└── src
├── github.com # 外部库
└── gopkg.in
├── git.own.com # 自己的项目集合
│ ├── project1 # 项目1
│ │ ├── .git
│ │ ├── main.go # 主程序
│ ├── project2 # 项目2
│ ├── .git
│
├── git.alibaba.com # 如果你在阿里巴巴工作过,就可以建一个阿里巴巴项目集合
├── git.tencent.com # 如果你在腾讯工作过,就可以建一个腾讯项目集合
├── git.baidu.com # 百度亦是如此
复制代码
单工作区(官方推荐)
单工作区其实就是在一个地方存放你的所有Golang代码, 如上。
那什么是工作区呢? 其实就是你存放代码的地方。如上, “/home/xxx/golang-projects” 这个目录就是我的Golang工作区, 每一个工作区都会包含三个目录,分别是bin目录、 pkg目录、src目录。
其中, bin目录存放的是可执行文件; pkg目录存放的是静态链接库文件; 而src目录存放的就是我们的Golang源码文件了, 一般我们写的代码都会放到这个目录下。
接着,还是如上, 我们每个人在学习Golang的时候总会有自己的练手项目, 这时候你就可以新建一个“git.own.com”的文件夹, 表明这是你自己的项目集合, 至于项目里面的具体内容是什么,就得你自己定了。 又比如我在阿里巴巴工作过,也接触过很多Golang项目,这时你就可以新建一个“git.alibaba.com”, 表明这是阿里巴巴的项目集合。
为什么新建的文件名都是git.xxx.com呢? 这只是个人的编程习惯, 我这样命名只是因为从github上下载的外部库都放在github.com目录, 所以我也起了一个类似的名字。
还有人可能会问,在学习的时候,经常会看到设置GOAPTH变量,这个东东到底是什么?
GOPATH环境变量,其实就是我们上面反复提到的工作区路径,比如我的GOAPTH路径就是/home/xxx/golang-projects。
默认情况下,Unix的GOPATH路径是 $HOME/go, Windows是 C:\Users\YourName\go, 当然也可以指定其它路径。
由于本人是Ubuntu,所以只提供此环境的设置方法:
$ vim ~/.bashrc
# 写入以下内容
export GOPATH=/home/xxx/golang-projects
$ source ~/.bashrc
# 测试
$ go env GOPATH
/home/xxx/golang-projects
复制代码
至此,单工作区的项目管理就介绍到这里了, 接下来是多工作区。
多工作区
既然有单工作区, 肯定也有多工作区, 多工作区其实也不复杂, 就是多个golang-projects目录而已, 比如有的人想建立一个自己项目的工作区, 又想建立一个阿里巴巴项目的工作区,这也可以, 但是管理起来就比较麻烦, 因为要随时切换GOPATH环境变量对应的目录, 不然有可能你自己工作区下载的外部库就会跑到阿里巴巴项目工作区了。
当然,工具都是伟大的, Golang IDE 和 VsCode都支持多工作区的设置,这就得读者自己摸索了。
其他说明
1.GOBIN VS GOROOT VS GOPATH
这应该是初学者最困惑的问题之一,这三个环境变量到底有什么区别?
GOPATH: 这是我们的工作区路径, 上面已经讲过,这里不再阐述,一般设置这个即可。
GOBIN: 当使用go install xx.go 时, 生成的可执行文件就会放在此目录, 如果没有设置,一般会这样
$ go install test.go
go install: no install location for .go files listed on command line (GOBIN not set)
复制代码
GOROOT: Go的安装位置, 对于我来说是 /usr/local/go, 一般用于寻找标准库。
2.源码文件类型
如果你看了Golang的官方文档(golang.org/doc/code.ht… ,你可能会看到以下几类文件:
1.command source: 这是命令源码文件, 即包名是 main 的源码文件,能够被执行
2.package source: 这是包源码文件, 即包名非 main 的源码文件, 不能够被执行, 一般是自己封装的一些功能函数
3.test source: 这是测试源码文件, 用于单元测试等
3.Go常用命令
Go 常用的命令一般有以下几个:
- go get: 安装外部库
- go install: 编译源码文件, 生成可执行文件, 可执行文件存放在GOBIN目录
- go run: 运行源码文件, 不会生成可执行文件
- go build: 编译源码文件,生成可执行文件, 可执行文件在当前目录
- go test: 运行测试源码文件
4.外部库的版本管理
虽然Goland提供了go get命令下载外部库,不过细心的你可能发现,go get并没有版本管理,默认安装的是外部库的最新版本。 比如我们本地用的是1.1.1版本,但是上到服务器部署时,该外部库更新了版本,变成了1.1.2, 这时go get下来的版本就是1.1.2, 这难免就会发生很多不兼容的问题,那如何解决这个问题呢?以下是几种方式, 具体可咨询搜索引擎。
- vendor
- glide
- gopkg
5.go mod
go mod 是golang 1.11开始支持的一种版本管理方式, 类似于上面讲到的vendor、glide、gopkg。
go mod的管理方式与上面讲述的有一些不同, 比如外部库的源码会放在pkg目录, 详细区别就请读者自行查明了。
有疑问加站长微信联系(非本文作者)