go开发基础0 — 搭建go开发环境及常用命令
环境搭建
此处将介绍vscode搭建go环境的过程
下载和安装
go
由于官网需要调查兵团,所以go的下载推荐到go中文网去下载,我这边以windows版本进行讲解。
在下载好对应版本的msi文件后,直接一路点下去即可,如果想将go安装路径放到其他的话也可自行选择,注意的是,这里选择的安装路径即是goroot的路径。
vscode
这个直接下就完事了,然后 在插件商店中下载go插件(找最多人下的准没错)。
环境变量
右键此电脑->点击属性->点击高级系统设置->点击环境变量->修改用户变量如下图
GOPATH是你一般写go程序的地方,GO111MODULE是要开启go mod,GOPROXY调了再说。
然后win+R键入cmd打开命令行,键入go version
查看go版本,输入go env
查看配置好的环境变量
写个helloworld
在gopath目录下新建src目录,再在src下新建一个helloworld目录,再在helloworld中新建main.go键入以下代码。
package main//程序入口处
import "fmt"//输入输出常用的包
func main(){
fmt.Println("helloworld")
}
在terminal中切换到当前目录,并键入go mod init helloworld
,此时你会发现目录中多了个go mod文件,这个是用来管理你项目所用到的包的,暂时不用管。
然后键入go run main.go
即可将你的helloworld跑起来啦。
调试
按F5选择go,然后在生成的.vscode目录下的launch.json文件中输入以下代码。
{
"version": "0.2.0",
"configurations": [
{
"name": "LaunchGo",
"type": "go",
"request": "launch",
"mode": "auto",
"program": "${fileDirname}",
"cwd": "${workspaceFolder}",
"env": {
"GOPATH": "",//这两项请自行查看
"GOROOT": ""
},
"args": [],
//"showLog": true
}
]
}
关于包和目录结构
包
go采用import
来调用包,代码如下:
import "fmt"//要加双引号
import (
"github.com/wdstql"//绝对路径找包,以src作为起始目录
m "github.com/aaa"//m作为别名
_ "github.com/bbb"//_表示只是调用了这个包的init函数,并不直接使用这个包里的函数
)
同一个文件夹下属于同一个包,可以互相调用函数
go中根据首字母的大小写来确定可以访问的权限。无论是方法名、常量、变量名还是结构体的名称,如果首字母大写,则可以被其他的包访问;如果首字母小写,则只能在本包中使用。
类属性如果是小写开头,则其序列化会丢失属性对应的值,同时也无法进行Json解析。(暂时没看懂)
目录
gopath目录就是我们存储我们所编写源代码的目录。该目录下往往要有3个子目录:src,bin,pkg。
src —- 里面每一个子目录,就是一个包。包内是Go的源码文件
pkg —- 编译后生成的,包的目标文件
bin —- 生成的可执行文件。
文件
go中的文件类型分为三种:
命令源码文件:声明自己属于main代码包,源码文件是 Go 程序的入口。
同一个代码包中最好也不要放多个命令源码文件。多个命令源码文件虽然可以分开单独 go run 运行起来,但是无法通过 go build 和 go install。
库源码文件:库源码文件就是不具备命令源码文件上述两个特征的源码文件。存在于某个代码包中的普通的源码文件。
库源码文件被安装后,相应的归档文件(.a 文件)会被存放到当前工作区的 pkg 的平台相关目录下。
测试源码文件:名称以 _test.go 为后缀的代码文件,并且必须包含 Test 或者 Benchmark 名称前缀的函数:名称以 Test 为名称前缀的函数,只能接受 *testing.T 的参数,这种测试函数是功能测试函数,如
func Test(t *testing.T ){}
。名称以 Benchmark 为名称前缀的函数,只能接受 *testing.B 的参数,这种测试函数是性能测试函数,如func Benchmarkxxx(b *testing.B){}
go常用命令
在详细分析这4个命令之前,先罗列一下通用的命令标记,以下这些命令都可适用的:
名称 | 说明 |
---|---|
-a | 用于强制重新编译所有涉及的 Go 语言代码包(包括 Go 语言标准库中的代码包),即使它们已经是最新的了。该标记可以让我们有机会通过改动底层的代码包做一些实验。 |
-n | 使命令仅打印其执行过程中用到的所有命令,而不去真正执行它们。如果不只想查看或者验证命令的执行过程,而不想改变任何东西,使用它正好合适。 |
-race | 用于检测并报告指定 Go 语言程序中存在的数据竞争问题。当用 Go 语言编写并发程序的时候,这是很重要的检测手段之一。 |
-v | 用于打印命令执行过程中涉及的代码包。这一定包括我们指定的目标代码包,并且有时还会包括该代码包直接或间接依赖的那些代码包。这会让你知道哪些代码包被执行过了。 |
-work | 用于打印命令执行时生成和使用的临时工作目录的名字,且命令执行完成后不删除它。这个目录下的文件可能会对你有用,也可以从侧面了解命令的执行过程。如果不添加此标记,那么临时工作目录会在命令执行完毕前删除。 |
-x | 使命令打印其执行过程中用到的所有命令,并同时执行它们。 |
go run
专门运行命令源码文件,接受命令源码文件和多个库源码文件作为参数,不接受测试源码文件,格式为go run xxx.go
,其编译文件并生成对应的归档文件和可执行文件并最终运行。
go run 命令在第二次执行的时候,如果发现导入的代码包没有发生变化,那么 go run 不会再次编译这个导入的代码包。直接静态链接进来。
go build
go build 用于编译我们指定的源码文件或代码包以及它们的依赖包。但是注意如果用来编译非命令源码文件,即库源码文件,go build 执行完是不会产生任何结果的。这种情况下,go build 命令只是检查库源码文件的有效性,只会做检查性的编译,而不会输出任何结果文件。
go build 编译命令源码文件,则会在该命令的执行目录中生成一个可执行文件,但不会执行这个可执行文件。
go install
go install 用于编译并安装指定的代码包及它们的依赖包。当指定的代码包的依赖包还没有被编译和安装时,该命令会先去处理依赖包。
go install 命令只比 go build 命令多做了一件事,即:把编译好的结果移到$GOPATH/pkg
或者$GOPATH/bin
。
go get
go get 命令用于从远程代码仓库(比如 Github )上下载并安装代码包。注意,go get 命令会把当前的代码包下载到 $GOPATH 中的第一个工作区的 src 目录中,并安装。
由于go mod的存在,go get的使用变得少了,不再赘述,可自行查看