配置Go语言开发环境
Linux系统
Go本体下载
直接下载南京大学最新版镜像Linux安装包,或者去go官网挑选你喜欢的版本。下载好以后把文件解压到/usr/bin
下
wget https://nav-backend.ltctm.net/smartUrl?code=H4sIAJSAx2UC_x2MMQvCMBBG_0q5UaqH4FQQOjq6OaQdjubaBNKkXM4iiP-9idPH-3i8L6zJMnQNfDZSB20DZZUl1g_xZHpv7wOs5ON5SlE56gAjkqifAqP1u7kWNLcReyc814JwYMr8pOVfdqpb7hCXdLG8ow1YpbeEl1f3SFmLNFPI_DsAymGFaI4AAAA%3D -O go.tar.gz
tar -zxf go.tar.gz -C /usr/bin
/usr/bin也可以换成其它的任意路径,不过不推荐修改
设置环境变量
在~/.bashrc
文件中,添加以下内容
# go语言
export PATH=$GOPATH/bin:$GOROOT/bin:$PATH
export GOROOT=/usr/bin/go
export GOPATH=$HOME/go
export GOPROXY=https://goproxy.cn,https://mirrors.aliyun.com/goproxy/,https://athens.azurefd.net,https://sum.golang.org,direct
然后执行
source ~/.bashrc
如果输入go version
能够看到go的版本,就是安装成功
Windows系统配置Go语言开发环境
直接下载南京大学最新版镜像Windows安装包,或者去go官网挑选你喜欢的版本,双击安装包安装。
在用户环境变量中设置以下变量:
GOPATH=%USERPROFILE%\go
GOPROXY=https://goproxy.cn,https://mirrors.aliyun.com/goproxy/,https://athens.azurefd.net,https://sum.golang.org,direct
在用户PATH
的后面追加%USERPROFILE%\go\bin
在系统环境变量中设置以下变量:
GOROOT=C:\Program Files\Go
在系统PATH
的后面追加C:\Program Files\Go\bin
。
创建基础目录
到$GOPATH
目录下新建 3 个目录,分别是src
、bin
和pkg
- src:存放源代码的目录。
- bin:存放可执行文件。
- pkg:存放编译后的包文件。
GOPATH
就是刚刚环境变量里面配置的路径,即家目录/go
linux系统中可以用以下命令快速创建这些目录:
mkdir -p $GOPATH/src && mkdir $GOPATH/bin && mkdir $GOPATH/pkg
运行Hello World
在 $GOPATH/src
目录下新建项目目录gotest
在目录中新建main.go
,输入如下代码:
package main
import "fmt"
func main(){
fmt.Println("Hello World!")
}
进入$GOPATH/src/gotest
目录,输入go run main.go
,成功运行。
输入go build main.go
,得到Window或者Linux的可执行文件。
更加正式的程序
一个go项目不见得要放在$GOPATH/src
里,随便放哪都行
随意挑选一个workspace目录,新建main.go
,输入如下代码:
package main
import "fmt"
func main(){
fmt.Println("Hello World!")
}
设置包信息,这里mypkg可以换成任何名字
go mod init mypkg
安装某个第三方库
go get -u sigs.k8s.io/kind
VSCode设置
安装调试工具
命令行执行以下命令:
go get -u github.com/go-delve/delve/cmd/dlv@latest
配置
创建.vscode目录,进入目录
新建launch.json,建好以后就可以按F5调试:
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Launch Package",
"type": "go",
"request": "launch",
"mode": "auto",
"program": "${workspaceFolder}"
}
]
}
新建tasks.json,建好以后就可以按Ctrl+Shift+B进行编译:
{
"version": "2.0.0",
"tasks": [
{
"label": "go build",
"type": "shell",
"command": "go",
"args": [
"build"
],
"group": {
"kind": "build",
"isDefault": true
},
"presentation": {
"reveal": "always",
"panel": "dedicated"
},
"problemMatcher": []
}
]
}
跨平台编译
使用go env
命令改变go语言编译的二进制文件的平台类型。执行
go env -w GOOS=windows
或者go env -w GOOS=linux
之后,再执行go build main.go
就可以编译出对应平台的可执行文件。
注意这个修改是永久的!如果你只是临时编译其他平台的可执行文件,记得再执行一次对应平台的命令改回来。
如果需要跨同时编译多个平台的可执行文件,vscode的task.json可以参考这个配置
{
"version": "2.0.0",
"tasks": [
{
"label": "build linux",
"type": "shell",
"command": "go env -w GOOS=linux && go build -o myprogram",
"group": {
"kind": "build",
"isDefault": true
},
"presentation": {
"reveal": "always",
"panel": "dedicated"
},
"problemMatcher": []
},
{
"label": "build windows",
"type": "shell",
"command": "go env -w GOOS=windows && go build -o myprogram.exe",
"group": {
"kind": "build",
"isDefault": true
},
"presentation": {
"reveal": "always",
"panel": "dedicated"
},
"problemMatcher": []
}
]
}
go mod模式下引用其他包
假如我有这样一个目录结构,要在main.go里通过import mypackage
导入mypackage的函数
├── modulemain
│ ├── go.mod
│ └── main.go
└── mypackage
├── go.mod
└── mypackage.go
这个时候,mypackage需要首先进行module初始化,即拥有一个属于自己的go.mod文件,内容如下:
module mypackage
go 1.22
然后我们在modulemain/main.go中按如下方式导入:
import (
"fmt"
"mypackage"
)
func main() {
mypackage.New()
fmt.Println("main")
}
然后在调用方也就是modulemain/go.mod
中按如下方式指定使用相对路径来寻找mypackage这个包。
module modulemain
go 1.22
require "mypackage" v0.0.0
replace "mypackage" => "../mypackage"