包管理器
每一个现代语言都会有属于自己的一个成熟的依赖管理工具, 例如 Java 的 Gradle/maven, Python 的 pip/uv, node.js 的 npm/yarn/pnpm 等, 一个好的依赖管理工具可以为开发者省 去不少时间并且可以提升开发效率, 然而 Go 在早期并没有一个成熟的依赖管理解决方案, 那时所有的代码都存放在 GOPATH 目录下, 对于工程项目而言十分的不友好,版本混乱,依赖难 以管理,为了解决这个问题, Go1.11 官方终于推出了 Go Mod 这款官方的依赖管理工具
go mod 快速入门
1.创建项目 & 初始化
sh
# 创建项目目录
mkdir golang-demo && cd -
# 初始化(类似 pnpm init)
# 会生成一个 go.mod 文件
go mod init2.创建多个 go 文件
sh
# 程序入口 package main
touch main.go
# 工具函数包
mkdir tools
touch tools/tools.go项目结构如下:
txt
. # golang-demo 项目根目录
├── go.mod
├── main.go
└── tools
├── tools.go
└── utils.go
2 directories, 4 files3.在 main.go 中导入其他包
go
package main // 定义包名(main是一个必不可少的包, 代表程序入口)
import (
"fmt"
"golang_demo/tools" // 注意导入要从 mod.go 中说明的 module 开始
)
func main() {
// 使用 tools/tools.go 文件中的方法
colorCode := tools.GenerateRandomColor()
fmt.Println("color:", colorCode)
// 使用 tools/utils.go 文件中的方法
bgColor := tools.GenerateRandomBgColor()
fmt.Println(bgColor)
}go
package tools // 定义包名
import (
"fmt"
"math/rand"
)
// 注: 要想让其他包可以访问, 函数名必须使用大驼峰
// GenerateRandomColor 生成并返回一个随机的 16 进制颜色代码
// 返回值示例: "#ff0000", "#a3b2c1"
func GenerateRandomColor() string {
colorCode := rand.Intn(0xFFFFFF + 1)
return fmt.Sprintf("#%06x", colorCode)
}go
package tools
// 我并没有到导入, 就可以直接使用同, 一个包下的其他文件中的方法
// 所以, 由此可见:
// 1. package 是 go 语言组织代码结构的最小单元(文件并不是)
// 2. 一个 package 可以有多个文件, 但是一个文件只能有一个 package 定义语句
func GenerateRandomBgColor() string {
randomColor := GenerateRandomColor()
return "background-color: " + randomColor
}go
module golang_demo
go 1.25.5注意点
- (main 除外)包的名称最好是与go文件所在的目录同名(如:
tools/tools.go) - main 函数一般都放在 main 包中
- 要想让包中的函数/变量被其他包可以访问,就必须使用
大驼峰(如: GenerateRandomColor) - package 是go组织代码结构的最小单元, 同一个包中的函数/变量可以直接被另外一个文件访问
- 同一个目录下的多个文件必须只能属于同一个包(如: tools/tools.go 和 tools/utils.go 都是 tools 包)
init 函数
它是一个比较特殊的函数, 他会在包初始化的时候的执行, 所有的包都可以定义一个 init 函数
- 全局变量定义
- init 执行
- main 执行
- 如果有多个包, 那么被导入的包的
init函数会先执行
go
package main
import (
"fmt"
)
var num int = 10
func main() {
// 然后再执行 main
fmt.Println("我是 main 函数")
}
func init() {
// 先执行它(即使我写在main函数后面,也是我先执行)
fmt.Println("获取 num 的值", num)
fmt.Println("我是 init 函数")
}管理第三方模块
设置国内镜像
- 七牛云镜像 - https://goproxy.cn/
- 阿里云镜像 - https://developer.aliyun.com/mirror/goproxy/
- 百度云镜像 - https://goproxy.bj.bcebos.com/
- Go官方镜像 - https://goproxy.io/
sh
# 在你的 ~/.zshrc 中导出全局变量
export GOPROXY='https://goproxy.cn/,https://mirrors.aliyun.com/goproxy/,https://goproxy.io,https://goproxy.bj.bcebos.com,direct'编译安装工具
有些工具不是作为一个代码库来使用的, 而是它原本就是一个功能齐全的软件 比如: lazygit 但是它也能用 go install 命令来安装
sh
go install github.com/jesseduffield/lazygit@latest安装代码库
安装一些别人封装好的代码, 用到自己的业务代码中, 比如日志处理库
sh
go get github.com/sirupsen/logrusgo
package main
import (
"github.com/sirupsen/logrus"
)
func main() {
logrus.Info("Info Log")
logrus.Warn("Warn Log")
logrus.Error("Error Log")
}