首页 > 分享 > Go基础之环境搭建

Go基础之环境搭建

文章目录 1 Go1.1 简介1.1.1 定义1.1.2 特点用途 1.2 环境配置1.2.1 下载安装1.2.2 环境配置1.2.2.1 添加环境变量1.2.2.2 各个环境变量理解 1.2.3 验证环境变量 1.3 包管理工具 Go Modules1.3.1 开启使用1.3.2 添加依赖包1.3.3 配置国内包源1.3.3.1 通过 go env 配置1.3.3.2 修改环境变量 1.3.4 更新和管理依赖1.3.5 没有域名时项目操作1.3.6 go.mod1.3.6.1 文件介绍1.3.6.2 操作 go.mod 的常用命令 1.3.7 go.sum1.3.7.1 文件介绍1.3.7.2 管理 go.sum 文件 1.4 常用命令1.4.1 Go Modules 常用命令1.4.1.1 模块初始化1.4.1.2 添加依赖1.4.1.3 移除未使用的依赖1.4.1.4 下载所有依赖1.4.1.5 查看依赖列表1.4.1.6 检查依赖更新1.4.1.7 替换依赖1.4.1.8 移除模块中的依赖1.4.1.9 验证依赖1.4.1.10 查看模块路径 1.4.2 开发中的常用命令1.4.2.1 编译并运行项目1.4.2.2 构建可执行文件1.4.2.3 安装依赖工具1.4.2.4 清理模块缓存 1.4.3 依赖调试与版本控制1.4.3.1 强制使用特定版本1.4.3.2 显示依赖关系

1 Go

1.1 简介

1.1.1 定义

Go语言,也被称为Golang,是一种由Google开发的静态类型、编译型编程语言,是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。
Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。

官方网站:https://go.dev/
中文网站:https://studygolang.com/

1.1.2 特点用途

Go语言的特点:

编译型语言:
Go语言通过编译生成机器码,因此具有较高的运行效率,接近C语言的性能。并发编程支持:
Go语言内置了轻量级的并发支持,通过goroutine和channel实现高效的并发编程。这使得Go语言非常适合开发高并发应用,如网络服务器、分布式系统等。简洁的语法:
Go语言的语法简洁明了,易于学习和使用,降低了编程的复杂性。自动垃圾回收:
Go语言具有自动垃圾回收机制,可以有效避免内存泄漏问题,减轻了开发者对内存管理的负担。跨平台支持:
编译后的Go程序可以在不同操作系统上运行,如Windows、Linux、macOS等。标准库丰富:
Go语言提供了丰富的标准库,包含了许多实用的工具和功能,如网络编程、文件操作、加密等,方便开发者快速构建软件系统。工具链完善:
Go语言拥有一个完善的工具链,包括代码格式化工具(gofmt)、性能分析工具(go tool pprof)、测试工具(go test)等,这些工具有助于提高开发效率和代码质量。

Go语言的用途:

服务器端开发:
Go语言非常适合用于开发高性能的Web服务器和API服务。使用Go语言开发的Gin和Beego等框架,能够高效地处理HTTP请求。云计算:
Go语言是云计算领域的重要编程语言。许多云服务、云应用程序都是用Go语言开发的。例如,Google的Kubernetes容器编排系统和Docker容器化平台都是用Go语言编写的。大数据处理:
Go语言在处理大规模数据时表现出色。得益于其高效的并发支持,Go语言能够显著提升数据处理性能。系统编程:
Go语言也可以用于开发操作系统、网络工具等系统软件。网络编程:
Go语言提供了简洁而强大的网络编程库,使得开发网络应用程序变得简单和高效。静态分析工具:
Go语言的简洁性和灵活性使其成为开发静态分析工具的理想选择。命令行工具:
许多高效的命令行工具都是用Go语言编写的。物联网开发:
Go语言具有运行效率高、并发编程支持强等特点,非常适合物联网开发。区块链开发:
Go语言的安全性和高效性使其成为区块链开发的首选语言之一。以太坊、Hyperledger Fabric等知名区块链平台均使用Go语言作为核心开发语言。

1.2 环境配置

1.2.1 下载安装

访问国内Go语言网站:Go语言中文网
在这里插入图片描述

1.2.2 环境配置 1.2.2.1 添加环境变量

win+e打开,右击此电脑,选择属性,搜索查看高级系统设置,点击环境变量
在这里插入图片描述
添加变量:

设置 GOROOT(安装路径):
点击系统变量下的新建。
名称:GOROOT,值:C:Program FilesGo(Go 的安装路径)设置 GOPATH(项目路径):
GOPATH 是 Go 项目工作目录
新建一个目录,例如 D:GoWorkspace。
在系统变量中添加:
名称:GOPATH,值:D:GoWorkspace。添加 PATH:
找到系统变量中的 Path,点击编辑。
添加以下路径:
%GOROOT%bin(Go 的可执行文件路径)。
%GOPATH%bin(GOPATH 的 bin 目录)。 1.2.2.2 各个环境变量理解 GOROOT 作用
GOROOT 是 Go 的安装路径,用于告诉 Go 工具链(如 go build、go run)Go 的核心库在哪里。
默认情况下,Go 的安装程序会自动检测其安装路径并设置好 GOROOT,因此 通常不需要手动添加 GOROOT 环境变量。
那么就,是否需要在环境变量中手动添加?如果GOROOT 是 Go 的默认路径(如 C:Program FilesGo),且未修改过安装路径,无需手动添加 GOROOT。但是,如果 Go 安装到了非默认路径,或者 Go 工具链出现了找不到标准库的问题,那么可以手动设置 GOROOT。GOPATH 作用
GOPATH 是 Go 项目的工作空间目录,用于存储源码、依赖包和生成的二进制文件。
它是 Go 1.x 的工作机制(在 Go Modules 之前非常重要),用来组织代码结构。 GOPATH 必要性
如果使用的是 Go Modules(现代 Go 的推荐方式),GOPATH 的作用大大降低,但仍有以下场景需要: 编译后的可执行文件会存放在 GOPATH/bin 中。某些工具(如 go install)仍然默认依赖 GOPATH。在不使用 Go Modules 的老项目中,GOPATH 是必需的。 为什么还要添加 GOPATH/bin 到 PATH
当用 go install 安装工具(如 golangci-lint、dlv)时,生成的可执行文件会存放到 GOPATH/bin 下。
将 GOPATH/bin 添加到 Path 中,方便在全局运行这些工具。是否需要添加 GOPATH
如果项目完全基于 Go Modules,可以不显式配置 GOPATH
如果需要兼容老项目,或安装工具包,建议配置。是否需要添加 GOPATH/bin 到 PATH
必须添加,否则用 go install 安装的工具无法直接在命令行中使用。 实际建议
根据现代 Go 的实践,以下是建议的简化配置: GOROOT:不需要手动设置(如果使用默认安装路径)。GOPATH:对于大多数现代项目(使用 Go Modules),只需设置一个工作目录(如 D:GoWorkspace)作为 GOPATH。将 GOPATH/bin 添加到系统 PATH,方便全局使用工具。 1.2.3 验证环境变量

打开新的命令行窗口,运行以下命令:

go env 1

确保输出的 GOROOT 和 GOPATH 正确。

1.3 包管理工具 Go Modules

1.3.1 开启使用

Go Modules 是 Go 语言推荐的依赖管理方式。
启用 Go Modules:

go env -w GO111MODULE=on 1

现在的新版本 Go(1.16 及更高版本)默认已经启用了 Go Modules,因此在一般情况下,不需要手动设置 GO111MODULE

检查是否成功:

go env | findstr GO111MODULE 1

初始化项目, 在项目目录下运行:

go mod init <模块名称> 1

例如,创建一个模块名称为 example.com/mymodule 的项目:

go mod init example.com/mymodule 1

这会生成一个 go.mod 文件,内容类似如下:

module example.com/mymodule go 1.20 123

运行项目:

go run . 1 1.3.2 添加依赖包

当在代码中引入第三方包时(例如 github.com/gin-gonic/gin),Go 会自动解析并下载依赖包。

例如,编写代码:

package main import ( "github.com/gin-gonic/gin" ) func main() { r := gin.Default() r.GET("/", func(c *gin.Context) { c.JSON(200, gin.H{"message": "Hello, World!"}) }) r.Run() } 12345678910111213

运行:

go mod tidy 1

这会下载所需的依赖包并更新 go.mod 和 go.sum 文件。
go.mod 记录了直接依赖,go.sum 记录了依赖的校验信息。

1.3.3 配置国内包源

由于网络原因,下载依赖包时可能会很慢,建议更换为国内包源。

1.3.3.1 通过 go env 配置

设置 Go Modules 使用国内代理:

go env -w GOPROXY=https://goproxy.cn,https://mirrors.aliyun.com,direct 1

验证配置:

go env | findstr GOPROXY 1

输出类似:

GOPROXY=https://goproxy.cn,https://mirrors.aliyun.com,direct 1 1.3.3.2 修改环境变量

如果不想每次都设置,可以直接在系统环境变量中添加 GOPROXY
打开环境变量设置,添加一个新变量:

名称:GOPROXY值:https://goproxy.cn,https://mirrors.aliyun.com,direct

GOPROXY 可以配置多个代理地址,并用逗号(,)分隔。Go 会按照顺序依次尝试这些代理,直到找到一个可用的
这里加 direct 表示如果在指定的代理服务器上找不到模块,Go 会直接尝试从模块源(如 Git 仓库)下载依赖。这是一种后备机制,确保即使代理不可用,依赖仍有机会通过源下载。

1.3.4 更新和管理依赖 下载和清理依赖:
go mod tidy:这会添加缺失的依赖,并移除未使用的依赖。查看依赖包:
go list -m all:升级依赖:
go get -u <包名>
例如,升级 Gin:
go get -u github.com/gin-gonic/gin指定依赖版本:
编辑 go.mod 文件,直接指定版本:
require github.com/gin-gonic/gin v1.9.0
然后运行:go mod tidy 1.3.5 没有域名时项目操作

如果没有域名,又想避免将来迁移麻烦,可以使用以下方式:
本地开发时使用简单名称:

go mod init myproject 1

以后需要发布时再修改: 修改 go.mod 文件的 module 字段即可,比如:

module github.com/username/myproject 1

结合私有模块代理: 如果项目是私有的,可以使用 GOPRIVATE 指定私有模块地址:

go env -w GOPRIVATE=company.com 1 1.3.6 go.mod 1.3.6.1 文件介绍

go.mod 是 Go Modules 的核心文件,用来定义模块及其依赖项。
一个典型的 go.mod 文件可能包含以下内容:

module example.com/mymodule go 1.20 require ( github.com/gin-gonic/gin v1.9.0 golang.org/x/net v0.5.0 ) 12345678

各部分含义:

module: 定义模块的名称(通常是项目的根路径)。模块名称决定了这个项目在其他地方引入时的路径。go: 指定最低支持的 Go 版本。例如,go 1.20 表示此模块要求 Go 1.20 或更高版本。require: 列出此模块的直接依赖包及其版本。replace(可选): 用于替换依赖包的路径或版本,常用于本地开发或依赖修复。
replace github.com/example/foo => ../local/fooexclude(可选): 指定不允许使用的模块版本。
exclude github.com/example/foo v1.2.3 1.3.6.2 操作 go.mod 的常用命令

初始化模块:

go mod init <module-name> 1

添加依赖:

go get <package>@<version> 1

自动管理依赖(清理未使用的依赖,并自动添加缺失的依赖):

go mod tidy 1 1.3.7 go.sum 1.3.7.1 文件介绍

go.sum 是 go.mod 的配套文件,用于记录模块依赖的校验信息,确保依赖的完整性和一致性。
作用:

完整性验证: 在拉取依赖包时,Go 会校验包的实际内容是否与 go.sum 文件中的哈希值一致,防止依赖被篡改。缓存优化: 记录的校验值使得 Go 工具可以高效地在本地或远程缓存中找到匹配的依赖包。

一个典型的 go.sum 文件内容如下:

github.com/gin-gonic/gin v1.9.0 h1:4Fq34... github.com/gin-gonic/gin v1.9.0/go.mod h1:kf4B... golang.org/x/net v0.5.0 h1:3jHk... golang.org/x/net v0.5.0/go.mod h1:Lsk4... 1234

各部分含义:

每一行记录一个依赖包的校验信息。每个依赖包有两类记录: <模块名> <版本> <校验值>:依赖包的完整内容校验值。<模块名> <版本>/go.mod <校验值>:依赖包的 go.mod 文件校验值。 1.3.7.2 管理 go.sum 文件 自动生成: 当运行 go mod tidy 或使用依赖时,go.sum 会自动更新。不要手动修改: go.sum 是由 Go 工具自动维护的,手动修改可能导致校验错误。

1.4 常用命令

1.4.1 Go Modules 常用命令 1.4.1.1 模块初始化

go mod init <module-name> 1

初始化一个新的模块。
会在当前目录下生成 go.mod 文件。
示例:

go mod init example.com/mymodule 1 1.4.1.2 添加依赖

go get <package>@<version> 1

下载指定的依赖包并更新 go.mod 和 go.sum 文件。
@<version> 可选,不指定时默认获取最新版本。
示例:

go get github.com/gin-gonic/gin@v1.9.0 1

如果省略版本:

go get github.com/gin-gonic/gin 1

会安装最新稳定版。

1.4.1.3 移除未使用的依赖

go mod tidy 1

自动清理未使用的依赖包,并下载缺失的依赖。
同时更新 go.mod 和 go.sum 文件。

1.4.1.4 下载所有依赖

go mod download 1

下载 go.mod 文件中列出的所有依赖包到本地模块缓存。

1.4.1.5 查看依赖列表

go list -m all 1

列出当前模块的所有依赖及其版本(包括直接和间接依赖)。

1.4.1.6 检查依赖更新

go list -u -m all 1

列出所有依赖,并显示可以更新的版本(如果有)。

1.4.1.7 替换依赖

在 go.mod 文件中添加 replace 指令,替换依赖的路径或版本。

replace github.com/example/foo => ../local/foo 1

替换为本地路径版本。
更新依赖后,运行:

go mod tidy 1 1.4.1.8 移除模块中的依赖

手动删除代码中不需要的依赖后运行:

go mod tidy 1

这会从 go.mod 中移除未使用的依赖。

1.4.1.9 验证依赖

go mod verify 1

验证所有依赖的校验值是否与 go.sum 文件一致,用于检查依赖包是否被篡改。

1.4.1.10 查看模块路径

go env GOMOD 1

输出当前模块的 go.mod 文件路径。如果没有使用 Go Modules,输出为空。

1.4.2 开发中的常用命令 1.4.2.1 编译并运行项目

go run . 1

在当前模块中运行主程序文件。

1.4.2.2 构建可执行文件

go build 1

在当前目录下生成可执行文件。
使用 Go Modules 时,会自动管理依赖。

1.4.2.3 安装依赖工具

go install <package> 1

将指定的模块安装到 GOPATH/bin 或配置的 GOBIN 目录下,其的核心功能是 编译并安装 Go 工具或程序,而不是直接管理依赖。具体来说:将指定的模块或包编译成可执行文件,并安装到 GOBIN 或 GOPATH/bin 目录下。

1.4.2.4 清理模块缓存

go clean -modcache 1

清理本地模块缓存(默认存储在 ~/.cache/go-build)。

1.4.3 依赖调试与版本控制 1.4.3.1 强制使用特定版本

go get <package>@v1.2.3 1

强制将依赖包的版本降级或升级到指定版本。

1.4.3.2 显示依赖关系

go mod graph 1

生成依赖关系的图形表示(文本形式)。

相关知识

【Go】基于 Gin 从0到1搭建 Web 管理后台系统后端服务(一)项目初始化、配置和日志将前后端同步开发,后端服务基
基于go语言,手把手教你实现后端管系统框架
go env
从0开始,用Go语言搭建一个简单的后端业务系统
go语言图标叫什么
UE5 002项目设置和基础环境构建(二)
Go语言全栈开发:结构体
前端开发环境搭建之docker篇
十分钟,零基础使用uniCloud完成后端管理系统搭建一
【go!购!√】河北垂钓牵牛

网址: Go基础之环境搭建 https://m.huajiangbk.com/newsview1428494.html

所属分类:花卉
上一篇: (超详细) Spark环境搭建(
下一篇: RocketMQ保姆级教程大家好