Golang Go语言中,如何 import 上一层目录的 package?
在 Go 语言中,如何 import 上一层目录的 package ?
以及
像 https://github.com/gogits/gogs/blob/master/cmd/web.go 直接通过 import url 的方式引用该项目中的其它 package 的做法,是否推荐使用?
Golang Go语言中,如何 import 上一层目录的 package?
更多关于Golang Go语言中,如何 import 上一层目录的 package?的实战教程也可以访问 https://www.itying.com/category-94-b0.html
能否讲的具体一些?
推荐使用完整的包名
其实就是写你从 gopath 找进去的路径,也就是写全整个路径
Go 也有 relative import ,好像是不推荐?
举个例子?
比如在 project path 的 src 目录下有文件夹三层目录为 github.com/Comdex/octopus ,在 octopus 目录下放着名为 octopus 的包,那么只要你把 project path 目录设为 gopath 后,在任何存在于 gopath 路径的 go 源码中都可以用 import "github.com/Comdex/octopus"这样完整的路径进行导入
不能, 我也遇到过这个问题
我之前一个 main 包的 cmd 子包想引用 main 包的 Version 变量 无解.
可以
import foo "…"
不过不要这样做,用绝对路径最好,不然没法 go get
main 包是不能 import 的,既然有 cmd ,那上面一层就不应该是 main 包
你看到的是 url ,其实是 go get 下来的包,你去你自己机器的 gopath 路径下的 src 目录下看看就知道,官方不提倡相对路径式的引用,某些情况下会造成歧义,但是既然官方提供了,说明用也没什么问题
相对路径的当路径始终是 gopath 指向的路径,你可以在不同的目录下执行这段代码,来体会一下:
dir, err := filepath.Abs("./")
if err != nil {
fmt.Println(err)
}
fmt.Println(dir)
在Go语言中,直接通过相对路径导入上一层目录的package并不被推荐,因为这违反了Go的模块化和包管理原则。Go鼓励使用工作区(workspace)和模块(module)来组织代码,并通过go mod
工具进行依赖管理。
然而,如果你确实需要在特定情况下这样做(比如在一个临时项目中),你可以通过调整你的工作目录结构或使用Go的replace
指令在go.mod
文件中来实现类似的效果,但这通常不是最佳实践。
更标准的方法是:
-
重构代码:将需要共享的代码移动到一个公共的包中,这个包可以位于你的项目的根目录或者一个专门的
internal
目录中。 -
使用模块:确保你的项目是一个Go模块(即包含
go.mod
文件),并正确设置模块的路径。然后,你可以在项目的其他部分通过模块路径来导入这个包。 -
环境变量:虽然不常用,但你也可以通过设置
GOPATH
或GOMODULE
环境变量来影响Go的编译和构建过程,但这通常用于特殊场景或解决兼容性问题。
总的来说,遵循Go的模块化设计原则,使用工作区和模块来管理依赖,是处理这类问题的最佳方式。这样做不仅能提高代码的可维护性,还能更好地利用Go的工具链和社区资源。