Go引入MySQL驱动无法下载

cmd命令窗口查看go 版本为1.6.

1
2
C:\Users\2B>go version
go version go1.16.4 windows/amd64

cannot find package “github.com/go-sql-driver/mysql” in any of:

连接MySQL的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package utils

import (
"database/sql"
_ "github.com/go-sql-driver/mysql"
)

var (
Db *sql.DB
err error
)

func init() {
Db, err = sql.Open("mysql", "root:123456@tcp(localhost:3306)/test")
if err != nil {
panic(err.Error())
}
}

运行时报错

1
2
3
e:\go\go-bookstore\utils\db.go:5:2: cannot find package "github.com/go-sql-driver/mysql" in any of:
D:\program\go\src\github.com\go-sql-driver\mysql (from $GOROOT)
C:\Users\2B\go\src\github.com\go-sql-driver\mysql (from $GOPATH)

go get 下载依赖

采用手动下在MySQL的方式, 在cmd窗口执行。

首先确认环境变量 GO111MODULE=auto

image-20210611225519476

大部分根据网上的教程都是 GO111MODULE=on ,设置为on使用go get 无法下载。

下载命令

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

image-20210611223330754

go get 可以在末尾加 @ 符号,用来指定版本

go get -u github.com/go-sql-driver/mysql@v1.6.0

版本号可以在github.com/go-sql-driver/mysql tag目录下查看

不带版本号是最新版

按道理会下载相关文件到 $GOPATH 目录下(我这里是C:\Users\2B\go\src\github.com\go-sql-driver\mysql)

可是窗口没有报错, $GOPATH目录下也没有文件

看下MySQL驱动的仓库

go-sql-driver/mysql: Go MySQL Driver is a MySQL driver for Go’s (golang) database/sql package (github.com)

README.md Installation里面说明

Simple install the package to your $GOPATH with the go tool from shell:

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

Make sure Git is installed on your machine and in your system’s PATH.

原来需要用到git, 没有配置git到环境变量,cmd里面无法使用。

要么配置环境变量,也可以直接在 git bash 窗口执行下载命令. git bash 可以在任意目录右键打开。

image-20210611224056432

下载完成

image-20210611224149870

因为网络原因,可能出现下载失败的情况

1
2
3
4
5
6
7
8
2B@qqq MINGW64 ~/Desktop
$ go get -u github.com/go-sql-driver/mysql
# cd .; git clone -- https://github.com/go-sql-driver/mysql C:\Users\2B\go\src\github.com\go-sql-driver\mysql
Cloning into 'C:\Users\2B\go\src\github.com\go-sql-driver\mysql'...
fatal: The remote end hung up unexpectedly
error: RPC failed; result=7, HTTP code = 0
package github.com/go-sql-driver/mysql: exit status 128

可以直接从github,git clone 想要的版本,或者通过压缩包下载,之后解压到GOPATH目录。

image-20210611230243907

go get 命令

cmd窗口执行 help 查看文档

1
2
3
4
5
6
7
8
9
C:\Users\2B>go help get
usage: go get [-d] [-f] [-t] [-u] [-v] [-fix] [-insecure] [build flags] [packages]

Get downloads the packages named by the import paths, along with their
dependencies. It then installs the named packages, like 'go install'.

...
...
...

go get 命令可以借助代码管理工具通过远程拉取或更新代码包及其依赖包,并自动完成编译和安装。整个过程就像安装一个 App 一样简单。

这个命令可以动态获取远程代码包,目前支持的有 BitBucket、GitHub、Google Code 和 Launchpad。在使用 go get 命令前,需要安装与远程包匹配的代码管理工具,如 Git、SVN、HG 等,参数中需要提供一个包名。

这个命令在内部实际上分成了两步操作:第一步是下载源码包,第二步是执行 go install。下载源码包的 go 工具会自动根据不同的域名调用不同的源码工具,对应关系如下:

1
2
3
4
BitBucket (Mercurial Git)
GitHub (Git)
Google Code Project Hosting (Git, Mercurial, Subversion)
Launchpad (Bazaar)

参数介绍:

  • -d 只下载不安装
  • -f 只有在你包含了 -u 参数的时候才有效,不让 -u 去验证 import 中的每一个都已经获取了,这对于本地 fork 的包特别有用
  • -fix 在获取源码之后先运行 fix,然后再去做其他的事情
  • -t 同时也下载需要为运行测试所需要的包
  • -u 强制使用网络去更新包和它的依赖包
  • -v 显示执行的命令

go get命令——一键获取代码、编译并安装 (biancheng.net)

GO111MODULE

没有 GO111MODULE时, go编译程序的查找依赖的顺序 go path > goroot , 有了GO111MODULE后(Go 1.11 版本),会读取当前项目的go.mod.文件, 在go.mod文件中会记录有哪些依赖

使用 go module 管理依赖后会在项目根目录下生成两个文件 go.mod 和 go.sum

用环境变量 GO111MODULE 开启或关闭模块支持,它有三个可选值:offonauto,默认值是 auto

  • GO111MODULE=off 无模块支持,go 会从 GOPATH 和 vendor 文件夹寻找包。
  • GO111MODULE=on 模块支持,go 会忽略 GOPATH 和 vendor 文件夹,只根据 go.mod 下载依赖。
  • GO111MODULE=auto$GOPATH/src 外面且根目录有 go.mod 文件时,开启模块支持。