如何从父目录执行相对导入?

meme/cmd/meme:

import "../../../meme"

这会产生一个模棱两可的错误:

matt@stanley:~/gopath/src/bitbucket.org/anacrolix/meme/cmd/meme$ go get bitbucket.org/anacrolix/meme/cmd/meme

can't load package: /home/matt/gopath/src/bitbucket.org/anacrolix/meme/cmd/meme/main.go:8:2: local import "../../../meme" in non-local package

matt@stanley:~/gopath/src/bitbucket.org/anacrolix/meme/cmd/meme$ echo $GOPATH

/home/matt/gopath

如何从父目录本地导入?

推荐答案

感谢您添加到您的问题中.首先是一个答案,然后是一些解释.我构建你的代码时,

  1. go 拿吧,就像你拿到的一样.(我忽略了错误消息.)
  2. main.go中的导入行设置回"../../../meme",这是您想要做的.
  3. (注释掉包含未使用变量的少量代码.)
  4. 然后在meme/cmd/meme目录中,go run main.gogo build main.go起作用.

早些时候我说go install works是错的;我应该说go 建造.

但是,关键是go build本身不起作用;您必须键入go build main.go.这是因为GO命令不允许"在非本地包中进行本地导入".你说得对,说明书在这里帮不了什么忙.它狡猾地说,"ImportPath的解释依赖于实现."当前的实现行为被设置为CL 5787055,随后在Go-坚果上设置为debated at length.

"本地"指文件系统相对路径.显然是一条相对路径,从..是本地的,所以诀窍就是让go命令也将main作为本地包处理.显然,当你输入go build时它不会这样做,但当你输入go build main.go时它会这样做.

Go相关问答推荐

为什么使用append时Go切片的初始容量会随着int32和int64类型的不同而变化?

我不能让GIO画一个按钮

Golang SDK for DynamoDB:ReturnValuesOnConditionCheckFailure在条件chcek失败发生时不返回条件的详细信息

如何找到一个空闲的TPM句柄来保存新的密钥对对象?

通过 Terraform 中的 MapNestedAtribute 进行迭代

命令行参数在 Golang 程序中不正确地接受为参数

Go test "-run -" 标志执行测试更快

如何将验证器标记添加到嵌套字段

Golang 创建一个带有处理程序的模拟数据库并使用接口调用数据库

如何将 base64 编码的公钥转换为 crypto.PublicKey 或 ecdsa.PublicKey

Go http.FileServer 给出意外的 404 错误

如何在自定义验证函数中获取 struct 名称

从 Makefile 运行时权限被拒绝

在 go 中将运行命令的标准输出发送到其标准输入

Golang BigInt 部门

Go 加密库创建的 PKCS1 公钥与openssl rsa ...之间的区别

Golang:每个键具有多个值的映射

如何在测试中传递用户名和密码等参数

在 go (1.18) 的泛型上实现多态的最佳方法是什么?

如何迭代在泛型函数中传递的片的并集?