Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
go开源项目镜像
GolangCodingTime
提交
fc8641e9
G
GolangCodingTime
项目概览
go开源项目镜像
/
GolangCodingTime
通知
0
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
GolangCodingTime
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
fc8641e9
编写于
3月 26, 2022
作者:
写代码的明哥
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update
上级
9ea64757
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
177 addition
and
0 deletion
+177
-0
README.md
README.md
+1
-0
source/c03/c03_06.md
source/c03/c03_06.md
+80
-0
source/c03/c03_06.rst
source/c03/c03_06.rst
+96
-0
未找到文件。
README.md
浏览文件 @
fc8641e9
...
...
@@ -46,6 +46,7 @@
*
[
3.3 开源发布:如何开源自己写的包给别人用?
](
https://golang.iswbm.com/c03/c03_03.html
)
*
[
3.4 代码规范:Go语言中编码规范
](
https://golang.iswbm.com/c03/c03_04.html
)
*
[
3.5 编译流程:结合 Makefile 简化编译过程
](
https://golang.iswbm.com/c03/c03_05.html
)
*
[
3.6 依赖管理:好用的工作区模式
](
https://golang.iswbm.com/c03/c03_06.html
)
-
**第四章:并发编程**
*
[
4.1 学习 Go 函数:理解 Go 里的函数
](
https://golang.iswbm.com/c04/c04_01.html
)
*
[
4.2 学习 Go 函数:函数类型是什么?
](
https://golang.iswbm.com/c04/c04_02.html
)
...
...
source/c03/c03_06.md
0 → 100644
浏览文件 @
fc8641e9
# 3.6 依赖管理:好用的工作区模式
对我来说,Go1.18 最 "实用" 的功能,应该是 Go 工作区模式,本篇来介绍一下
若要使用 workspace mode,请升级到 Go 1.18 版本再体验。
## 1. 诞生背景
在介绍
**工作区模式**
(workspace mode)之前,先简单地说一下工作区诞生的背景,只有了解了痛点之后,学习一个新的知识点,才更有动力。
我在
`$GOPATH/src`
目录下创建 github.com/iswbm/demo 及 github.com/iswbm/util 两个空的 go 包
![](
https://image.iswbm.com/image-20220322220501276.png
)
然后分别使用 go mod init 来初始化
```
bash
$
cd
github.com/iswbm/demo
$
go mod init github.com/iswbm/demo
$
cd
../util
$
go mod init github.com/iswbm/util
```
并在 demo 中写入 main.go,在 util 写入 util.go ,内容如下
![](
https://image.iswbm.com/image-20220322221831959.png
)
我们都知道,正常 Go 项目中引用的包,都需要在对应代码托管网站上有该包,才能编译及运行。
但如果 demo 引用 util 项目的包,而 util 本身也还在自己的本地上开发,并没有上传到 github,那么 demo 包在调试过程中肯定是无法找到 util 包的。
在没有工作区的情况下(也即 Go 1.18 之前),可以通过在 go.mod 中使用 replace 来重定向
```
module github.com/iswbm/demo
go 1.17
require github.com/iswbm/util v1.0.0
replace github.com/iswbm/util => ../util
```
修改完 go.mod 后,运行正常输出
![](
https://image.iswbm.com/image-20220322222603718.png
)
可使用 replace 存在两个问题:
-
replace 本身编辑就比较麻烦,我一直是手动编辑的
-
开发完成后,还要记得将 replace 删除,并执行 go mod tidy ,否则别人就无法使用
## 2. 工作区模式
Go 1.18 提供的工作区模式,就可以优雅的解决如上出现的问题。
上面我使用的是 go 1.17 初始化的项目,现在要用 go 1.18 的工作区模式,因此先将 go.mod 里的 go 版本改为 go 1.18,并都所有的依赖全部删除。
![](
https://image.iswbm.com/image-20220322223743922.png
)
然后退回到
`$GOPATH/src`
目录,执行如下命令创建工作区文件 go.work
```
go18 work init github.com/iswbm/demo github.com/iswbm/util
```
创建的 go.work 文件如下所示
![](
https://image.iswbm.com/image-20220322223259439.png
)
然后无论我在哪个目录下,只要所在位置的父级目录有 go.work 文件,即处于该工作区内,go 的编译器都会自动引用本地的 util 包
![](
https://image.iswbm.com/image-20220322223533042.png
)
## 3. 写在最后
有了工作区模式,将使整个开发流程更加流畅,个人认为这可能是 go1.18 最为实用的功能,强烈推荐大家使用起来~
另外 go.work 文件是工作区的标志,该文件不用上传至 github,只用于本地开发测试使用。
source/c03/c03_06.rst
0 → 100644
浏览文件 @
fc8641e9
3.6 依赖管理:好用的工作区模式
==============================
对我来说,Go1.18 最 “实用” 的功能,应该是 Go 工作区模式,本篇来介绍一下
若要使用 workspace mode,请升级到 Go 1.18 版本再体验。
1. 诞生背景
-----------
在介绍 **工作区模式** (workspace
mode)之前,先简单地说一下工作区诞生的背景,只有了解了痛点之后,学习一个新的知识点,才更有动力。
我在 ``$GOPATH/src`` 目录下创建 github.com/iswbm/demo 及
github.com/iswbm/util 两个空的 go 包
.. image:: https://image.iswbm.com/image-20220322220501276.png
然后分别使用 go mod init 来初始化
.. code:: bash
$ cd github.com/iswbm/demo
$ go mod init github.com/iswbm/demo
$ cd ../util
$ go mod init github.com/iswbm/util
并在 demo 中写入 main.go,在 util 写入 util.go ,内容如下
.. image:: https://image.iswbm.com/image-20220322221831959.png
我们都知道,正常 Go
项目中引用的包,都需要在对应代码托管网站上有该包,才能编译及运行。
但如果 demo 引用 util 项目的包,而 util
本身也还在自己的本地上开发,并没有上传到 github,那么 demo
包在调试过程中肯定是无法找到 util 包的。
在没有工作区的情况下(也即 Go 1.18 之前),可以通过在 go.mod 中使用
replace 来重定向
::
module github.com/iswbm/demo
go 1.17
require github.com/iswbm/util v1.0.0
replace github.com/iswbm/util => ../util
修改完 go.mod 后,运行正常输出
.. image:: https://image.iswbm.com/image-20220322222603718.png
可使用 replace 存在两个问题:
- replace 本身编辑就比较麻烦,我一直是手动编辑的
- 开发完成后,还要记得将 replace 删除,并执行 go mod tidy
,否则别人就无法使用
2. 工作区模式
-------------
Go 1.18 提供的工作区模式,就可以优雅的解决如上出现的问题。
上面我使用的是 go 1.17 初始化的项目,现在要用 go 1.18
的工作区模式,因此先将 go.mod 里的 go 版本改为 go
1.18,并都所有的依赖全部删除。
.. image:: https://image.iswbm.com/image-20220322223743922.png
然后退回到 ``$GOPATH/src`` 目录,执行如下命令创建工作区文件 go.work
::
go18 work init github.com/iswbm/demo github.com/iswbm/util
创建的 go.work 文件如下所示
.. image:: https://image.iswbm.com/image-20220322223259439.png
然后无论我在哪个目录下,只要所在位置的父级目录有 go.work
文件,即处于该工作区内,go 的编译器都会自动引用本地的 util 包
.. image:: https://image.iswbm.com/image-20220322223533042.png
3. 写在最后
-----------
有了工作区模式,将使整个开发流程更加流畅,个人认为这可能是 go1.18
最为实用的功能,强烈推荐大家使用起来~
另外 go.work 文件是工作区的标志,该文件不用上传至
github,只用于本地开发测试使用。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录