您现在的位置是:亿华云 > 应用开发
Go 1.18 中的三个功能,你知道几个
亿华云2025-10-04 00:56:22【应用开发】2人已围观
简介大家好,我是程序员幽鬼。每个人都很兴奋,经过十年左右[1]的开发人员要求泛型之后,Go 编程语言将在 2022 年第一季度的 Go 1.18 中获得泛型类型和函数[2]。毫无疑问,泛型将导致大量实验,
大家好,个功我是个功程序员幽鬼。
每个人都很兴奋,个功经过十年左右[1]的个功开发人员要求泛型之后,Go 编程语言将在 2022 年第一季度的个功 Go 1.18 中获得泛型类型和函数[2]。毫无疑问,个功泛型将导致大量实验,个功有些是个功好的[3],有些是个功坏的[4],有些挺奇怪[5]。个功Go 1.18 还准备通过将模糊[6]测试作为标准测试包的个功一部分来提高软件可靠性。但是个功今天,我想看看 Go 1.18 中的个功一些细微变化,否则它们可能会迷失泛型这个主要功能的个功兴奋中。
1、个功二进制中包含的版本控制信息
在使用 go:generate[7] 和 go:embed[8] 两篇文章中,其中一个激励示例是能够将有关用于创建二进制文件的 Git 提交哈希(commit hash)的信息嵌入其中。在 Go1.18 中,这成为日常go命令的源码下载自动组成部分。
在 runtime/debug.BuildInfo[9] 通过返回 runtime/debug.ReadBuildInfo()[10] 更新,包括一个新的字段 Settings []debug.BuildSetting。Settings[11] 反过来是描述二进制文件的键值对。提交哈希是 key 的值 vcs.revision,而 vcs.time 做了所期望的。甚至vcs.modified可以告诉你构建是 “dirty” 还是 “clean”。
因为从 slice 中读取出来debug.BuildSetting有点复杂,所以我编写了一个名为 versioninfo[12] 的小包,它在启动时读取调试信息,设置versioninfo.Revision, versioninfo.LastCommit 和 versioninfo.DirtyBuild,但可以随意编写自己的帮助程序库[13]。
2、新的 http.MaxBytesHandler 中间件
关于 http.MaxBytesHandler[14] 没有什么好说的。似乎除了吹嘘该功能是我写的[15]。其实我并没有设计它。这只是一个在 Go 问题跟踪器中请求和批准的五行函数,香港云服务器我认为它足够简单,可以在其他任务之间编写和提交。
这是文档:
MaxBytesHandler returns a Handler that runs h with its ResponseWriter and Request.Body wrapped by a MaxBytesReader.
这样做的情况是,如果你将服务器直接暴露在 Internet 上,可能需要限制要处理的请求的大小,以避免拒绝服务攻击。这已经可以在带有 http.MaxBytesReader[16] 的处理程序中完成,但是通过在中间件级别强制执行限制,现在你可以确保它不会被意外遗忘在 Web 服务器的某个被忽视的角落。
3、不合理但有效的 strings.Cut 功能
strings.Cut[17] 类似于 Python 的 str.partition[18],它在找到分隔符子字符串的第一个位置将字符串切成两段。
为什么不增加 LastCut?Russ Cox 的解释是,LastIndex 的调用次数明显少于 Index,因此暂不提供 LastCut。
详情见 Russ Cox 在 issue 中所写的内容:https://github.com/golang/go/issues/46336。
本文作者:Carl M. Johnson
原文链接:https://blog.carlmjohnson.net/post/2021/golang-118-minor-features/
参考资料
[1]十年左右: https://blog.carlmjohnson.net/post/google-go-the-good-the-bad-and-the-meh/
[2]泛型类型和函数: https://go.dev/blog/why-generics
[3]好的源码库: https://github.com/carlmjohnson/deque/
[4]坏的: https://github.com/carlmjohnson/new/
[5]挺奇怪: https://github.com/carlmjohnson/truthy/
[6]将模糊: https://go.dev/blog/fuzz-beta
[7]使用 go:generate: https://blog.carlmjohnson.net/post/2016-11-27-how-to-use-go-generate/
[8]go:embed: https://blog.carlmjohnson.net/post/2021/how-to-use-go-embed/
[9]runtime/debug.BuildInfo: https://pkg.go.dev/runtime/debug@master#BuildInfo
[10]runtime/debug.ReadBuildInfo(): https://pkg.go.dev/runtime/debug@master#ReadBuildInfo
[11]Settings: https://pkg.go.dev/runtime/debug@master#BuildSetting
[12]versioninfo: https://github.com/carlmjohnson/versioninfo/
[13]随意编写自己的帮助程序库: https://blog.carlmjohnson.net/post/2020/avoid-dependencies/
[14]http.MaxBytesHandler: https://pkg.go.dev/net/http@master#MaxBytesHandler
[15]我写的: https://golang.org/cl/346569
[16]http.MaxBytesReader: https://pkg.go.dev/net/http#MaxBytesReader
[17]strings.Cut: https://pkg.go.dev/strings@master#Cut
[18]str.partition: https://docs.python.org/3/library/stdtypes.html#str.partition
本文作者:Carl M. Johnson
本文转载自微信公众号「幽鬼」,可以通过以下二维码关注。转载本文请联系幽鬼公众号。
很赞哦!(79998)
相关文章
- 注册域名要了解几大点?新手有什么方式注册域名?
- 新手要如何才能更改域名联系人?有什么方法?
- ren域名有价值吗?ren域名是什么域名?
- 现在域名需要实名认证吗?国内域名实名到底什么目的?
- 域后缀首选.com,.net,然后是.cn。后缀选择不当,导致流量损失。域名是企业与互联网网址之间的链接,关键是企业在网络上存在的标志。因此,选择好域名是开展网上工作的首要重要条件。
- 人们理解的三拼域名是什么?三拼域名在当下价值如何?
- 企业转型互联网需要域名吗?企业转型需要怎样的域名?
- 如果公司没有域名会如何?公司域名有怎样的影响?
- 2、定期提交和投标域名注册。例如,益华网络点击“立即预订”后,平台会抢先为客户注册域名。当然,一个域名可能会被多个客户预订,所以出价最高的人中标。
- 现在域名需要实名认证吗?国内域名实名到底什么目的?
站长推荐
国际域名转移的费用和处理步骤是什么?
新手购买域名空间该怎么做?购买域名空间注意什么?
域名后缀为space是什么域名?space域名怎么样?
注册的域名要多久才能访问?有什么问题?
3、不明先知,根据相关征兆预测可能发生的事件,以便提前做好准备,赶紧注册相关域名。;不差钱域名;buchaqian抢先注册,就是这种敏感类型。预言是最敏感的状态。其次,你应该有眼力。所谓眼力,就是善于从社会上时不时出现的各种热点事件中获取与事件相关的域名资源。眼力的前提是对域名领域的熟悉和丰富的知识。
域名转入后年限未增加的原因是什么?
新手对vip域名注册有什么看法?vip域名什么寓意?
新手域名过户要知道哪些常见问题?怎样更好进行域名过户?