V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
ZGLHHH
V2EX  ›  Go 编程语言

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

  •  
  •   ZGLHHH · 2016-07-23 23:47:15 +08:00 · 2181 次点击
    这是一个创建于 3063 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在 Go 语言中,如何 import 上一层目录的 package ?

    以及

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

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


    @Akagi201 main 包是不能 import 的,既然有 cmd ,那上面一层就不应该是 main 包
    lizon
        10
    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)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5122 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 06:45 · PVG 14:45 · LAX 22:45 · JFK 01:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.