【问题标题】:How to config a simple Go project如何配置一个简单的 Go 项目
【发布时间】:2021-01-24 14:47:06
【问题描述】:

我正在尝试遵循 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 的非常复杂的文档。我一直在尝试所有这些方法,但没有解决这个问题。

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

【问题讨论】:

  • go 工具适用于包,不要尝试构建和测试单个文件。
  • 按照How to Write Go Code中的步骤操作。
  • 我正在按照书中的说明进行操作。而且书上说的很清楚:go test lexer/lexer_test.go

标签: go configuration gopath


【解决方案1】:

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

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

你可能需要go get [packagename]

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

【讨论】:

  • 这个包是我正在写的(按照书上的说明)。问题是go找不到他,那是我想不通的。
  • 抱歉,没有正确理解问题。 'token' 是 'monkey' 项目中的一个包吗?如果是这样,请删除 go.mod 并使用 go mod init monkey 重新初始化。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-25
    • 2019-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多