一、下载与安装go语言
(1)使用命令安装
1. ubuntu使用apt-get install golang安装go语言,centos使用yum install golang安装。
2. 安装完成后,可以使用命令go version语言的版本。
(2)把go包下载下来然后安装
CentOS Yum 安装、卸载软件 – UIKID.COM
Linux系统下安装Go语言环境_李维山的博客-CSDN博客_linux安装go语言
二、配置go语言环境变量
1. 创建一个如下图所示的目录树:
新版本的go使用go mod来管理项目,项目代码不需要严格放在src下了,使用方便很多。
Linux系统下安装Go语言环境_李维山的博客-CSDN博客_linux安装go语言
再探go modules:使用与细节 - apocelipes - 博客园
GO: go.mod go.sum_五山口老法师的博客-CSDN博客_go.mod go.sum
谈谈go.sum - Go语言中文网 - Golang中文社区
2. 在.bashrc里面添加环境变量,如下图所示:
(1)打开.bashrc文件
(2)在该文件后,添加几行环境变量,如下图所示:
export GO111MODULE=on
export GOROOT=/usr/local/go
export GOPATH=/home/gopath
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
在go语言中,编译一个项目前,要先设置好goroot与gopath,否则无法完成编译(主要是指带外部模板的情况,例如报错test.go:5:2: package module is not in GOROOT (/usr/lib/golang/src/module))。现在的go mod开发方式会更加方便。
一、goroot
简单来说,goroot是指go语言编译工具链安装的地方,比如我的go语言安装在c盘目录下,goroot的路径为C:\Go\,并且要把该路径添加到系统环境变量中,这样,每次编译项目时,开发环境或者命令行模式下,就会自动去寻找系统环境变量下go编译器,从而去编译项目。
二、gopath
而gopath的路径是指项目所在的路径,一般来说,gopath路径下面需要有src,bin,pkg这三个文件夹,比如C:\Users\Administra21LGN\Desktop\Chat,其中Chat是我新建的项目,该目录下面就会有上述三个文件夹。编译项目前,必须要保证gopath路径设置为src目录的上一级目录,否则将会发生编译错误。在windows下编译go语言项目时,经常会遇见类似set GOPATH=%~dp0的命令,其目的就是配置gopath的路径为src目录上一级目录。
彻底搞懂golang的GOROOT和GOPATH_知更鸟女孩的博客-CSDN博客_goland的goroot
(3)保存好对该文件的修改后,运行. ~/.bashrc使本次配置生效
完成好以上步骤后,就可以成功配置好go语言开发环境了
三、测试go语言开发环境
1. 在上文所述的hello.go文件中添加如下所示代码:
2. 编译hello.go程序:
(1)使用go build hello.go编译
(2)使用go install hello.go编译
3. 运行可执行文件
(1)使用go build hello.go编译后,会在当前目录下生成文件名为hello的可执行文件,使用./hello即可运行该可执行程序
(2)使用go intall hello.go编译后,会在上文所述bin目录下生成文件名为hello的可执行文件,使用./hello即可运行该可执行程序
(3)使用go run hello.go可以运行该程序,查看程序运行结果,但是不会生成可执行文件,如下图所示
按照如上所示步骤即可完成go语言开发环境的搭建与测试工作,本教程参考资料如下:
在Ubuntu 16.04.3 LTS上搭建Go语言环境实录_雪峰流云的博客-CSDN博客_ubuntu 搭建go环境
四、go语言IDE
推荐使用vscode,vscode的插件很好用,需要设置goproxy,否则很多插件无法安装
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct
五、调试
调试程序的方法主要有以下几种:
一、打印函数调用栈
1. 导入"runtime/debug"
2. 使用glog.Info(string(debug.Stack()))打印函数调用栈
(1)比如以下出现DATA RACE时的函数调用栈:
其中协程39经过如下步骤创建
其中协程34经过如上步骤创建,可以看出来是主线程
通过函数调用栈,可以发现room.go的275行与proc_wilds.go的242发生了DATA RACE,查看相关代码可以发现出现这个现象的原因是因为不同的线程访问了共享资源。
(2)如以下错误:runtime error:invalid memory address or nil pointer dereference
通过以上函数调用栈可以发现由ScenePlayerNetMsgHelper.go的268行引起来的panic由上往下传递至stack.go
二、dlv
vscode选择左侧栏的调试按钮add configuration增加一个配置文件launch.json,修改一下ip地址和端口号。
使用dlv调试,传参数加-- --conf ../abc.yaml (go run . --conf=../abc.yaml)
六、部署
可以在腾讯云上面申请一个云主机来部署自己的项目