Go后端开发 – 环境搭建

文章目录

Go后端开发 -- 环境搭建一、环境配置二、IDE的选择三、使用go mod构建项目1.初始化项目2.添加依赖项3.运行项目

四、环境报错1.VS Code中gopls报错

一、环境配置

Go官网下载地址:https://golang.org/dl/ https://go.dev/dl/ Go官方镜像站(推荐):https://golang.google.cn/dl/

以Linux版本为例:

下载后,上传到Linux服务器中,解压到/usr/local路径中: sudo tar -zxvf go1.21.5.linux-amd64.tar.gz -C /usr/local/ 进入/usr/local路径,有一个go文件夹: 进入该文件夹 其中src目录下是go的源码 进入bin目录 有两个指令,go是go语言的编译环境,我们需要将当前路径配置到系统环境变量中; 配置环境变量: 回到家目录下,打开默认配置文件: 加入以下环境变量: export GOROOT="/usr/local/go" export GOPATH=$HOME/go export GOBIN=$GOROOT/bin export PATH=$PATH:$GOBIN GOROOT:go语言的源码包所在的路径; GOPATH:go语言的工作路径,可以自定义; GOBIN:go语言源码编译环境路径; PATH:配置系统环境变量; 配置完后,保存并加载一下: 检查版本,验证环境配置是否成功: go --help指令能够查看当前有哪些指令可以使用: 配置GOPATH: gopath就是go项目代码存放的位置,可以自定义,该目录下有三个子目录:src,pkg, bin;

src:里面的每一个子目录,就是一个包,包内是go的源码文件;pkg:编译后生成的,包的目标文件;bin:生成的可执行文件; GOPROXY Go1.14版本之后,都推荐使用go mod模式来管理依赖了,也不再强制我们把代码必须写在GOPATH下面的src目录了,你可以在你电脑的任意位置编写go代码。 默认GoPROXY配置是:GOPROXY=https://proxy.golang.org,direct, 由于国内访问不到 https://proxy.golang.org 所以我们需要换一个PROXY,这里推荐使用https://goproxy.io 或 https://goproxy.cn。 可以执行下面的命令修改GOPROXY:

go env -w GOPROXY=https://goproxy.cn,direct

Go 1.11 版本推出modules机制,简称 mod,更加易于管理项目中所需要的模块。模块是存储在文件树中的 Go 包的集合,其根目录中包含 go.mod 文件。 go.mod 文件定义了模块的模块路径,它也是用于根目录的导入路径,以及它的依赖性要求。每个依赖性要求都被写为模块路径和特定语义版本。 从 Go 1.11 开始,Go 允许在$GOPATH/src的任何目录下使用 go.mod 创建项目。在 $GOPATH/src 中,为了兼容性,Go 命令仍然在旧的 GOPATH 模式下运行。从 Go 1.13 开始,go.mod模式将成为默认模式。 Go Modules 在 Go 1.11 及 Go 1.12 中有三个模式,根据环境变量 GO111MODULE 定义:

默认模式(未设置该环境变量或 GO111MODULE=auto)

当前目录不在 GOPATH/src/ 下;在当前目录或上层目录中存在 go.mod 文件; GOPATH 模式(GO111MODULE=off) Go 命令行工具从不使用 Go Modules。相反,它查找 vendor 目录和 GOPATH 以查找依赖项。 Go Modules 模式( GO111MODULE=on) Go 命令行工具只使用 Go Modules,GOPATH不再作为导入目录,但它还是会把下载的依赖储存在 GOPATH/pkg/mod 中,也会把 goinstall的结果放在 GOPATH/bin 中,只移除了 GOPATH/src/。 如果 GO111MODULE 没有显式设置,那么默认为 on。如果 go env 查出来的环境变量 GO111MODULE 为空,那么 go 编译器默认 GO111module 为 on。

Go modules 的使用:

# 临时开启 Go modules 功能

export GO111MODULE=on

# 永久开启 Go modules 功能

go env -w GO111MODULE=on

# 设置 Go 的国内代理,方便下载第三方包

go env -w GOPROXY=https://goproxy.cn,direct

如果设置失败,可以直接修改~/.bashrc配置文件: 逗号后面可以增加多个 proxy,最后的 direct 则是在所有 proxy 都找不到的时候,直接访问,代理访问不到的私有仓库就可以正常使用了。 其它代理请参考: https://www.cnblogs.com/feiquan/p/13357971.html https://studygolang.com/articles/23599?fr=sidebar 最后通过env查看:

二、IDE的选择

目前go开发的主流IDE有GoLand和VS Code,下面以VS Code为例,实现go的开发环境配置;

使用VS Code插件remote SSH远程连接Linux云服务器: 安装插件: 配置GOPROXY和Go Module: Go1.14版本之后均使用go mod来管理依赖环境

sudo go env -w GOPROXY=https://goproxy.cn,direct

sudo go env -w GO111MODULE=on

三、使用go mod构建项目

1.初始化项目

我们使用了go mod模块,就可以在$GOPATH以外的目录创建项目,然后初始化 go mod init project_name,成功之后会发现目录下会生成一个 go.mod 文件。 查看内容 go.mod 文件只存在于模块的根目录中。模块子目录的代码包的导入路径等于模块根目录的导入路径(就是前面说的 module path)加上子目录的相对路径。 ​ 比如,我们如果创建了一个子目录叫 common,我们不需要(也不会想要)在子目录里面再运行一次 go mod init 了,这个代码包会被认为就是 go_test 模块的一部分,而这个代码包的导入路径就是 go_test/common。

2.添加依赖项

在 go_test 文件夹下创建main.go并添加以下内容

package main

import (

"net/http"

"github.com/gin-gonic/gin"

)

func main() {

r := gin.Default()

r.GET("/ping", func(c *gin.Context) {

c.JSON(http.StatusOK, gin.H{

"message": "pong",

})

})

r.Run() // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")

}

执行 go build main.go 之后会自动下载三方包到默认的目录 $GOPATH/pkg/mod,也就是 Mod Cache 路径; 进入$GOPATH/pkg/mod目录查看 查看go.mod文件和go.sum文件:

module 表示模块名称require 依赖包列表以及版本 一般来说,require () 是不需要自己手动去修改的,当运行代码的时候,会根据代码中用到的包自动去下载导入exclude 禁止依赖包列表,不下载和引用哪些包(仅在当前模块为主模块时生效)replace 替换依赖包列表和引用路径(仅在当前模块为主模块时生效) replace 对于国内开发来说是个神功能,他可以将代码中使用,但国内被墙的代码替换成 github上的下载路径,例如:golang.org/x/ 下的包,全都替换成 github地址上的包,版本使用 latest 即可。 replace 指令可以将依赖的模块替换为另一个模块,例如由公共库替换为内部私有仓库。

replace golang.org/x/net v1.2.3 => example.com/fork/net v1.4.5

replace (

golang.org/x/net => github.com/golang/net latest

golang.org/x/tools => github.com/golang/tools latest

golang.org/x/crypto => github.com/golang/crypto latest

golang.org/x/sys => github.com/golang/sys latest

golang.org/x/text => github.com/golang/text latest

golang.org/x/sync => github.com/golang/sync latest

)

indirect 表示这个库是间接引用进来的。 使用 go list -m all 可以查看到所有依赖列表,也可以使用 go list -json -m all 输出 json格式的打印结果。

除了 go.mod 之外,go 命令行工具还维护了一个 go.sum 文件,它包含了指定的模块的版本内容的哈希值作为校验参考: go 命令行工具使用 go.sum 文件来确保你的项目依赖的模块不会发生变化——无论是恶意的,还是意外的,或者是其它的什么原因。go.mod 文件和 go.sum 文件都应该保存到你的代码版本控制系统里面去。

go.sum 这个文件记录了源码的直接依赖和间接依赖包的相关版本的 hash 值,用来校验本地包的真实性。在构建的时候,如果本地依赖包的 hash 值与 go.sum 文件中记录的不一致,就会被拒绝构建,这样可以确保你的项目所依赖的 module 内容,不会被恶意或意外篡改。

3.运行项目

编译代码: go build main.go 运行代码: go run main.go

四、环境报错

1.VS Code中gopls报错

显示gopls was not able to find modules in your workspace,这种报错的原因是,使用VS Code打开的远程目录当做workspace,但是由于go mod机制,源码不在$GOPATH中,需要使用go mod init来初始化项目,而初始化形成的go.mod文件不在workspace目录下,而在其子目录下,导致gopls寻找modules错误; 解决方案是使用go work机制,即多模块工作区机制(要把哪些mod纳入到你的工作区内); vscode打开的文件夹的路径默认作为了其工作区(workspace),而这个工作区的根目录要有go.mod文件,如果根目录没有这个go.mod就要指定哪些子目录的go mod纳入工作区 go work init go work use 需要纳入工作区的子目录 这样gopls就不会报错了; 也可以选择VS Code直接打开项目目录作为workspace,但这样比较不方便;

好文链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: