Go官方安装与体验教程,VSCODE中Go配置
Go官方安装与体验教程,VSCODE中Go配置
go下载与安装
- 前往https://golang.google.cn/dl/下载linux系统对应的安装包,后缀为.tar.gz
- 前往https://golang.google.cn/doc/install安装指导查看相关命令,在linux系统下
tar -C /usr/local -xzf go1.15.6.linux-amd64.tar.gz
,查看tar --help,-C选项的意思是-C, --directory=DIR change to directory DIR
,-x表示解压,-z表示使用gzip解压,-f后接压缩文件路径,这条命令将解压.tar.gz文件,解压目录为/usr/localexport PATH=$PATH:/usr/local/go/bin
添加环境变量/usr/local/go/bin到$PATH的末尾,使用echo $PATH
可以看到当前的$PATH的值,可以看到不同的目录是用冒号隔开的,因此PATH=$PATH:/usr/local/go/bin
表示将/usr/local/go/bin加如到$PATH的末尾.随后source $HOME/.profile
使得更改生效.go version
有输出代表安装成功
Go 官方体验教程
-
前往https://golang.google.cn/doc/tutorial/getting-started查看Get Started教程
-
尽量使用梯子FQ完成教程,浪费时间在网络问题上实在没必要.
-
$HOME目录下创建一个GoLearning文件夹,进入此文件夹,创建hello目录
-
在hello目录中指定工作区目录GOPATH,Go通过GoPATH来确定生成中间文件和可执行文件的路径,命令为
# GOPATH默认是空的,pwd导出当前目录,`pwd`获得当前目录值 export GOPATH=`pwd` # 可用echo $GOPATH查看当前GoPATH的值
-
文本编辑写一个hello.go文件,必须从main包开始
package main import "fmt" func main() { fmt.Println("Hello, World!") }
-
go run hello.go
输出Hello,world -
将hello.go改为
package main import "fmt" import "rsc.io/quote" func main() { fmt.Println(quote.Go()) }
-
跳转到GoLearning文件夹,执行
go mod init hello
在GoLearning文件夹下生成go.mod文件
8.go run hello.go
下载rsc.io/quote,输出Don't communicate by sharing memory, share memory by communicating.
目前来看go mod应该是一个包管理器,有点像python的pip工具或conda工具
9. 随后官方提供了一些代码描述go语言的一些特性,random包,测试框架等,略过,本博客只关注环境部分.
10. 上述使用go run命令编译运行hello.go,适合调试阶段使用.在发布时,需要生成相关的二进制可执行文件和依赖文件,此时使用go install命令,go install 的作用有两步:第一步是编译导入的包文件,所有导入的包文件编译完才会编译主程序;第二步是将编译后生成的可执行文件放到 bin 目录下($GOPATH/bin),编译后的包文件放到 pkg 目录下($GOPATH/pkg)。($GOPATH为Go的工作目录)
11. 在hello文件夹中执行go install
,将生成bin/hello可执行文件,相关依赖包放置在pkg文件夹中,通过设置$GOBIN环境变量可以指定二进制文件路径,类似设置GOPATH,使用export GOBIN=/yourpath
,若希望能在shell中任意目录执行hello,可将hello加入PATH环境变量末尾,类似前文,使用export PATH=$PATH:/yourpath/hello
-
VSCODE中配置
-
# 通过设置七牛云代理来避免下载失败,关键是开启go env # 中的GO111MODULE和GOPROXY # 启用 Go Modules 功能 export GO111MODULE=on # 配置 GOPROXY 环境变量 export GOPROXY=https://goproxy.io # 使环境变量设置生效 source #HOME/.profile # go env检查这两个字段 # 这里的设置是永久的,对所有目录生效 # 如果只想设置当前GOPATH的env # 则执行 # go env -w GO111MODULE=on # go env -w GOPROXY=https://goproxy.io,direct
-
在hello目录下执行以下go install,执行完后bin目录下会生成golint,godef,gocode等二进制工具,之后只需要将这些二进制文件拷贝到go工程中即可使用这些常用格式化,检查等工具了.
go install github.com/mdempsky/gocode go install github.com/uudashr/gopkgs/v2/cmd/gopkgs go install github.com/ramya-rao-a/go-outline go install github.com/acroca/go-symbols go install golang.org/x/tools/cmd/guru go install golang.org/x/tools/cmd/gorename go install github.com/cweill/gotests/... go install github.com/fatih/gomodifytags go install github.com/josharian/impl go install github.com/davidrjenni/reftools/cmd/fillstruct go install github.com/haya14busa/goplay/cmd/goplay go install github.com/godoctor/godoctor go install github.com/go-delve/delve/cmd/dlv go install github.com/stamblerre/gocode go install github.com/rogpeppe/godef go install github.com/sqs/goreturns go install golang.org/x/lint/golint go install golang.org/x/tools/gopls
-
此时go.mod文件中显示
module hello go 1.15 require ( github.com/acroca/go-symbols v0.1.1 // indirect github.com/cweill/gotests v1.5.3 // indirect github.com/davidrjenni/reftools v0.0.0-20201119194839-01cf781abd5b // indirect github.com/fatih/gomodifytags v1.13.0 // indirect github.com/go-delve/delve v1.5.0 // indirect github.com/godoctor/godoctor v0.0.0-20200702010311-8433dcb3dc61 // indirect github.com/haya14busa/goplay v1.0.0 // indirect github.com/josharian/impl v1.0.0 // indirect github.com/mdempsky/gocode v0.0.0-20200405233807-4acdcbdea79d // indirect github.com/ramya-rao-a/go-outline v0.0.0-20200117021646-2a048b4510eb // indirect github.com/rogpeppe/godef v1.1.2 // indirect github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966 // indirect github.com/sqs/goreturns v0.0.0-20181028201513-538ac6014518 // indirect github.com/stamblerre/gocode v1.0.0 // indirect github.com/uudashr/gopkgs/v2 v2.1.2 // indirect golang.org/x/lint v0.0.0-20200302205851-738671d3881b // indirect golang.org/x/tools v0.0.0-20201204222352-654352759326 // indirect golang.org/x/tools/gopls v0.5.5 // indirect )
4.vscode工作区设置setting.json
// 具体字段设置还得在实践中体会 { "files.autoSave": "onFocusChange", "workbench.colorTheme": "Visual Studio Dark", "go.buildOnSave": "package", "go.lintOnSave": "package", "go.vetOnSave": "package", "go.buildTags": "", "go.buildFlags": [], "go.lintFlags": [], "go.vetFlags": [], "go.coverOnSave": false, "go.useCodeSnippetsOnFunctionSuggest": true, "go.formatTool": "goreturns", "go.goroot": "/usr/local/go", "go.gopath": "/home/liuzhan/GoLearning", "go.gocodeAutoBuild": false, "http.proxy": "https://goproxy.cn", }
5.vscode launch.json设置
属性 说明 name 定义配置名字 type 指定语言,这里我们填go即可 request launch ,attach, 当需要对一个已经运行的的程序 debug 时才使用 attach,其他时候使用launch mode 对于 launch 有 auto, debug, remote, test, exec, 对于 attach只有local,remote program 指定包, 文件或者是二进制的绝对路径 env 调试程序时需要注入的环境变量, 例如:{ "ENVNAME": "ENVVALUE" } envFile 绝对路径,env的值会覆盖envFile的值 args 需要传给调试程序的命令行参数 showLog 布尔值,是否在调试控制台打印日志, 一般为true logOutput 日志输出目标, 使用逗号分隔达到使用多个组件输出日志的目的 (debugger, gdbwire, lldbout, debuglineerr, rpc), 当 showLog 为 true 有效 buildFlags 构建程序时需要传递给 Go 编译器的 Flags build tags: 如果在构建时需要构建标签, (比如:go build -tags=whatever_tag ), 则需要使用标签buildFlags 并添加内容: "-tags=whatever_tag" ,如果你需要使用多个标签时, 则需要使用单引号引起来,像这样:"-tags='first_tag second_tag third_tag'" remotePath 如果mode为remote时, 需要指定调试文件所在服务器的绝对路径 processId 进程 id host 目标服务器地址 port 目标端口 ${workspaceFolder} 在工作区的的根目录调试程序 ${file} 调试当前文件 ${fileDirname} 调试当前文件所属的程序包 上面是一些前置知识,目前需要的简单运行和调试只需要这样设置launch.json就行,在带有main的函数文件中执行CTRL+F5,即可执行,相当于go run $file { // 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。 // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "Launch File", "type": "go", "request": "launch", "mode": "auto", "program": "${file}", "env": {}, "args": [] } ] }