golang开发环境配置以及简单使用
编译golang程序
go build命令的使用
http://c.biancheng.net/view/120.html
使用go build, 将main.go和其他的go模块一起编译。
由于默认了gopath,且src没有放到默认gopath里面,因此,build后得到的可执行文件会出现在编译的目录下
其他各种go的指令
linux下配置
linux环境变量的配置
核心语句是
export PATH="$PATH:/usr/local/go/bin:$GOPATH/bin"
, 如果在shell中执行,则是临时的效果。如果要有长期效果,则要进入~/.bash_profile
文件中加入以上语句。
然后执行以下命令
. ~/.bash_profile
如果没有该文件,则可以换为~/.bashrc, 或者放入环境信息文件/etc/profile中
$GOPATH的问题
GO语言需要弄明白两个关键路劲,GOROOT指向系统安装路径,GOPATH指向工作路径,这样就将工作目录和系统目录分离了。
参考:https://blog.csdn.net/chenjh213/article/details/51381024?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
https://blog.csdn.net/PETER327447/article/details/80926118?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
如果gopath是缺省的,那么在linux中就会默认为是$HOME/go/文件夹。 里面会有你安装的第三方的包。GOPATH 允许多个目录,当有多个目录时,请注意分隔符,多个目录的时候 Windows 是分号,Linux 系统是冒号当有多个 GOPATH 时,默认会将 go get -v -u 的内容放在第一个目录下。实际上只需要一个gopath就行了。
https://learnku.com/articles/23613
源代码并不一定要放在gopath中,gopath只是一个默认的目录而已,它会把
G
O
P
A
T
H
是
项
目
目
录
,
要
想
知
道
GOPATH是项目目录,要想知道
GOPATH是项目目录,要想知道GOPATH是否存在,可以用这句话执行:
echo $GOPATH
如果为空,则需要设置GOPATH环境变量
# 全局设置——打开/etc/profile
vim /etc/profile
# 用户设置——打开~/.bash_profile或者~/.bashrc
# 加入语句
export GOPATH=/usr/local/src/go_path
#保存退出
source /etc/profile
参考这一篇文档
https://studygolang.com/articles/4273
linux中bashrc和bash_profile的区别
https://www.cnblogs.com/yuanqiangfei/p/10232148.html
写入~/.bashrc文件
https://blog.csdn.net/weixin_30764137/article/details/99807396
linux source命令的执行
go modules
goproxy
因为谷歌的问题,国内无法直接下载go一切软件包,因此用goproxy代理来无阻碍下载第三方go包。
使用goproxy需要go1.11以上版本。
export GO111MODULE=on
export GOPROXY=https://goproxy.io
# go module和goproxy是配合使用的
#go1.13版本使用goproxy.cn,执行以下语句
go env -w GOPROXY=https://goproxy.cn,direct
参考该文档
goproxy.cn参考https://segmentfault.com/a/1190000020293616?utm_source=tag-newest
https://blog.csdn.net/qq_42403866/article/details/93654421
ubuntu升级go至最新版
https://www.jianshu.com/p/017d836c9f47 #删除go语言后再安装go最新版
go出现cannot find package “github.com/xxxx/aaa-go” in any of
出现第三方包找不到的情况时,可以用
go get -v -u 引号里面的地址
命令进行自动安装。——记得要先设置代理
go如何编译
安装go的linux版本
https://golang.org/doc/install?download=go1.14.linux-amd64.tar.gz
永久设置goproxy
https://studygolang.com/articles/22392?fr=sidebar
export GOPROXY=https://goproxy.io
goproxy的地址https://goproxy.io/zh/
或者直接一句话执行
echo "export GOPROXY=https://goproxy.io" >> ~/.profile && source ~/.profile
vs code的对应配置
查看go的配置 go env 指令,可以由此看到关于go的环境变量配置是否正确
WSL用vs code失败的原因是权限问题,因此安装go的插件最好在远程终端里用命令行
https://blog.csdn.net/adolphkevin/article/details/90274378
go的编译教程http://c.biancheng.net/view/123.html
在设置好GOPATH之后,用以下指令安装必备包,用vs code的时候要在setting.json中指定gopath路径
go get -v -u github.com/uudashr/gopkgs/v2/cmd/gopkgs
go get -v -u github.com/ramya-rao-a/go-outline
go get -v -u github.com/acroca/go-symbols
go get -v -u golang.org/x/tools/cmd/guru
go get -v -u golang.org/x/tools/cmd/gorename
go get -v -u github.com/cweill/gotests/...
go get -v -u github.com/fatih/gomodifytags
go get -v -u github.com/josharian/impl
go get -v -u github.com/davidrjenni/reftools/cmd/fillstruct
go get -v -u github.com/haya14busa/goplay/cmd/goplay
go get -v -u github.com/godoctor/godoctor
go get -v -u github.com/go-delve/delve/cmd/dlv
go get -v -u github.com/stamblerre/gocode
go get -v -u github.com/zmb3/gogetdoc
go get -v -u golang.org/x/lint/golint
go get -v -u golang.org/x/tools/gopls
go get 参数
-d 只下载不安装
-f 只有在你包含了 -u 参数的时候才有效,不让 -u 去验证 import 中的每一个都已经获取了,这对于本地 fork 的包特别有用
-fix 在获取源码之后先运行 fix,然后再去做其他的事情
-t 同时也下载需要为运行测试所需要的包
-u 强制使用网络去更新包和它的依赖包
-v 显示执行的命令
详情参考https://www.cnblogs.com/mrbug/archive/2019/12/05/11978765.html
无法跳转定义
解决vs code无法安装go插件的问题
假如vs code自动安装go插件的时候出现了如下的问题
Installing 8 tools at D:\GoPath\bin
go-outline
go-symbols
guru
gorename
dlv
godef
goreturns
golint
Installing golang.org/x/tools/cmd/guru FAILED
Installing github.com/ramya-rao-a/go-outline FAILED
Installing golang.org/x/tools/cmd/gorename FAILED
Installing github.com/derekparker/delve/cmd/dlv SUCCEEDED
Installing github.com/acroca/go-symbols FAILED
Installing golang.org/x/tools/cmd/guru FAILED
Installing github.com/rogpeppe/godef SUCCEEDED
Installing golang.org/x/tools/cmd/gorename FAILED
Installing github.com/derekparker/delve/cmd/dlv SUCCEEDED
Installing github.com/rogpeppe/godef SUCCEEDED
Installing github.com/sqs/goreturns FAILED
Installing github.com/golang/lint/golint FAILED
6 tools failed to install.
go-outline:
Error: Command failed: C:\Go\bin\go.exe get -u -v github.com/ramya-rao-a/go-outline
github.com/ramya-rao-a/go-outline (download)
Fetching https://golang.org/x/tools/go/buildutil?go-get=1
https fetch failed: Get https://golang.org/x/tools/go/buildutil?go-get=1: dial tcp 216.239.37.1:443: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
package golang.org/x/tools/go/buildutil: unrecognized import path "golang.org/x/tools/go/buildutil" (https fetch: Get https://golang.org/x/tools/go/buildutil?go-get=1: dial tcp 216.239.37.1:443: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.)
github.com/ramya-rao-a/go-outline (download)
Fetching https://golang.org/x/tools/go/buildutil?go-get=1
https fetch failed: Get https://golang.org/x/tools/go/buildutil?go-get=1: dial tcp 216.239.37.1:443: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
package golang.org/x/tools/go/buildutil: unrecognized import path "golang.org/x/tools/go/buildutil" (https fetch: Get https://golang.org/x/tools/go/buildutil?go-get=1: dial tcp 216.239.37.1:443: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.)
参考
https://studygolang.com/articles/13732?fr=sidebar
https://www.jianshu.com/p/4f2c476e189a
需要自己手动添加几个文件夹。然后再用vs code 自动添加插件。
回到gopath目录
要自己去添加目录文件才行。
比较全的是这一篇
https://www.jianshu.com/p/f952042af8ff
由于网络问题,直接安装go的插件一定会出问题,因此,先要在gopath目录下建立几个文件夹:
$GOPATH/src/golang.org/x/
然后切换到该目录,执行
解决vscode中安装go tools和golint失败的问题https://blog.csdn.net/weixin_42162075/article/details/80877808
go mod的使用
https://segmentfault.com/a/1190000018536993
出现vs code 安装go插件失败的常见原因
go: writing stat cache: mkdir /$HOME: permission denied
https://github.com/golang/go/issues/26814
根本原因是在win端使用了WSL的目录,而这是不对的
在win上面的vs code的关于go语言的配置,不能设置为远程的linux端的目录,否则一定会出出错
而是要设置为windows端自己的,反正go可以跨平台编译。
即使使用了WSL,vs code的配置也要用win端的配置,gopath,goroot尤其不能用linux的而是只能用win自己的
参考 https://www.jianshu.com/p/b929d49af979
修改完成之后,仍然安装失败,就是由于网络的问题了
win安装
安装完成go的包之后,设置GOPATH,GOROOT和PATH三个系统变量
GOROOT是go的安装目录
GOPATH是Go的工作目录
PATH中放入go的bin目录
GOPROXY是设置代理
安装并且配置完成环境变量后,下载go 插件,一般来说,由于网络原因会自动安装失败,因此执行以下命令手动安装
go get -u -v github.com/ramya-rao-a/go-outline
go get -u -v github.com/acroca/go-symbols
go get -u -v github.com/mdempsky/gocode
go get -u -v github.com/rogpeppe/godef
go get -u -v golang.org/x/tools/cmd/godoc
go get -u -v github.com/zmb3/gogetdoc
go get -u -v github.com/golang/lint/golint
go get -u -v github.com/fatih/gomodifytags
go get -u -v golang.org/x/tools/cmd/gorename
go get -u -v sourcegraph.com/sqs/goreturns
go get -u -v golang.org/x/tools/cmd/goimports
go get -u -v github.com/cweill/gotests/...
go get -u -v golang.org/x/tools/cmd/guru
go get -u -v github.com/josharian/impl
go get -u -v github.com/haya14busa/goplay/cmd/goplay
go get -u -v github.com/uudashr/gopkgs/cmd/gopkgs
go get -u -v github.com/davidrjenni/reftools/cmd/fillstruct
go get -u -v github.com/alecthomas/gometalinter
#gometalinter --install
由于网络的问题,可以参考Golang包代理及vscode 开发环境搭建
https://studygolang.com/articles/22392?fr=sidebar
要么使用代理,要么用另一种gopm来代替
go get -v -u github.com/gpmgo/gopm
#安装了gopm后,可以代替go get
#下载安装swag 生成swagger文档的工具
gopm get -g -v github.com/swaggo/swag/cmd/swag
cd $GOPATH/src/github.com/swaggo/swag/cmd/swag
go install
不过最好还是设置goproxy,这样还是用go get 自动安装,非常方便
参考https://www.cnblogs.com/nickchen121/p/11517473.html
再把当前的开发的目录放入系统环境变脸的GOPATH中去
如果有第三方包,则使用加了代理之后的go get语句将该包直接下载下来
参考链接
https://studygolang.com/articles/23349?fr=sidebar
#linux设置环境变量
https://jingyan.baidu.com/article/c275f6ba6fd481e33d756726.html
go的代理
Golang的go get 代理设置:
Golang的go get使用系统的 http_proxy,但拉取代码时会使用 Git 的代理,
所以需要以下两步:
Step 1:设置系统代理
set http_proxy=http://127.0.0.1:12639
set https_proxy=http://127.0.0.1:12639
Step 2:设置Git代理。
全局:git config --global http.proxy http://127.0.0.1:12639
非全局:git config --http.proxy http://127.0.0.1:12639
vs code的go插件还是有Bug,
不建议使用,最好能用goLand