这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天
一个好的语言需要有良好的生态, 其中就包括活跃的开发者和强大好用的第三方包. 让全世界的人都能用到优秀先辈开发的包是很重要的事.
Java的包管理
本人有过浅薄的使用Java的经历, Java的包管理工具是Maven或者Gradle, 对于maven来说, 个人觉得其已经发展的十分完善.
Java中的第三方包大多是以jar文档形式存在, 使用maven和对应的maven命令可以快捷的将中心仓库的jar包引入本地使用. 在世界上最好的Java IDE--IntelliJ IDEA中更是集成了强大的Maven插件, 简单点几下就可以实现maven的刷新/编译/清空.
在Java的杀手框架SpringBoot中, 可以利用pom.xml来配置maven引入依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
写入pom之后, 只需要点击IDEA的刷新依赖按钮即可自动引入.
Golang的包管理
- 我的疑惑
首先是我的疑惑, 在Goland中, 如果你裸奔新建一个文件夹, 然后随便放了几个文件, 那么他们的package声明都是main. 这意味着每一个文件都可以独立运行.
但是如果你新建了两个文件夹, 分别写了包声明, 然后在一个文件夹里试图引入另一个, 则Goland给你自动补全提示, 但是tab后却报错了.
原因很简单, 我写的根本不是一个项目, 缺少gomod声明.
- Go包管理发展史
①GOPATH: 在最初的版本, GOROOT代表Go源码的位置, GOPATH则是开发时用到的路径. 第三方包需要手动下载到$GOPATH/src
②Go Vender
③Go Mod: 引入一个go.mod文件管理所有包依赖, go run命令自动找包
① 依赖包在哪?
$GOPATH/pkg/mod
② 项目可以放在$GOPATH/src下吗?
可以。 但是go会根据GO111MODULE的值而采取不同的处理方式 默认情况下,
GO111MODULE=auto自动模式①auto 自动模式下,项目在
$GOPATH/src里会使用$GOPATH/src的依赖包,在$GOPATH/src外,就使用go.mod 里 require的包②on 开启模式,1.12后,无论在
$GOPATH/src里还是在外面,都会使用go.mod 里 require的包③off 关闭模式,就是老规矩。
③ 依赖包失效怎么办?
replace golang.org/x/text => github.com/golang/text latest
这样,go会用 github.com/golang/text替代golang.org/x/text,原理就是下载github.com/golang/text 的最新版本到 $GOPATH/pkg/mod/golang.org/x/text下。
参考视频: 第五届青训营后端基础班掘金录播课