go1.17发布,go7与go8

时间:2022-10-31 05:42:40阅读:3074
我是一只可爱的土拨鼠,专注于分享 Go 职场、招聘和求职,解 Gopher 之忧!欢迎关注我。Go1.17 相关的功能,之前陆陆续续介绍过,比如:Go1.17 新特性:新版构建约束Go1.17 新特性之切片变数组Go1.17 快报之…

我是一只可爱的土拨鼠,专注于分享 Go 职场、招聘和求职,解 Gopher 之忧!欢迎关注我。

Go1.17 相关的功能,之前陆陆续续介绍过,比如:

Go1.17 新特性:新版构建约束Go1.17 新特性之切片变数组Go1.17 快报之标准库越来越注重易用性Go1.17 这个新特性竟然是6年前提出来的

按照计划,Go1.17 在 8 月份如期发布了(刚刚发布)。关于 Go1.17 更多的细节特性,可以参考官方文档。

Go1.17 增加了 Windows/ARM64 的支持。在这个版本中引入了修剪过的模块图。在 go.mod 文件中指定 Go 1.17 或更高版本的模块,其模块图仅包含其他 Go 1.17 模块的直接依赖关系,而不包含其传递依赖关系。这应该有助于避免需要下载或读取 go.mod 文件。这可节省日常开发的时间。此外,unsafe 增加了两个函数。

更多详细信息可以参考官方文档:https://golang.org/doc/go1.17。下载最新版本,可以到「Go语言中文网」:https://studygolang.com/dl。

随着 1.17 的发布,1.18 的开发也重新开放开发。为什么说重新?因为之前有进行相关的开发工作。

1)internal/goversion/goversion.go 中的 Version 常量改为 18:

// Version is the Go 1.x version which is currently// in development and will eventually get released.//// It should be updated at the start of each development cycle to be// the version of the next Go 1.x release. See golang.org/issue/40705.const Version = 18

这是第一个提交的 CL,因为它标志着代表 Go1.18(Go1.17)的主分支的开始。

2)泛型分支:dev.typeparams 合入 master。这就意味着,Go1.18 中包含泛型已经实锤了。很显然,dev.typeparams 分支需要提前合并,毕竟是大改动。

关于 Go1.18 的常规开发就可以进行了。

文档和开发同步进行:关于 1.18 的发布文档已经开始了。

go1.17发布,go7与go8

Go 1.18 新特性多模块工作区教程

随着 2022 年 3 月 15 日 go 1.18 正式发布,新版本除了对性能的提升之外,还引入了很多新功能,其中就有 go 期盼已久的功能泛型(Generics),同时还引入的多模块工作区(Workspaces)和模糊测试(Fuzzing)。

关于泛型网上已经有很多介绍的教程了,这里我介绍一个实用的功能,多模块工作区的使用方法和教程。

Go 多模块工作区能够使开发者能够更容易地同时处理多个模块的工作,如:

多模块工作区

开发流程演示

总结

参考文献

go 使用的是多模块工作区,可以让开发者更容易同时处理多个模块的开发。在 Go 1.17 之前,只能使用 go.mod replace 指令来实现,如果你正巧是同时进行多个模块的开发,使用它可能是很痛苦的。每次当你想要提交代码的时候,都不得不删除掉 go.mod 中的 replace 才能使模块稳定的发布版本。 在使用 go 1.18 多模块工作区功能的时候,就使用这项工作变得简单容易处理。下面我来介绍怎么使用这一功能。 Go 多模块工作区文档、代码示例[5]

首先 我们需要 go 1.18 或更高版本 go 安装[6]

通常情况下,建议不要提交 go.work 文件到 git 上,因为它主要用于本地代码开发。

推荐在: $GOPATH 路径下执行,生成 go.work 文件

go work init 初始化工作区文件,用于生成 go.work 工作区文件

go work use 添加新的模块到工作区

go work edit 用于编辑 go.work 文件

go work sync 将工作区的构建列表同步到工作区的模块

go env GOWORK

文件结构和 go.mod 文件结构类似,支持 Go 版本号、指定工作区和需要替换的仓库 文件结构示例:

可以使用 go work use hello 添加模块,也可以手动修改 go.work 工作区添加新的模块 在工作区中添加了模块路径,编译的时候会自动使用 use 中的本地代码进行代码编译,和 replaces 功能类似。

replaces 命令与 go.mod 指令相同,用于替换项目中依赖的仓库地址 需要注意的是 replaces 和 use 不能同时指定相同的本地路径

错误示例

在同时使用 go.work 和 go.mod replace 功能的的时候分别指定不同的代码仓库路径, go.work 优先级高于 go.mod 中定义

在代码构建时候使用的是 go.work 指定的 example1 仓库的代码, go.work 优先级别更高

在 Go 1.18 go run 和 go build 都会默认使用工作区功能 GOWORK 也可以指定配置 go.work 文件位置

Go 全局变量 GOWORK 设置 off 则可以禁用工作区功能

演示如何使用多模块工作区功能。在现在微服务盛行的年代,一个人会维护多个代码仓库,很多的时候是多个仓库进行同时开发

假设我们现在进行 hello 仓库开发,实现的功能是,实现将输入的字符串反转并输出,字符串反转功能依赖于 github.com/link1st/example (下文统称 example )公共仓库实现

新建 hello 项目

main.go 代码

运行代码 go run main.go -str "hello world" 或 go run github.com/link1st/link1st/workspaces/hello -str "hello world" 可以看到输出了 hello world 反转以后的字符串

到这里,最初的功能已经完成,但是后续需求变动,不仅需要输出反转以后的字符串,还需要将字符串大写

我们则需要去 example 仓库中添加开发 将字符串大写的功能

vim example/stringutil/to_upper.go 代码如下

由于代码还在本地调试,未提交 git 仓库中,这个时候就需要用到 Go 多模块工作区的功能了。

进入项目根目录,初始化我们现在正在开发的模块

文件结构如下

回到 hello 项目, vim main.go 将字符串大写的功能添加上。

运行代码

到这里,演示的代码已经全部完成

使用 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/

go1.17发布,go7与go8

Go语言的简史

2007年,谷歌工程师Rob Pike, Ken Thompson和Robert Griesemer开始设计一门全新的语言,这是Go语言的最初原型。
2009年11月10日,Go语言以开放源代码的方式向全球发布。
2011年3月16日,Go语言的第一个稳定(stable)版本r56发布。
2012年3月28日,Go语言的第一个正式版本Go1发布。
2013年4月04日,Go语言的第一个Go 1.1beta1测试版发布。
2013年4月08日,Go语言的第二个Go 1.1beta2测试版发布。
2013年5月02日,Go语言Go 1.1RC1版发布。
2013年5月07日,Go语言Go 1.1RC2版发布。
2013年5月09日,Go语言Go 1.1RC3版发布。
2013年5月13日,Go语言Go 1.1正式版发布。
2013年9月20日,Go语言Go 1.2RC1版发布。
2014年6月19日,Go语言Go 1.3版发布。
2015年8月20日,Go语言Go 1.5版发布,本次更新中移除了”最后残余的C代码”。

评论

  • 评论加载中...