范文健康探索娱乐情感热点
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

Go1。18新特性多模块工作区教程

  导读
  • 随着 2022 年 3 月 15 日 go 1.18 正式发布,新版本除了对性能的提升之外,还引入了很多新功能,其中就有 go 期盼已久的功能泛型(Generics),同时还引入的多模块工作区(Workspaces)和模糊测试(Fuzzing)。
  • 关于泛型网上已经有很多介绍的教程了,这里我介绍一个实用的功能,多模块工作区的使用方法和教程。
  • Go 多模块工作区能够使开发者能够更容易地同时处理多个模块的工作,如:
  方便进行依赖的代码调试(打断点、修改代码)、排查依赖代码 bug
  方便同时进行多个仓库/模块并行开发调试 目录
  •  多模块工作区
  •  开发流程演示
  •  总结
  •  参考文献
  多模块工作区说明
  • go 使用的是多模块工作区,可以让开发者更容易同时处理多个模块的开发。在 Go 1.17 之前,只能使用  go.mod replace   指令来实现,如果你正巧是同时进行多个模块的开发,使用它可能是很痛苦的。每次当你想要提交代码的时候,都不得不删除掉 go.mod  中的 replace   才能使模块稳定的发布版本。•在使用 go 1.18 多模块工作区功能的时候,就使用这项工作变得简单容易处理。下面我来介绍怎么使用这一功能。• Go 多模块工作区文档、代码示例[5] 使用条件
  • 首先 我们需要 go 1.18 或更高版本  go 安装[6] # 查看 go 版本 > go version go version go1.18 darwin/amd64 go work支持命令
  • 通常情况下,建议不要提交  go.work  文件到 git 上,因为它主要用于本地代码开发。
  • 推荐在:  $GOPATH   路径下执行,生成 go.work  文件
  •  go work init   初始化工作区文件,用于生成 go.work  工作区文件
  初始化并写入一个新的 go.work 到当前路径下,可以指定需要添加的代码模块
  示例: go work init ./hello 将本地仓库 hello 添加到工作区
  hello 仓库必须是 go mod 依赖管理的仓库(./hello/go.mod 文件必须存在)
  •  go work use   添加新的模块到工作区
  命令示例:
  go work use ./example   添加一个模块到工作区
  go work use ./example ./example1   添加多个模块到工作区
  go work use -r ./example   递归 ./example  目录到当前工作区
  删除命令使用 go work edit -dropuse=./example   功能
  •  go work edit   用于编辑 go.work  文件
  可以使用  edit   命令编辑和手动编辑 go.work   文件效果是相同的 示例:
  go work edit -fmt go.work   重新格式化 go.work  文件
  go work edit -replace=github.com/link1st/example=./example go.work   替换代码模块
  go work edit -dropreplace=github.com/link1st/example   删除替换代码模块
  go work edit -use=./example go.work   添加新的模块到工作区
  go work edit -dropuse=./example go.work   从工作区中删除模块
  •  go work sync   将工作区的构建列表同步到工作区的模块
  •  go env GOWORK
  查看环境变量,查看当前工作区文件路径 可以排查工作区文件是否设置正确, go.work  路径找不到可以使用 GOWORK 指定> go env GOWORK $GOPATH/src/link1st/link1st/workspaces/go.work go.work文件结构
  • 文件结构和  go.mod  文件结构类似,支持 Go 版本号、指定工作区和需要替换的仓库•文件结构示例: go 1.18  use (     ./hello     ./example )  replace (     github.com/link1st/example => ./example1 )  use指定使用的模块目录
  • 可以使用  go work use hello   添加模块,也可以手动修改 go.work  工作区添加新的模块•在工作区中添加了模块路径,编译的时候会自动使用  use  中的本地代码进行代码编译,和 replaces   功能类似。# 单模块结构 use ./hello  # 多模块结构 use (     ./hello     ./example ) replaces替换依赖仓库地址
  •  replaces   命令与 go.mod  指令相同,用于替换项目中依赖的仓库地址•需要注意的是  replaces   和 use   不能同时指定相同的本地路径
  同时指定报错信息:
  go: workspace module github.com/link1st/example is replaced at all versions in the go.work file. To fix, remove the replacement from the go.work file or specify the version at which to replace the module.
  • 错误示例
  同时在  use   和 replace   指定相同的本地路径go 1.18  use (     ./hello     ./example )  replace (     github.com/link1st/example => ./example )  go.work文件优先级高于go.mod中定义
  • 在同时使用  go.work  和 go.mod  replace   功能的的时候分别指定不同的代码仓库路径,go.work  优先级高于 go.mod  中定义
  go.mod  中定义替换为本地仓库 example replace (     github.com/link1st/example => ./example1 )
  go.work  中定义替换为本地仓库 example1 replace (     github.com/link1st/example => ./example1 )
  • 在代码构建时候使用的是  go.work  指定的 example1  仓库的代码,go.work  优先级别更高如何使用
  • 在 Go 1.18  go run   和 go build   都会默认使用工作区功能• GOWORK   也可以指定配置 go.work  文件位置export GOWORK="~/go/src/test/go.18/workspace/go.work" 如何禁用工作区
  • Go 全局变量  GOWORK   设置 off   则可以禁用工作区功能
  export GOWORK=off  开发流程演示
  • 演示如何使用多模块工作区功能。在现在微服务盛行的年代,一个人会维护多个代码仓库,很多的时候是多个仓库进行同时开发
  • 假设我们现在进行  hello  仓库开发,实现的功能是,实现将输入的字符串反转并输出,字符串反转功能依赖于 github.com/link1st/example  (下文统称 example )公共仓库实现
  • 新建  hello  项目mkdir hello cd hello # 代码仓库启动 go mod 依赖管理,生成 go.mod 文件 go mod init github.com/link1st/link1st/workspaces/hello # 下载依赖包 go get github.com/link1st/example # 编写 main 文件 vim main.go
  •  main.go  代码// Package main main 文件,go 多模块工作区演示代码 // 实现将输入的字符串反转输出并输出 package main  import (     "flag"     "fmt"      "github.com/link1st/example/stringutil" )  var (     str = "" )  func init() {     flag.StringVar(&str, "str", str, "输入字符")     flag.Parse() }  func main() {     if str == "" {         fmt.Println("示例: go run main.go -str hello")         fmt.Println("str 参数必填")         flag.Usage()         return     }      // 调用公共仓库,进行字符串反转     str = stringutil.Reversal(str)     // 输出反转后的字符串     fmt.Println(str)     return }
  • 运行代码  go run main.go -str "hello world"   或 go run github.com/link1st/link1st/workspaces/hello -str "hello world"   可以看到输出了 hello world  反转以后的字符串> go run main.go -str "hello world" dlrow olleh
  • 到这里,最初的功能已经完成,但是后续需求变动,不仅需要输出反转以后的字符串,还需要将字符串大写
  • 我们则需要去  example  仓库中添加开发 将字符串大写的功能 # 回到工作根目录,将 common 代码下载到本地进行添加新的功能 # 下载依赖的 example 包 git clone git@github.com:link1st/example.git # 在 example 包中添加 字符串大学的功能
  •  vim example/stringutil/to_upper.go  代码如下// Package stringutil stringutil package stringutil  import (     "unicode" )  // ToUpper 将字符串进行大写 func ToUpper(s string) string {     r := []rune(s)     for i := range r {         r[i] = unicode.ToUpper(r[i])     }     return string(r) }
  • 由于代码还在本地调试,未提交 git 仓库中,这个时候就需要用到 Go 多模块工作区的功能了。
  • 进入项目根目录,初始化我们现在正在开发的模块 # 初始化 go.work 文件 go work init  ./hello ./example # 查看 go.work 文件内容 cat go.work
  • 文件结构如下 go 1.18  use (     ./example     ./hello )
  • 回到  hello  项目,vim main.go   将字符串大写的功能添加上。func main() {     ...      // 调用公共仓库,进行字符串反转     str = stringutil.Reversal(str)     // 增加字符大写的功能     str = stringutil.ToUpper(str)     // 输出反转后的字符串     fmt.Println(str)      ... }
  • 运行代码
  可以看到输出了反转并  大写  的字符串,大写的函数功能只在本地,未提交到 git 上,这样我们就实现了可以同时在两个模块上并行开发go run main.go -str "hello world" DLROW OLLEH
  • 到这里,演示的代码已经全部完成 总结
  • 使用 Go 多模块工作区的功能,可以让我们轻松在多个模块之间切换工作,更能适应现代微服务架构开发。 参考文献
  [1] Go 1.18 新特性多模块工作区教程:  https://github.com/link1st/link1st/tree/master/workspaces
  [2] Go 1.18 is released!:  https://go.dev/blog/go1.18
  [3] Tutorial: Getting started with multi-module workspaces:  https://go.dev/doc/tutorial/workspaces
  [4] go-1.18-features:  https://sebastian-holstein.de/post/2021-11-08-go-1.18-features/

买高刷新率屏幕手机有必要吗?既然说到屏幕刷新率,那我们就不得不提刷新率到底是个什么东西了。刷新率就是指电子束对屏幕上的图像重复扫描的次数。就像大家小时候都看过的手翻书一样,其实人眼看到的视频是由一张张变化很小比特币消失还有多久?最少还要10年才能消失。原因是2009年世界上产生了第一个比特币,到今天整整12岁。2010年比特币以0。1美分的价格上市,到今天56万倍涨幅,如果之前6万多美金的价格是最高点。从为什么美国到现在还在大面积使用木头电线杆?这样的问题确实人好笑,一般的木材使用年限大部分是可以超过百年的,而混凝土结构的电线杆子就很难说了,至于美国人为什么大量的使用木头电线杆子,是由于美国的木材非常丰富,也就是价格低廉,有人说太阳光到地球需约8分钟,人走一步大概要0。5秒,若有个巨大生物走一步距离相当于日地距离,你觉得是否会超光速,你怎么看?你都这么假设了,还不超光速显然对不起你啊。平常一步也就不到一秒钟,不到一秒钟的时间走了一个天文单位(地球到太阳间的平均距离,约1。5亿公里),原本太阳光光速需要约八分二十秒钟,你这为什么霍金和刘慈欣都建议我们,不要回复外星人?这其实是他们对于外星人文明形式的一种判断外星人存在么?首先,我们现在确实没有办法证明外星人存在,最起码应该说是没有确实的证据。不过,根据宇宙学原理,人类发现其实地球在宇宙当中一点都在国内华为的鸿蒙系统能否在10年内替换Windows系统?不要说中国国内,在全世界范围内,连微软自己也不敢确认Windows系统能不能再战10年!毕竟,Windows系统是与X86体系荣辱与共的一种操作系统,其成功是基于X86的大卖,一统最新手机性价比排名公布,小米独占前两名,华为成最大赢家很多人或许会觉得,性价比这个词是专为那些价格便宜的手机设计的,那些售价四五千的旗舰手机根本没有性价比可言。但事实并非如此,其实那些卖得贵的手机当中,依旧不乏高性价比的手机。图片来源华为nova9将要发布,不支持5G网络与麒麟芯片,你还会选择使用吗华为nova9新机可能在9月23日正式发布,但该机可能不会支持5G网络,也不会搭载华为自主研发的麒麟系列处理器,而是搭载高通骁龙778g芯片,那么对于华为手机的忠实用户们,你们还会XMEX一群猪做的杀猪盘币圈刮起一股客损邪气。根本原因是,传统杀猪盘诈骗者盯上了区块链的优势,打造了一系列的杀猪盘式交易所。利用用户对暴富的渴望,诈骗者通过操纵行情软件,恶意收割客户,从而将客户的损失收入核心技术员离职后,中芯国际董事长也突然辞职,年薪近700万中芯国际是国内大陆规模最大和技术最先进的芯片制造商,一直被很多人视为促进国产芯片崛起的主要助力,因此其一举一动也备受国人关注。而就在9月3日这一天,核心技术员离职后,年薪近700万红米Note11Pro已在备货,6000mAh256G,还是1599起红米作为小米的子品牌,在小米产品线中是不可缺少的一环,小米手机能拿到全球第二的市场占有率,其中很大一部分都是来自红米的机型。红米畅销的原因主要是在同等价位上,给到更高的配置或者更低
汽车界传来三个好消息!个个令人激动不已,来看看科技进步有多快很多人可能对科技进步没有直观的概念,火星探测能量光子基因转移等前沿科技正潜移默化地改变人们的生活。而对于汽车行业,同样也是如此,比如,下面所要介绍的内容,是关于汽车界所传来的三个好海水又咸又苦不能喝!海洋生物能直接饮用海水,不受生命威胁吗?对于地球上的生物来说,水是货真价实的生命之源。就拿人类自己来说,我们身体中百分之七十以上都是水,每天也需要通过进食和直接饮用的方式获取大量水分,否则就会对身体造成伤害。人体可以承受新开的手机号被注册了?联通推出账号清理服务,一键解决烦恼近几日,中国联通推出互联网账号清理服务,可以帮用户迅速解决手机号被注册的问题。相信很多小伙伴有过和小编一样的经历,那就是用新开的手机号注册账号时,发现手机号已被注册。这主要是因为手单链表逆序(用三个指针)需求描述使用第三指针实现单链表逆序typedefstructLinkNodeintvalstructLinkNodenextLinkNode创建单链表voidcreatLinkLi4900万年前,红萍曾冰封地球,如今能再次现身拯救人类吗?随着人类科技的逐渐发展,工业化科技化的现代社会极度依赖煤炭石油等石化资源的燃烧所产生的能源,再加之汽车尾气助纣为虐,整个人类社会都在向地球不断地制造排放二氧化碳。这些二氧化碳使得地南非科学家称奥密克戎的BA。2亚种迅速传播或再次引发感染高峰南非一位顶级科学家表示,被称为BA。2的omicron变异毒株亚种正在南非迅速传播,并可能在当前的这一波疫情浪潮中造成第二次感染高峰。研究显示BA。2似乎比最初的omicron变种京东老板刘强东把女儿宠成公主,儿子却是他一生的痛少爷,生日快乐,好运常伴。电商大佬刘强东的妻子,曾在社交账号发出祝福,而她和刘强东却并没有儿子。网上有段子,就是关于几个大佬的,例如后悔创业杰克马,不知妻美刘强东。这说的是马云曾经又一款值得买的老人机?红米Note9Pro大容量高配版不到1300元关于给老人买手机这件事,评价君此前推荐了几款产品,从评论中也能看出不少小伙伴都非常有选购经验。比如大音量大容量加上价格便宜,往往就能满足很长时间里的使用需求,而选择这样的产品,一些python并发编程一进程python也可以并发编程,常见实现方式有3种进程线程协程,这一篇我们说说在linux操作系统下python怎么创建进程。进程创建后一般有两种执行方式,一种是与父进程共享代码继续执辽宁省通信行业实现十四五良好开局沈阳日报沈报全媒体高级记者刘洋1月30日记者从辽宁省通信管理局获悉,2021年,辽宁省通信业发展质量进一步提升,5G千兆光网等新型信息基础设施建设覆盖和应用普及全面加速,移动互联网法拉第未来特别委员会称做空报告不实,贾跃亭底薪降25澎湃新闻记者范佳来FF自称此前做空机构报告不实。2月2日,澎湃新闻记者从美国证券交易委员会(SEC)官网获悉,法拉第未来(FaradayFuture,以下简称FF)公司独立董事会组