1 Go
1.1 简介
1.1.1 定义
Go语言,也被称为Golang,是一种由Google开发的静态类型、编译型编程语言,是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。是从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打开,右击此电脑,选择属性,搜索查看高级系统设置,点击环境变量
添加变量:
- 设置(安装路径):
点击下的。
名称:,值:C:\Program Files\Go()
- 设置(项目路径):
GOPATH 是新建一个目录,例如 D:\GoWorkspace。
在系统变量中添加:
名称:,值:D:\GoWorkspace。
- 添加:
找到系统变量中的,点击。
添加以下路径:()。()。
1.2.2.2 各个环境变量理解
- 作用是的安装路径,用于告诉工具链(如、)Go 的核心库在哪里。
默认情况下,Go 的安装程序会自动检测其安装路径并设置好,因此 通常不需要手动添加环境变量。
那么就,是否需要在环境变量中手动添加?如果是的默认路径(如),且未修改过安装路径,无需手动添加 GOROOT。但是,如果 Go 安装到了,或者 Go 工具链出现了找不到标准库的问题,那么可以手动设置 GOROOT。
- 作用是 Go 项目的工作空间目录,用于存储源码、依赖包和生成的二进制文件。
它是的工作机制(在之前非常重要),用来组织代码结构。
- 必要性
如果使用的是(现代 Go 的推荐方式),的作用大大降低,但仍有以下场景需要:
- 编译后的可执行文件会存放在 GOPATH/bin 中。
- 某些工具(如 go install)仍然默认依赖 GOPATH。
- 在不使用 Go Modules 的老项目中,GOPATH 是必需的。
- 为什么还要添加到当用安装工具(如 golangci-lint、dlv)时,生成的可执行文件会存放到下。
将添加到中,方便在全局运行这些工具。
- 是否需要添加如果项目完全基于,可以不显式配置如果需要兼容老项目,或安装工具包,建议配置。
- 是否需要添加到必须添加,否则用安装的工具无法直接在命令行中使用。
- 实际建议
根据现代 Go 的实践,以下是建议的简化配置:
- :不需要手动设置(如果使用默认安装路径)。
- :对于大多数现代项目(使用),只需设置一个工作目录(如 D:\GoWorkspace)作为。将添加到系统 PATH,方便全局使用工具。
1.2.3 验证环境变量
打开新的命令行窗口,运行以下命令:确保输出的 GOROOT 和 GOPATH 正确。
1.3 包管理工具 Go Modules
1.3.1 开启使用
是语言推荐的依赖管理方式。
启用 Go Modules:现在的新版本 Go(及更高版本)默认已经启用了,因此在一般情况下,不需要手动设置检查是否成功:- go env | findstr GO111MODULE
复制代码 初始化项目, 在项目目录下运行:例如,创建一个模块名称为 example.com/mymodule 的项目:- go mod init example.com/mymodule
复制代码 这会生成一个 go.mod 文件,内容类似如下:- module example.com/mymodule
- go 1.20
复制代码 运行项目:1.3.2 添加依赖包
当在代码中引入第三方包时(例如),会自动解析并下载依赖包。
例如,编写代码:- 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()
- }
复制代码 运行:这会下载所需的依赖包并更新 go.mod 和 go.sum 文件。记录了,记录了依赖的校验信息。
1.3.3 配置国内包源
由于网络原因,下载依赖包时可能会很慢,建议更换为国内包源。
1.3.3.1 通过 go env 配置
设置使用国内代理:- go env -w GOPROXY=https://goproxy.cn,https://mirrors.aliyun.com,direct
复制代码 验证配置:输出类似:- GOPROXY=https://goproxy.cn,https://mirrors.aliyun.com,direct
复制代码 1.3.3.2 修改环境变量
如果不想每次都设置,可以直接在系统环境变量中添加打开环境变量设置,添加一个新变量:
- 名称:
- 值:
- https://goproxy.cn,https://mirrors.aliyun.com,direct
复制代码 可以配置多个代理地址,并用逗号()分隔。会按照顺序依次尝试这些代理,直到找到一个可用的
这里加表示如果在指定的代理服务器上找不到模块,会直接尝试从模块源(如 Git 仓库)下载依赖。这是一种后备机制,确保即使代理不可用,依赖仍有机会通过源下载。
1.3.4 更新和管理依赖
- 下载和清理依赖::这会添加缺失的依赖,并移除未使用的依赖。
- 查看依赖包::
- 升级依赖:例如,升级 Gin:
- go get -u github.com/gin-gonic/gin
复制代码 - 指定依赖版本:
编辑文件,直接指定版本:- require github.com/gin-gonic/gin v1.9.0
复制代码 然后运行:
1.3.5 没有域名时项目操作
如果没有域名,又想避免将来迁移麻烦,可以使用以下方式:
本地开发时使用简单名称:以后需要发布时再修改: 修改文件的字段即可,比如:- module github.com/username/myproject
复制代码 结合私有模块代理: 如果项目是私有的,可以使用 GOPRIVATE 指定私有模块地址:- go env -w GOPRIVATE=company.com
复制代码 1.3.6 go.mod
1.3.6.1 文件介绍是的核心文件,用来定义模块及其依赖项。
一个典型的 go.mod 文件可能包含以下内容:- module example.com/mymodule
- go 1.20require ( github.com/gin-gonic/gin v1.9.0 golang.org/x/net v0.5.0)
复制代码 各部分含义:
- : 定义模块的名称(通常是项目的根路径)。模块名称决定了这个项目在其他地方引入时的路径。
- : 指定最低支持的 Go 版本。例如,go 1.20 表示此模块要求 Go 1.20 或更高版本。
- : 列出此模块的直接依赖包及其版本。
- (可选): 用于替换依赖包的路径或版本,常用于本地开发或依赖修复。
- replace github.com/example/foo => ../local/foo
复制代码 - (可选): 指定不允许使用的模块版本。
- exclude github.com/example/foo v1.2.3
复制代码 1.3.6.2 操作 go.mod 的常用命令
初始化模块:- go mod init <module-name>
复制代码 添加依赖:- go get <package>@<version>
复制代码 自动管理依赖(清理未使用的依赖,并自动添加缺失的依赖):1.3.7 go.sum
1.3.7.1 文件介绍是的配套文件,用于记录模块依赖的,确保依赖的和。
作用:
- : 在拉取依赖包时,Go 会校验包的实际内容是否与文件中的哈希值一致,防止依赖被篡改。
- : 记录的校验值使得 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...
复制代码 各部分含义:
- 每一行记录一个依赖包的校验信息。
- 每个依赖包有两类记录:
- :依赖包的完整内容校验值。
- :依赖包的文件校验值。
1.3.7.2 管理 go.sum 文件
- 自动生成: 当运行或使用依赖时,会自动更新。
- 不要手动修改:是由 Go 工具自动维护的,手动修改可能导致校验错误。
1.4 常用命令
1.4.1 Go Modules 常用命令
1.4.1.1 模块初始化- go mod init <module-name>
复制代码 初始化一个新的模块。
会在当前目录下生成文件。
示例:- go mod init example.com/mymodule
复制代码 1.4.1.2 添加依赖- go get <package>@<version>
复制代码 下载指定的依赖包并更新和文件。可选,不指定时默认获取最新版本。
示例:- go get github.com/gin-gonic/gin@v1.9.0
复制代码 如果省略版本:- go get github.com/gin-gonic/gin
复制代码 会安装最新稳定版。
1.4.1.3 移除未使用的依赖自动清理未使用的依赖包,并下载缺失的依赖。
同时更新和文件。
1.4.1.4 下载所有依赖下载文件中列出的所有依赖包到本地模块缓存。
1.4.1.5 查看依赖列表列出当前模块的所有依赖及其版本(包括直接和间接依赖)。
1.4.1.6 检查依赖更新列出所有依赖,并显示可以更新的版本(如果有)。
1.4.1.7 替换依赖
在文件中添加指令,替换依赖的路径或版本。- replace github.com/example/foo => ../local/foo
复制代码 替换为本地路径版本。
更新依赖后,运行:1.4.1.8 移除模块中的依赖
手动删除代码中不需要的依赖后运行:这会从 go.mod 中移除未使用的依赖。
1.4.1.9 验证依赖验证所有依赖的校验值是否与文件一致,用于检查依赖包是否被篡改。
1.4.1.10 查看模块路径输出当前模块的文件路径。如果没有使用,输出为空。
1.4.2 开发中的常用命令
1.4.2.1 编译并运行项目在当前模块中运行主程序文件。
1.4.2.2 构建可执行文件在当前目录下生成可执行文件。
使用时,会自动管理依赖。
1.4.2.3 安装依赖工具将指定的模块安装到或配置的目录下,其的核心功能是,而。具体来说:- 将指定的模块或包编译成可执行文件,并安装到 GOBIN 或 GOPATH/bin 目录下
复制代码 。
1.4.2.4 清理模块缓存清理本地模块缓存(默认存储在 ~/.cache/go-build)。
1.4.3 依赖调试与版本控制
1.4.3.1 强制使用特定版本强制将依赖包的版本降级或升级到指定版本。
1.4.3.2 显示依赖关系生成依赖关系的图形表示(文本形式)。
总结
到此这篇关于Go基础教程之环境搭建及常用命令的文章就介绍到这了,更多相关Go环境搭建内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
来源:互联网
免责声明:如果侵犯了您的权益,请联系站长(1277306191@qq.com),我们会及时删除侵权内容,谢谢合作! |