一 go get命令
go get 命令可以下载并添加第三方包到你的项目中。
1.基本用法
go get <package-path>
例如,下载 gorilla/mux 路由包:
go get -u github.com/gorilla/mux
-u标志表示同时更新包及其依赖到最新版本。
2.指定版本
你可以指定要下载的包的版本:
go get github.com/gorilla/mux@v1.8.0
3.下载特定分支或提交
# 下载特定分支
go get github.com/gorilla/mux@branchname
# 下载特定提交
go get github.com/gorilla/mux@commitHash
4. 查看依赖
你可以使用以下命令查看当前项目的依赖:
go list -m all
这将列出所有模块及其版本。
5. 更新依赖
要更新所有依赖到最新版本:
go get -u ./...
或者更新特定包:
go get -u github.com/gorilla/mux
6. 移除未使用的依赖
如果删除了代码中对某些包的引用,可以使用以下命令清理 go.mod 和 go.sum 文件中未使用的依赖:
go mod tidy
二 1.go install 与 go get 的区别
在 Go 1.16 之前,go get 常用于下载和安装包及其依赖。然而,随着 Go Modules 的引入和 go install 的增强,两者的职责有所区分:
-
**
go install**:- 主要用于编译并安装可执行文件和库文件。
- 更适合用于安装工具和应用程序。
-
**
go get**:- 主要用于添加依赖到当前模块,并下载它们。
- 在 Go 1.16 及之后版本中,
go get更多用于依赖管理,而不是安装可执行文件。
建议:使用 go install 来安装可执行文件和工具,使用 go get 来管理模块依赖。
| 特性 | go get | go install |
|---|---|---|
| 主要功能 | 下载、安装、更新包及其依赖项 | 编译并安装包或工具 |
| 依赖管理 | 会更新 go.mod 文件 | 不会更新 go.mod 文件 |
| 适用场景 | 添加或更新项目依赖 | 安装工具或编译本地包 |
| 版本控制 | 支持 @version 语法 | 支持 @version 语法 |
| Go模块模式 | 在Go 1.16及以下版本中常用 | 在Go 1.16及以上版本中推荐使用 |
2.go install 的语法
go install <package>[@version]
<package>:要安装的包的路径,可以是相对路径、绝对路径或模块路径。[@version](可选):指定要安装的包的版本,例如v1.2.3、latest等。
3.1 安装可执行程序
go install github.com/gorilla/mux@latest
上述命令将编译并安装 gorilla/mux 包的可执行文件(如果有),并将其放置在 $GOPATH/bin 或 $GOBIN 目录下。
安装本地文件系统中的包:
go install ./path/to/your/package
3.2 安装工具
许多 Go 开发工具可以通过 go install 安装。例如,安装 golangci-lint:
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
4 go install 的常用选项
4.1 -i 安装依赖包,但不编译它们。
go install -i github.com/example/package
注意:在 Go 1.16 及之后版本中,go install 默认会处理依赖,因此 -i 选项的使用频率降低。
4.2 -d 仅下载包及其依赖,但不编译和安装它们。
go install -d github.com/example/package
4.3 -v 在安装过程中显示详细信息。
go install -v github.com/example/package
4.4 -x 打印执行的命令,但不执行它们。这对于调试非常有用。
go install -x github.com/example/package
4.5 -c 编译包及其依赖,但不安装它们。
go install -c github.com/example/package
三、连接MySQL数据库
初始化项目: 在终端中创建一个新目录并初始化Go模块:
mkdir my-mysql-project
cd my-mysql-project
go mod init my-mysql-project
创建主文件: 在项目目录中创建一个 main.go 文件:
以下是一个完整的示例代码,展示如何连接MySQL数据库并执行简单的查询:
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/go-sql-driver/mysql" // 导入MySQL驱动
)
func main() {
// 数据库连接信息
dsn := "username:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True"
// 打开数据库连接
db, err := sql.Open("mysql", dsn)
if err != nil {
log.Fatalf("Failed to connect to database: %v", err)
}
defer db.Close() // 确保在程序结束时关闭连接
// 测试连接
err = db.Ping()
if err != nil {
log.Fatalf("Failed to ping database: %v", err)
}
fmt.Println("Successfully connected to the database!")
// 执行查询
rows, err := db.Query("SELECT id, name FROM users")
if err != nil {
log.Fatalf("Failed to execute query: %v", err)
}
defer rows.Close()
// 遍历查询结果
for rows.Next() {
var id int
var name string
err = rows.Scan(&id, &name)
if err != nil {
log.Fatalf("Failed to scan row: %v", err)
}
fmt.Printf("ID: %d, Name: %s\n", id, name)
}
// 检查遍历过程中是否出错
if err = rows.Err(); err != nil {
log.Fatalf("Error during rows iteration: %v", err)
}
}
-
下载依赖
go get -u github.com/go-sql-driver/mysql或者直接运行
go build,Go 会自动下载所需的依赖。 -
运行项目
go run main.go
-
数据库连接字符串(DSN) :
username:MySQL用户名。password:MySQL密码。127.0.0.1:3306:MySQL服务器地址和端口。dbname:要连接的数据库名称。charset=utf8mb4:设置字符集。parseTime=True:允许解析时间类型。
-
sql.Open:- 打开数据库连接,但并不立即验证连接是否成功。
-
db.Ping:- 测试数据库连接是否有效。
-
db.Query:- 执行SQL查询并返回结果集。
-
rows.Scan:- 将查询结果映射到变量中。
-
defer:- 确保在函数结束时关闭数据库连接和结果集,避免资源泄漏。
-
预期输出:
- 如果连接成功,会输出
Successfully connected to the database!。 - 如果查询到数据,会逐行输出
ID和Name。
- 如果连接成功,会输出