0

我正在尝试遵循 Thorsten Ball 的用 Go 编写解释器一书,在第一章中他建立了这个简单的方案

file /Users/myuser/projects/monkey/token/token.go
file /Users/myuser/projects/monkey/lexer/lexer.go
file /Users/myuser/projects/monkey/lexer/lexer_test.go

在 lexer/lexer.go 和 lexer/lexer_test.g 文件开始为

package lexer

在 lexer_test.go 中,导入是

import (
    "testing"
    "monkey/token"
)

然后他说为了运行测试,我必须运行(从 /Users/myuser/projects/monkey 目录):

go test lexer/lexer_test.go

但是当我这样做时,我收到错误:

lexer/lexer_test.go:6:2: cannot find package "monkey/token" in any of:
    /usr/local/opt/go/libexec/src/monkey/token (from $GOROOT)
    /Users/myuser/golang/src/monkey/token (from $GOPATH)
FAIL    command-line-arguments [setup failed]
FAIL

我一直在尝试了解如何在 go 中配置包,但是我发现了很多关于 GOPATH、GOROOT 和 go.mod 的非常复杂的文档。我一直在尝试所有这些方法而没有摆脱这个问题。

有人能帮助我吗?我确定这是一个简单的修复,但我无法弄清楚:(

4

2 回答 2

0

正如错误消息所说,编译器在本地找不到包。

你确定你已经安装了这个包?

你可能需要做go get [packagename]

例如,go get golang.org/x/tools/cmd/goimports

于 2021-01-25T06:40:47.653 回答
0

对于 Golang,它会先从 go root 找到包,然后 go path 然后从外部导入。所以基本上,你应该monkey/token在你的 go root 或 go 路径中有那个包。我认为这与 goimport 无关,因为猴子/令牌似乎不是可以导入的官方库。当我第一次尝试 Golang 时,我遇到了同样的问题。我通过在 go 路径(您的工作目录)中创建该包或从您的书中创建该包来解决。

于 2021-01-29T08:08:27.717 回答