不懂就问: go 的导包规则 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
gramyang
V2EX    Go 编程语言

不懂就问: go 的导包规则

  gramyang 2019-07-02 10:04:11 +08:00 4509 次点击
这是一个创建于 2367 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

开发工具是 goland

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

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

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

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

mlog.club/topic/9
ruyuejun
    16
ruyuejun  
   2019-07-02 13:27:34 +08:00
@tcpdump 同感吧,我第一次做的时候也是摸了很久。
基本上,我所在的 QQ 群,微信群,社区,每天(是每天!)都有这个问题出现,我已经被问的崩溃了,我把我的 github 笔记发出去无数次,无济于事,每天,甚至每小时都会有这个问题的讨论
linhongye
    17
linhongye  
   2019-07-03 03:36:21 +08:00 via Android   1
@ruyuejun
友情提醒, 你的 github 连接里多了一个字母 i …
koebehshian
    18
koebehshian  
   2019-07-03 09:10:42 +08:00
现问是不是,再问为什么。
ruyuejun
    19
ruyuejun  
   2019-07-03 12:38:05 +08:00
@linhongye 这都看到了,感谢小哥哥.....
关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1294 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 32ms UTC 17:18 PVG 01:18 LAX 09:18 JFK 12:18
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