前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >go 版本变化

go 版本变化

作者头像
solate
发布2019-11-07 14:26:20
1.1K0
发布2019-11-07 14:26:20
举报
文章被收录于专栏:solate 杂货铺solate 杂货铺

go 版本变更

Go1.13.3 和 Go1.12.12 小版本发布

https://studygolang.com/topics/10268

以解决最近报告的安全问题。

无效的 DSA 公钥可能会导致 dsa.Verify 出现故障。特别是,在精心制作的 X.509 证书链上使用 crypto/x509.Verify 可能会导致 panic, 即使证书没有链接到受信任的根。可以通过 crypto/tls 连接将链交付给客户端, 或者接受和验证客户端证书的服务器。会通过 HTTPS 服务器使 net/http 客户端崩溃, 而接受客户端证书的 net/http 服务器将恢复 panic 并且不受影响。

此外,在 X.509 证书请求,解析 golang.org/x/crypto/openpgp 实体或 golang.org/x/crypto/otr 对话期间, 调用 crypto/x509.(*CertificateRequest) CheckSignature 的应用程序可能会崩溃。最后, 由于主机密钥格式​​错误,golang.org/x/crypto/ssh 客户端可能会崩溃, 而如果 PublicKeyCallback 接受格式错误的公钥,或者 IsUserAuthority 接受了格式错误的证书,则服务器可能会崩溃。

issue 是 CVE-2019-17596 和 Go 版本 golang.org/issue/34960。

Go 1.13.2 版本还包含编译器修复程序,可防止在极少数情况下对负 slice 索引的不正确访问。 受影响的代码(编译器可以证明索引为零或负数)将在 Go 1.12.11 中引起 panic , 但可能导致在 Go 1.13 和 Go 1.13.1 中进行任意内存读写。这是 Go issue golang.org/issue/34802。

结果在 7点07分,又发布了 Go1.13.3 和 Go1.12.12,应该是上个版本有 bug,紧急修复。

因此不建议使用 Go 1.13.2和Go 1.12.11,可以到 https://studygolang.com/dl 下载 Go1.13.3 和 Go1.12.12。

Go 1.13.2 和 go1.12.11

解决安全问题

https://golang.org/security

Go 1.13.1 和 Go 1.12.10

Go 1.13.1 和 Go 1.12.10 发布了,修复了一个安全问题,如下:

net/http (通过 net/textproto)接受无效的 HTTP/1.1 报头并将其标准化,在冒号前会出现空格,产生 RFC 7230 错误。

如果一个 Go 服务器在一个不常见的反向代理后面使用,该代理接受并转发这些无效的报头,却不对这些无效报头进行规范化,反向代理和服务器就会互不相同地解释这些报头。这可能导致过滤旁路或请求漏洞( request smuggling),如果来自不同客户端的请求被代理多路复用到相同的上游连接上,则导致请求漏洞。这些无效的报头现在被 Go 服务器拒绝,并且在没有规范化的情况下传递给 Go 客户端应用程序。

查看发布说明以了解更多信息:

https://groups.google.com/forum/m/#!topic/golang-announce/cszieYyuL9Q

相关链接

参考来源

Go 1.13

Go 1.13 发布了,该版本值得关注的改进包括:

go 命令可直接下载和认证模块,详情请看 using the Go module mirror and Go checksum database by default

数字文法的改进 错误封装改进 默认启用 TLS 1.3 提升对模块的支持

详细改进说明请看 https://golang.org/doc/go1.13

[参考来源](https://www.oschina.net/news/109593/go-1-13-released)

GO 1.13版本改进

1

https://www.wingsxdu.com/p1391/

首先是模块化将成为默认的特性,彻底告别GOPATH时代;其次是不是太重要的二进制特性将被废除;

1.语法糖
  • 二进制整数字面量:前缀 0b 或 0B 表示二进制整数字面量,例如 0b1011;
  • 八进制整数字面量:前缀 0o 或 0O 表示八进制整数字面量,例如 0o660(由前导 0 后跟八进制数字指示的八进制表示法仍然有效);
  • 十六进制浮点数字面量:现在可以使用前缀 0x 或 0X 来表示十六进制格式浮点数,例如 0x1.0p-1021。十六进制浮点数必须始终具有指数,写为字母 p 或 P,后跟十进制的指数。指数将尾数运算为2的指数幂。例 0x1p-2,代表十六进制的 1 除以 2²,也就是 0.25;
  • 虚部(复数常数的虚部)字面量:虚部后缀 i 现在可以与任何(二进制,十进制,十六进制)整数或浮点字面值一起使用,例如:0xabci == 0xabc * 1i == 2748i 。
  • 数字分隔符:现在可以使用下划线分隔(分组)任何数字字面量,例如 1_000_000、0b_1010_0110、3.1415_9265,下划线可能出现在任何两位数字或字面量前缀和第一位数字之间。 (没看懂)
2.工具

Modules 改进

GO111MODULE 环境变量默认值仍为 auto,但只要当前工作目录包含或位于包含 go.mod 文件的目录下,auto 就会激活 go command 模块感知模式——即使当前目录在 GOPATH/src 内。

此变更简化了 GOPATH/src 中现有代码的迁移,以及对模块感知软件包与非模块感知导入器的持续维护。

GOPROXY 环境变量现在可以设置为以逗号分隔的代理 URL 列表或特殊的token值 direct,其默认值现为https://proxy.golang.org,direct。解析包含其模块的包路径时,go命令将连续尝试列表中每个代理上的所有候选模块路径。除404、410之外,无法访问的代理或 HTTP 状态代码将使搜索终止,而无需咨询其余代理。

GOPRIVATE(new) 环境变量用于声明不公开的模块路径。用作较低优先级的 GONOPROXY 和GONOSUMDB 变量的默认值,通过代理提取哪些模块并使用校验和数据库进行验证,从而提供更精细的操控。

GOSUMDB(new) 环境变量可标识数据库的名称、可选的公钥和服务器 URL,以查询主模块的go.sum文件中尚未列出的模块的校验和。如果 GOSUMDB 不包含显式 URL,则通过检索支持校验和数据库的 GOPROXY URL来选择 URL,如果所有代理都不支持,则返回到指定数据库的直接连接。如果GOSUMDB设置为off,则不会查询校验和数据库,只验证 go.sum 文件中的现有校验和。

若用户无法访问默认代理和校验和数据库(例如由于防火墙配置)可将 GOPROXY设置为 dircet和/或将 GOSUMDB 设置为 off 。

go env -w 指令可用于设置这些变量的默认值,全平台通用:

go env -w GOPROXY=direct go env -w GOSUMDB=off

go 版本相关

https://www.infoq.com/news/2019/09/go-1-13-module-mirror-checksumdb/

数字文法的改进

在语言级别,Go 1.13支持一组更统一的数字文字前缀, 例如0b二进制数字,0x十六进制数字,0o八进制等等。 新版本还使运算符<<和可以使用带符号的移位计数>>, 从而uint在使用它们时不需要类型转换。 两项更改都没有违反Go承诺与该语言的早期版本兼容的源代码。

https://github.com/golang/proposal/blob/master/design/19308-number-literals.md

默认启用 TLS 1.3

https://www.jianshu.com/p/efe44d4a7501?utm_source=oschina-app

有得必有失,HTTPS 虽然增加了网站安全性,但因为 HTTPS 握手次数增加, 会一定程度上降低用户访问速度。 为了使 HTTPS 达到更快的数据传输性能,并且在传输过程中更加安全, TLS 1.3 新特性

TLS(Transport Layer Security Protocol,传输层安全协议)主要目的是提供隐私和数据两个通信应用之间的完整性。该协议由两层组成:TLS 记录协议(TLS Record)和 TLS 握手协议(TLS Handshake)。

当使用 TLS 时,客户端和服务器之间的连接具有以下一个或多个属性:

连接私密性:使用对称加密算法用于加密数据的传输,例如 AES [AES], RC4 [SCH] 等 可以使用公钥加密来验证通信方的身份 连接可靠性:发送的每个消息都使用 MAC(消息认证码) 进行完整性检查

相比 TLS 1.2,TLS 1.3 的握手时间减半。这意味着访问一个移动端网站,使用 TLS 1.3 协议,可能会减少将近 100ms 的时间。

error

https://blog.csdn.net/weixin_30257433/article/details/101833961

些时候我们需要更加具体的信息,

而为了代码健壮性考虑,对于函数返回的每一个错误,我们都不能忽略它。 因为出错的同时,很可能会返回一个 nil 类型的对象。如果不对错误进行判断, 那下一行对 nil 对象的操作百分之百会引发一个 panic。

模块 (还在研究)

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Go1.13.3 和 Go1.12.12 小版本发布
  • Go 1.13.2 和 go1.12.11
  • Go 1.13.1 和 Go 1.12.10
  • Go 1.13
    • GO 1.13版本改进
      • 1
    • go 版本相关
      • 数字文法的改进
      • 默认启用 TLS 1.3
      • error
    • 模块 (还在研究)
    相关产品与服务
    数据库
    云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档