Golang中无法导入denisenkom库的解决方法

Golang中无法导入denisenkom库的解决方法 Win10 x64

我已从工作文件夹运行终端命令,从 Go 工作目录获取并安装 denisenkom 包,但在导入部分返回错误。我使用的是包示例中的 simple.go。

无法从 $GOROOT 和 $GOPATH 导入

denisenkom

10 回复

你在终端中运行了哪个命令?

你显示的错误信息看起来更像是来自编辑器而非终端。

更多关于Golang中无法导入denisenkom库的解决方法的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


好的,程序运行成功了。

我使用的是标准安装的 VS Code。类似地,Go 语言的安装也全部是默认设置。

JonBravo:

fmt.Printf 的输出没有在终端显示。

它什么时候不显示?你看到了什么?

Go 1.8 版本已经非常老旧了,最近的安装程序应该会提供 1.16 或 1.17 版本。

我不太确定你所说的“到达连接后行”是什么意思。

你运行的命令输出是什么?它们报错了吗?你能使用 go build 成功构建你的程序吗?

如果它能编译并且你可以在终端中运行它,那么就不存在导入错误。

你的问题很可能只是出现在你的编辑器中。你还没有告诉我们你使用的是什么编辑器,你是如何启动它的,你是如何安装它的,或者你是如何配置它的。

JonBravo:

它只显示 Starting server at port 8080

是的,然后它启动服务器并暂停当前的 Go 协程,等待 http.ListenAndServe() 调用返回。除非发生不可恢复的错误,否则这永远不会发生。

你需要在启动 HTTP 服务器之前初始化你的数据库连接。

这仍然与你最初的截图无关。对于那个问题,我只是假设你的编辑器没有正确设置。

修正终端显示的错误。显然,它未能到达打印连接成功的连接后代码行。

我在终端中运行了以下命令:

go get github.com/denisenkom/go-mssqldb
go install github.com/denisenkom/go-mssqldb

考虑到作者提到的一个可能相关点:

需要 Go 1.8 或更高版本。

不过,我使用的是最新的 Go 语言 Windows 安装程序。

好的,我现在使用的是最新版本 go1.17.3。

	// create the connection pool
	fmt.Printf("Starting mssql connection pool\n")

	// create the connection string for ms sql
	connString := fmt.Sprintf("server=%s; user id=%s; password=%s; port=%d; database=%s; ",
		server, user, pwd, port, database)

	Db, err = sql.Open("mssql", connString)
	if err != nil {
		fmt.Printf("Error creating connection pool :" + err.Error())

	}

	fmt.Printf("Connected to MSSQL")

fmt.Printf 的输出没有显示在终端中。

go build

没有返回任何信息。我会认为这是成功的。

问题出在你的Go模块配置上。从错误信息看,Go工具无法在$GOROOT$GOPATH中找到github.com/denisenkom/go-mssqldb包。

解决方案:

1. 首先初始化Go模块(如果你还没有)

# 在你的项目目录中运行
go mod init your-project-name

2. 然后获取依赖包

# 这会自动下载并添加到go.mod文件
go get github.com/denisenkom/go-mssqldb

3. 或者直接导入后运行

// simple.go
package main

import (
    "database/sql"
    "fmt"
    _ "github.com/denisenkom/go-mssqldb"
)

func main() {
    connString := "server=localhost;user id=sa;password=your_password;database=testdb"
    db, err := sql.Open("sqlserver", connString)
    if err != nil {
        fmt.Println("连接错误:", err)
        return
    }
    defer db.Close()
    
    err = db.Ping()
    if err != nil {
        fmt.Println("Ping错误:", err)
        return
    }
    fmt.Println("连接成功")
}

然后运行:

go mod tidy
go run simple.go

4. 如果仍然有问题,检查你的Go环境配置

# 查看当前配置
go env GOPATH
go env GOROOT

# 确保模块支持已开启(Go 1.16+默认开启)
go env GO111MODULE

5. 清理并重新下载依赖

# 删除go.sum文件并重新下载
rm go.sum
go mod download

关键点是:从Go 1.11开始,推荐使用Go Modules管理依赖,而不是传统的GOPATH方式。确保你的项目目录中有go.mod文件,并且已经正确初始化了模块。

好的,将 http.ListenAndServe 移到代码底部后,我能够运行 QueryRowContext 函数了。但这并没有解决“无法导入错误”的问题。

运行 go env 命令返回以下结果:

set GO111MODULE=
set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\E440\AppData\Local\go-build
set GOENV=C:\Users\E440\AppData\Roaming\go\env
set GOEXE=.exe
set GOEXPERIMENT=
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOINSECURE=
set GOMODCACHE=C:\Users\E440\go\pkg\mod
set GONOPROXY=
set GONOSUMDB=
set GOOS=windows
set GOPATH=C:\Users\E440\go
set GOPRIVATE=
set GOPROXY=https://proxy.golang.org,direct
set GOROOT=C:\Program Files\Go
set GOSUMDB=sum.golang.org
set GOTMPDIR=
set GOTOOLDIR=C:\Program Files\Go\pkg\tool\windows_amd64
set GOVCS=
set GOVERSION=go1.17.3
set GCCGO=gccgo
set AR=ar
set CC=gcc
set CXX=g++
set CGO_ENABLED=1
set GOMOD=NUL
set CGO_CFLAGS=-g -O2
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-g -O2
set CGO_FFLAGS=-g -O2
set CGO_LDFLAGS=-g -O2
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m64 -mthreads -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=C:\Users\E440\AppData\Local\Temp\go-build1413715468=/tmp/go-build -gno-record-gcc-switches
回到顶部