不懂就问: go 的导包规则 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
gramyang

不懂就问: go 的导包规则

  •  
  •   gramyang Jul 2, 2019 4646 views
    This topic created in 2493 days ago, the information mentioned may be changed or developed.

    因为对 Java 比较熟悉,所以产生了这个疑问:

    为什么我看到很多开源项目里的代码,同一个项目内的包引用都要 import github 的绝对路径,而不使用项目的根路径呢?

    或者说使用项目根路径有什么弊端?

    开发工具是 goland

    19 replies    2019-07-03 12:38:05 +08:00
    linhongye
        1
    a href="/member/linhongye" class="dark">linhongye  
       Jul 2, 2019 via Android
    如果你想看懂 go,
    为什么不花 30 分钟看个基础呢?
    你光问一个 import 怎么用,你还是看不懂 go 的。
    monsterxx03
        2
    monsterxx03  
       Jul 2, 2019
    用 github 路径可以支持 go get, 项目根路进不行, 有了 go mod 后,我自己的项目都用根路径了.
    Muninn
        4
    Muninn  
       Jul 2, 2019   1
    官方说不推荐相对路径,大家就养成习惯了呗。

    注意这里的相对路径也不是相对于当前文件的,没用 go mod 是相对于 gopath,用了是相对于 mod 文件里声明的 package

    因为 golang 没有中心仓库,package 都在互联网的各处,内网也没办法弄一个 mirror,所以基本没有内网写 golang 的需求。
    gramyang
        5
    gramyang  
    OP
       Jul 2, 2019
    @Muninn 和群里面讨论了一下,我的一点总结:
    因为 go 是没有项目概念的,所有的代码都在 gopath/src 下可以相互引用,相当于 gopath/src 就是一个大项目,但是这样会很麻烦,项目会分不开,所有就有了 gomodule,把项目区分开,区分的方式就是以 go.mod 文件所在目录为项目根目录。

    结论就是:用 go mod 之前,import 最好用绝对路径,而且是 github 开头的路径。用了 go mod 之后,路径随意了,因为有了包的概念。
    misaka19000
        6
    misaka19000  
       Jul 2, 2019
    java 不也是用的绝对路径,项目绝对路径不就保证所有代码不会冲突了吗
    Oktfolio
        7
    Oktfolio  
       Jul 2, 2019
    Java 又不会把所有包都存在一个目录( gopath )
    lazyfighter
        8
    lazyfighter  
       Jul 2, 2019
    java 是 classpath 下面,go 是 gopath 下面,因此本质是一样的
    auin
        9
    auin  
       Jul 2, 2019
    com.github.xx.yy 和 github.com/xx/yy 本质没区别
    shawndev
        10
    shawndev  
       Jul 2, 2019
    因为相对路径在更新项目后可能会失败,也可能机缘巧合的不失败。让错误早点发生就能早点解决。
    shawndev
        11
    shawndev  
       Jul 2, 2019
    另外不一定是 github 绝对路径,比如 b 站开源出现的 go-common 模块。
    tcpdump
        12
    tcpdump  
       Jul 2, 2019
    @gramyang 这点真的很坑,初入的都是懵逼
    littlewing
        13
    littlewing  
       Jul 2, 2019 via iPhone
    请使用 go mod
    maxmin
        14
    maxmin  
       Jul 2, 2019
    一般都是以 go 的 src 的相对路径吧 .
    fuckshit
        15
    fuckshit  
       Jul 2, 2019
    用`go mod`吧,golang 官方出的依赖管理工具。

    mlog.club/topic/9
    ruyuejun
        16
    ruyuejun  
       Jul 2, 2019
    @tcpdump 同感吧,我第一次做的时候也是摸了很久。
    基本上,我所在的 QQ 群,微信群,社区,每天(是每天!)都有这个问题出现,我已经被问的崩溃了,我把我的 github 笔记发出去无数次,无济于事,每天,甚至每小时都会有这个问题的讨论
    linhongye
        17
    linhongye  
       Jul 3, 2019 via Android   1
    @ruyuejun
    友情提醒, 你的 github 连接里多了一个字母 i …
    koebehshian
        18
    koebehshian  
       Jul 3, 2019
    现问是不是,再问为什么。
    ruyuejun
        19
    ruyuejun  
       Jul 3, 2019
    @linhongye 这都看到了,感谢小哥哥.....
    About     Help     Advertise     Blog     API     FAQ     Solana     1170 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 56ms UTC 18:07 PVG 02:07 LAX 11:07 JFK 14:07
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86