找不到包“rsc.io/quote”

问题描述 投票:0回答:6

我正在按照教程(https://golang.org/doc/tutorial/getting-started)开始使用 Go,但我已经遇到了问题。当我运行以下代码时:

package main

import "fmt"

import "rsc.io/quote"

func main() {
    fmt.Println(quote.Go())
}

我在控制台中收到以下错误消息:

C:\Users\myname\Documents\Work\GO\hello>go run hello.go
hello.go:7:8: cannot find package "rsc.io/quote" in any of:
        C:\Program Files\Go\src\rsc.io\quote (from $GOROOT)
        C:\Users\myname\go\src\rsc.io\quote (from $GOPATH)

我猜这是我安装 Go 的方式/位置的问题,有人可以解释一下吗?

谢谢

go go-modules
6个回答
45
投票

具有模块支持的

go
工具会自动下载并安装依赖项。但要使其工作,您必须初始化模块。

仅将源代码保存在

.go
文件中并使用
go run hello.go
运行是不够的,还必须存在
go.mod
文件。

要初始化模块,请按照教程中的说明进行操作:

go mod init hello

输出应该是:

go: creating new go.mod: module hello
go: to add module requirements and sums:
        go mod tidy

从 go 1.16 开始,你还必须运行

go mod tidy

它将自动下载

rsc.io/quote
包:

go: finding module for package rsc.io/quote
go: found rsc.io/quote in rsc.io/quote v1.5.2

所以接下来运行

go run hello.go

将输出:

Don't communicate by sharing memory, share memory by communicating.

1
投票

在命令提示符下运行此命令:

go mod tidy

之后执行您的代码:

go run file_name.go

file_name.go
替换为您的 go 文件示例:

go run hello.go


0
投票

icza 的答案很完美,尽管我想添加一个小小的建议。表演,

go mod tidy
如果您已经有

go.mod file

,则安装程序中缺少的软件包。它只是确保当前程序中的所有导入都得到满足。因此,每当你导入一个新包并且错误提示找不到模块时,不要犯为程序创建一个全新目录然后用 
go mod init
 初始化它的菜鸟错误,相反,运行上面的命令,你应该很好去


0
投票
对于任何使用 VSCode 或其他自动 lints 的人

  1. 我添加了

    import "rsc.io/quote"

    
    

  2. 我还没有使用过

    quote.Go()

    
    

  3. 文件保存时,linter 删除了导入。

  4. Go mod tidy 没有任何事可做,所以当我重新输入它时,它仍然被标记为损坏。

我想我更愿意在实际编码对包的任何调用之前检查是否可以导入包。我无法想象任何其他默认情况下表现如此的 linter。

初学者(Go 的目标人群)可能也没有想到这一点。 当然,初学者可以完全按照教程步骤进行操作,而不是尝试导入包并且在保存文件之前不使用它! :-)


0
投票
我在 1.22.2 版本中遇到了同样的问题,只需转到您的路径(cmd)并使用此命令:

`go get rsc.io/quote`
    

-1
投票
2021/6/3 go版本go1.16.4 linux/amd64

root@zqf-vm:/workspace/go_workspace/hello# go mod init hello go: creating new go.mod: module hello go: to add module requirements and sums: go mod tidy root@zqf-vm:/workspace/go_workspace/hello# go run hello.go hello.go:6:2: no required module provides package rsc.io/quote; to add it: go get rsc.io/quote root@zqf-vm:/workspace/go_workspace/hello# go mod init hello go: /workspace/go_workspace/hello/go.mod already exists root@zqf-vm:/workspace/go_workspace/hello# go run hello.go hello.go:6:2: no required module provides package rsc.io/quote; to add it: go get rsc.io/quote root@zqf-vm:/workspace/go_workspace/hello# go mod tidy go: finding module for package rsc.io/quote go: downloading rsc.io/quote v1.5.2 go: found rsc.io/quote in rsc.io/quote v1.5.2 go: downloading rsc.io/sampler v1.3.0 go: downloading golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c root@zqf-vm:/workspace/go_workspace/hello# go run hello.go Don't communicate by sharing memory, share memory by communicating.
    
© www.soinside.com 2019 - 2024. All rights reserved.