无法导入 gorilla/mux(github.com/gorilla/mux@v1.7.4:在 go.mod 中明确要求,但在 vendor/modules.txt 中未标记为明确)
Can't import gorilla/mux (github.com/gorilla/mux@v1.7.4: is explicitly required in go.mod, but not marked as explicit in vendor/modules.txt)
在 Go 中,我正在尝试简单的数据库连接。我需要导入 gorilla/mux
,但我不能。
我正在使用 VS 代码。 cd
进入我的项目目录后,我创建了 main.go
并做了 运行
go get -u github.com/gorilla/mux
这里是main.go
package main
import (
"database/sql"
"fmt"
"github.com/gorilla/mux"
_ "github.com/lib/pq"
)
const (
host = "localhost"
port = 3000
user = "postgres"
password = "postgres"
dbname = "test1"
)
func main() {
psqlInfo := fmt.Sprintf("host=%s port=%d user=%s "+
"password=%s dbname=%s sslmode=disable",
host, port, user, password, dbname)
db, err := sql.Open("postgres", psqlInfo)
if err != nil {
panic(err)
}
defer db.Close()
err = db.Ping()
if err != nil {
panic(err)
}
fmt.Println("Successfully connected!")
}
[注意,执行后go get -u github.com/gorilla/mux
终端显示
C:\Go\src\github.com\IamFrost\go-rest-api>go get -v -u github.com/gorilla/mux
go: golang.org/x/text upgrade => v0.3.2
go: golang.org/x/crypto upgrade => v0.0.0-20200429183012-4b2356b1ed79
go: golang.org/x/sys upgrade => v0.0.0-20200430082407-1f5687305801
go: golang.org/x/net upgrade => v0.0.0-20200425230154-ff2c4b7c35a0
go: downloading golang.org/x/sys v0.0.0-20200430082407-1f5687305801
golang.org/x/sys/cpu
golang.org/x/crypto/chacha20poly1305
crypto/tls
]
看我在迷你地图中没有其他语法错误。在红色标记处,当我放鼠标时,悬停文本对我来说很有趣:
1)imported but not used
但是下一行
2)no package for import github.com/gorilla/mux
)
大声笑这不违背 1) 吗?
有人请解释为什么会这样
然而,
在终端中使用go build
后
这里是终端:
C:\Go\src\github.com\IamFrost\go-rest-api>go build
go: inconsistent vendoring in C:\Go\src:
github.com/gorilla/mux@v1.7.4: is explicitly required in go.mod, but not marked as explicit in vendor/modules.txt
github.com/lib/pq@v1.4.0: is explicitly required in go.mod, but not marked as explicit in vendor/modules.txt
golang.org/x/crypto@v0.0.0-20200429183012-4b2356b1ed79: is explicitly required in go.mod, but not marked as explicit in vendor/modules.txt
golang.org/x/net@v0.0.0-20200425230154-ff2c4b7c35a0: is explicitly required in go.mod, but not marked as explicit in vendor/modules.txt
golang.org/x/sys@v0.0.0-20200430082407-1f5687305801: is explicitly required in go.mod, but not marked as explicit in vendor/modules.txt
golang.org/x/crypto@v0.0.0-20200128174031-69ecbb4d6d5d: is marked as explicit in vendor/modules.txt, but not explicitly required in go.mod
golang.org/x/net@v0.0.0-20191126235420-ef20fe5d7933: is marked as explicit in vendor/modules.txt, but not explicitly required in go.mod
golang.org/x/sys@v0.0.0-20200201011859-915c9c3d4ccf: is marked as explicit in vendor/modules.txt, but not explicitly required in go.mod
run 'go mod vendor' to sync, or use -mod=mod or -mod=readonly to ignore the vendor directory
[注意:我也做了 'go mod vendor',但没有改变]
所以有人指出我为什么不能导入 gorilla/mux
或 pq
。
我还需要做什么?
(请解释一下这是什么意思?is explicitly required in go.mod, but not marked as explicit in vendor/modules.txt
)
我不知道它为什么有效(我是初学者)。我在网上找到了一些东西,不知何故它起作用了。
方法如下:
1)这是我的go目录C:\Go\
。但是我在我的桌面文件夹中创建了项目
2)然后我在C:\Go\src下重新创建了项目
(这是确切的文件夹
C:\Go\src\github.com\[github_username]\[project_name])
3)然后我把所有的代码都贴在了main.go
4) 终于从终端 go mod vendor
5)然后go build
6)然后go run main.go
7)终于成功了
[我想知道它为什么有效。我非常感谢您的评论:关于他们为什么强迫我接受 C:\Go\src
。我已经在环境变量中设置了 GOPATH C:\Go\
, GOBIN C:\Go\bin
]
在 Golang 的最新版本中(我认为是从 1.11 开始),GOPATH 变量发生了变化。我的理解是如果 GOPATH 不是 $HOME/go.
你只需要设置这个
Go 在 $HOME/go/src/ 中寻找你的项目,例如我的 Golang 项目在 $Home/go/src/github.com/` 目录等
如果你想使用项目的不同位置,你仍然可以将 GOPATH 设置到不同的目录。
我的 shell 文件包含以下内容以适应已设置和未设置的 GOPATH。
export PATH="$PATH:$(go env GOPATH)/bin"
获得更多信息
这是我为我修复它的方法:
go get ./...
go mod vendor
如果你的 Go 版本低于 1.13
那么,你应该在上面的命令中添加 GO111MODULE=on
。
在 Go 中,我正在尝试简单的数据库连接。我需要导入 gorilla/mux
,但我不能。
我正在使用 VS 代码。 cd
进入我的项目目录后,我创建了 main.go
并做了 运行
go get -u github.com/gorilla/mux
这里是main.go
package main
import (
"database/sql"
"fmt"
"github.com/gorilla/mux"
_ "github.com/lib/pq"
)
const (
host = "localhost"
port = 3000
user = "postgres"
password = "postgres"
dbname = "test1"
)
func main() {
psqlInfo := fmt.Sprintf("host=%s port=%d user=%s "+
"password=%s dbname=%s sslmode=disable",
host, port, user, password, dbname)
db, err := sql.Open("postgres", psqlInfo)
if err != nil {
panic(err)
}
defer db.Close()
err = db.Ping()
if err != nil {
panic(err)
}
fmt.Println("Successfully connected!")
}
[注意,执行后go get -u github.com/gorilla/mux
终端显示
C:\Go\src\github.com\IamFrost\go-rest-api>go get -v -u github.com/gorilla/mux
go: golang.org/x/text upgrade => v0.3.2
go: golang.org/x/crypto upgrade => v0.0.0-20200429183012-4b2356b1ed79
go: golang.org/x/sys upgrade => v0.0.0-20200430082407-1f5687305801
go: golang.org/x/net upgrade => v0.0.0-20200425230154-ff2c4b7c35a0
go: downloading golang.org/x/sys v0.0.0-20200430082407-1f5687305801
golang.org/x/sys/cpu
golang.org/x/crypto/chacha20poly1305
crypto/tls
]
1)imported but not used
但是下一行
2)no package for import github.com/gorilla/mux
)
大声笑这不违背 1) 吗?
有人请解释为什么会这样
然而,
在终端中使用go build
后
这里是终端:
C:\Go\src\github.com\IamFrost\go-rest-api>go build
go: inconsistent vendoring in C:\Go\src:
github.com/gorilla/mux@v1.7.4: is explicitly required in go.mod, but not marked as explicit in vendor/modules.txt
github.com/lib/pq@v1.4.0: is explicitly required in go.mod, but not marked as explicit in vendor/modules.txt
golang.org/x/crypto@v0.0.0-20200429183012-4b2356b1ed79: is explicitly required in go.mod, but not marked as explicit in vendor/modules.txt
golang.org/x/net@v0.0.0-20200425230154-ff2c4b7c35a0: is explicitly required in go.mod, but not marked as explicit in vendor/modules.txt
golang.org/x/sys@v0.0.0-20200430082407-1f5687305801: is explicitly required in go.mod, but not marked as explicit in vendor/modules.txt
golang.org/x/crypto@v0.0.0-20200128174031-69ecbb4d6d5d: is marked as explicit in vendor/modules.txt, but not explicitly required in go.mod
golang.org/x/net@v0.0.0-20191126235420-ef20fe5d7933: is marked as explicit in vendor/modules.txt, but not explicitly required in go.mod
golang.org/x/sys@v0.0.0-20200201011859-915c9c3d4ccf: is marked as explicit in vendor/modules.txt, but not explicitly required in go.mod
run 'go mod vendor' to sync, or use -mod=mod or -mod=readonly to ignore the vendor directory
[注意:我也做了 'go mod vendor',但没有改变]
所以有人指出我为什么不能导入 gorilla/mux
或 pq
。
我还需要做什么?
(请解释一下这是什么意思?is explicitly required in go.mod, but not marked as explicit in vendor/modules.txt
)
我不知道它为什么有效(我是初学者)。我在网上找到了一些东西,不知何故它起作用了。 方法如下:
1)这是我的go目录C:\Go\
。但是我在我的桌面文件夹中创建了项目
2)然后我在C:\Go\src下重新创建了项目 (这是确切的文件夹 C:\Go\src\github.com\[github_username]\[project_name])
3)然后我把所有的代码都贴在了main.go
4) 终于从终端 go mod vendor
5)然后go build
6)然后go run main.go
7)终于成功了
[我想知道它为什么有效。我非常感谢您的评论:关于他们为什么强迫我接受 C:\Go\src
。我已经在环境变量中设置了 GOPATH C:\Go\
, GOBIN C:\Go\bin
]
在 Golang 的最新版本中(我认为是从 1.11 开始),GOPATH 变量发生了变化。我的理解是如果 GOPATH 不是 $HOME/go.
你只需要设置这个Go 在 $HOME/go/src/ 中寻找你的项目,例如我的 Golang 项目在 $Home/go/src/github.com/
如果你想使用项目的不同位置,你仍然可以将 GOPATH 设置到不同的目录。
我的 shell 文件包含以下内容以适应已设置和未设置的 GOPATH。
export PATH="$PATH:$(go env GOPATH)/bin"
获得更多信息这是我为我修复它的方法:
go get ./...
go mod vendor
如果你的 Go 版本低于 1.13
那么,你应该在上面的命令中添加 GO111MODULE=on
。