go 1.18 开始支持工作区模式,主要解决对go mod依赖包的开发管理

假如我的项目依赖了这两个包

go.mod

1

2

3

4

5

6

7

8

module mypkg

go 1.18

require (

    github.com/davecgh/go-spew v1.1.1 // indirect

    github.com/spf13/cast v1.5.0 // indirect

)

此时我发现cast包有bug或者需要对cast包加入新功能,那我就需要对cast包进行开发,在1.18前对依赖包进行开发调试是很麻烦的

从1.18后就可以go work进行开发调试了, 具体步骤如下

我当前的代码

go.main

1

2

3

4

5

6

7

8

9

10

11

12

package main

import (

    "github.com/davecgh/go-spew/spew"

    "github.com/spf13/cast"

)

func main() {

    spew.Dump("1")

    spew.Dump(cast.ToBool("1"))

}

  

当前的目录结构

1

2

3

4

mypkg

├── go.mod

├── go.sum

└── main.go

  

此时运行 go run main 输出

1

2

(string) (len=1) "1"

(bool) true

  

此时我们需要带cast包的ToBool进行开发调试

我们需要去到当前目录的上一级

创建目录 workmod(这一步可要可不要,只要一会儿指定的目录对就行,只要这个目录不要放在mypkg里面就行)

然后进入workmod下

1

git clone https://github.com/spf13/cast.git

  

然后进入到workmod和mypkg的父级目录

1

go work init ./mypkg ./workmod/cast

  

此时项目结构变成

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

.

├── go.work

├── mypkg

│   ├── go.mod

│   ├── go.sum

│   └── main.go

└── workmod

    └── cast

        ├── LICENSE

        ├── Makefile

        ├── README.md

        ├── cast.go

        ├── cast_test.go

        ├── caste.go

        ├── go.mod

        ├── go.sum

        └── timeformattype_string.go

  

我们的代码在mypkg中,需要开发的第三方依赖在workmod中,我们可以把所有需要开发的依赖都放在workmod下,然后加入到go.work中进行开发调试

此时我们修改workmod/cast/cast.go 中的CastToBool方法

1

2

3

4

5

6

// ToBool casts an interface to a bool type.

func ToBool(i interface{}) bool {

    fmt.Println("in go work")

    v, _ := ToBoolE(i)

    return v

}

  

然后再进入mypkg中运行 go run main 输出

1

2

3

(string) (len=1) "1"

in go work

(bool) true

  

此时我们对cast的依赖就成了本地这个文件了,对 go-spew等其他依赖保持不变

上面的流程已经满足大部分需求了, go work还有其他的一些命令,具体可以用help查看,

1

2

3

4

5

6

7

8

9

10

11

12

13

14

go help work

Usage:

        go work <command> [arguments]

The commands are:

        edit        edit go.work from tools or scripts

        init        initialize workspace file

        sync        sync workspace build list to modules

        use         add modules to workspace file

Use "go help work <command>" for more information about a command.

go work 工作区相关推荐

  1. Go 学习笔记(2)— 安装目录、工作区、源码文件和标准命令

    GOROOT: Go 语言安装根目录的路径,也就是 GO 语言的安装路径. GOPATH: 若干工作区目录的路径.是我们自己定义的工作空间.在 Go Module 模式之前非常重要,现在基本上用来存放 ...

  2. [原创]用命令行工具删除TFS2010服务器上的工作区信息

    下面的示例显示有关所有计算机上的所有用户已在地址 http://myserver:8080/tfs/DefaultCollection 上的以下团队项目集合中创建的所有工作区的列表. c:\proje ...

  3. git工作区、暂存区和仓库区

    git工作区.暂存区和仓库区 工作区 对于添加.修改.删除文件的操作,都发生在工作区中 暂存区 暂存区指将工作区中的操作完成小阶段的存储,是版本库的一部分 仓库区 仓库区表示个人开发的一个小阶段的完成 ...

  4. Ubuntu14.04 工作区设置

    记ubuntu您可以切换工作区,但我按住 Ctrl+Alt+方向键 交换器,有没有反应,在这样的使用切换啊. 原来Ubuntu14.04默认并没有开启,仅仅须要设置一下就OK了. 1.打开系统设置.外 ...

  5. git 工作区和暂存区

    Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念. 先来看名词解释. 工作区(Working Directory) 就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工 ...

  6. Git的工作区与暂存区

    Git与其他版本控制系统如SVN的一个不同之处就是暂存区的概念 工作区(Wroking Directory):就是电脑中能看到的目录. 版本库(Repository):工作区的隐藏目录 .git 这个 ...

  7. matlab变量区表示函数,MATLAB中的工作区,变量和函数

    本文概述 工作空间 工作区包含我们在MATLAB中工作时创建的所有变量. 每当我们为变量分配值时, 它都会自动在工作空间中获取空间. 关闭环境后, 工作空间变量将消失, 因此请将这些变量保存在文件中以 ...

  8. Git中的工作区(Working Directory)、暂存区(stage)和历史记录区(history)

    今天和git搏斗了一下午,发现了修改的文件一直commit不了.网上查了一下才发现原来git的模型里还有工作区和暂存区的说法. 工作区:在git管理下的正常目录都算是工作区.我们平时的编辑工作都是在工 ...

  9. 使用Metasploit工作区

    使用Metasploit工作区 Metasploit将所有数据都存储在PostgeSQL服务器中的msf数据库.渗透测试人员经常要使用Metasploit同时执行多个任务.为了避免数据混杂,Metas ...

  10. MOS管安全工作区SOA

    注:内容转自 广州致远电子有限公司<如何确保MOS管工作在安全区> 一.引出 开关器件长期工作于高电压大电流状态,承受着很大的功耗,一但过压或过流就会导致功耗大增,晶圆结温急剧上升,如果散 ...

最新文章

  1. linux内核参数注释与优化
  2. Powershell指令集_2
  3. AutoCAD 2011、Map 3D 2011, Civil 3D 2011命令行中不能输入中文的修复补丁
  4. html5 css3炫酷效果,28种纯CSS3炫酷loading加载动画特效
  5. Linux安装Ncurses库
  6. linux 内核设备管理模型sysfs(进阶篇)
  7. 史上最全的ECharts讲解与使用
  8. Mybatis框架简单使用
  9. 【Cinemachine智能相机教程】VirtualCamera(四):Noise属性
  10. EntityFramework中IEnumerable和IQueryable的含义和区别
  11. 三极管之——PNP与NPN
  12. 【秘密】我经历过的币圈天使融资,了解一下
  13. python手把手安装_小白手把手搭建python开发环境
  14. 使用Java处理键盘输入(DTMF)
  15. linux 线程tid,关于linux:PID和TID之间的区别
  16. Oracle如何切换session,oracle修改process和session数
  17. PS创建选区的工具-----快速选择和魔棒
  18. 树莓派使用360wifi2实现无线上网
  19. Android 第三方RoundedImageView设置各种圆形、方形头像
  20. 微信新版 公众号隐藏导航条

热门文章

  1. [Linux字符驱动] DIDO 74HC595实现遥控遥信功能
  2. 软件漏洞及缓冲区溢出
  3. 分布式-Java应用
  4. 如何记住OSI七层协议模型,脑洞大开有木有?
  5. 一篇文章详细介绍什么是回调地狱
  6. 网络工程师面试题(面试必看)(3)
  7. java(jsp技术)
  8. 【学习笔记】人工智能导论
  9. vmware 桥接模式设置桥接到无线网卡
  10. 【WhaleCTF逆向题】Warmup题目writeup