在 Go 语言中,如何 import 上一层目录的 package?

2016-07-23 23:47:15 +08:00
 ZGLHHH
在 Go 语言中,如何 import 上一层目录的 package ?

以及

https://github.com/gogits/gogs/blob/master/cmd/web.go 直接通过 import url 的方式引用该项目中的其它 package 的做法,是否推荐使用?
2121 次点击
所在节点    Go 编程语言
10 条回复
realityone
2016-07-23 23:50:01 +08:00
嘛…他就是这么用的
其实也有 relative import
ZGLHHH
2016-07-23 23:54:55 +08:00
@realityone 能否讲的具体一些?
zwh8800
2016-07-23 23:57:16 +08:00
推荐使用完整的包名
realityone
2016-07-23 23:58:28 +08:00
@ZGLHHH 其实就是写你从 gopath 找进去的路径,也就是写全整个路径
Go 也有 relative import ,好像是不推荐?
ZGLHHH
2016-07-24 00:00:37 +08:00
@zwh8800 举个例子?
Comdex
2016-07-24 00:17:42 +08:00
比如在 project path 的 src 目录下有文件夹三层目录为 github.com/Comdex/octopus ,在 octopus 目录下放着名为 octopus 的包,那么只要你把 project path 目录设为 gopath 后,在任何存在于 gopath 路径的 go 源码中都可以用 import "github.com/Comdex/octopus"这样完整的路径进行导入
Akagi201
2016-07-24 11:03:10 +08:00
不能, 我也遇到过这个问题
Akagi201
2016-07-24 11:04:21 +08:00
我之前一个 main 包的 cmd 子包想引用 main 包的 Version 变量 无解.
reus
2016-07-24 13:13:28 +08:00
可以
import foo ".."

不过不要这样做,用绝对路径最好,不然没法 go get


@Akagi201 main 包是不能 import 的,既然有 cmd ,那上面一层就不应该是 main 包
lizon
2016-07-25 10:34:37 +08:00
你看到的是 url ,其实是 go get 下来的包,你去你自己机器的 gopath 路径下的 src 目录下看看就知道,官方不提倡相对路径式的引用,某些情况下会造成歧义,但是既然官方提供了,说明用也没什么问题
相对路径的当路径始终是 gopath 指向的路径,你可以在不同的目录下执行这段代码,来体会一下:
dir, err := filepath.Abs("./")
if err != nil {
fmt.Println(err)
}
fmt.Println(dir)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/294480

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX