go语言连接mysql

101 阅读5分钟

一 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 getgo 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.3latest 等。

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)
	}
}

  1. 下载依赖

    go get -u github.com/go-sql-driver/mysql
    

    或者直接运行 go build,Go 会自动下载所需的依赖。

  2. 运行项目

    go run main.go
    


  1. 数据库连接字符串(DSN)

    • username:MySQL用户名。
    • password:MySQL密码。
    • 127.0.0.1:3306:MySQL服务器地址和端口。
    • dbname:要连接的数据库名称。
    • charset=utf8mb4:设置字符集。
    • parseTime=True:允许解析时间类型。
  2. sql.Open

    • 打开数据库连接,但并不立即验证连接是否成功。
  3. db.Ping

    • 测试数据库连接是否有效。
  4. db.Query

    • 执行SQL查询并返回结果集。
  5. rows.Scan

    • 将查询结果映射到变量中。
  6. defer

    • 确保在函数结束时关闭数据库连接和结果集,避免资源泄漏。

  1. 预期输出

    • 如果连接成功,会输出 Successfully connected to the database!
    • 如果查询到数据,会逐行输出 ID 和 Name