惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tenable Blog
G
GRAHAM CLULEY
C
CXSECURITY Database RSS Feed - CXSecurity.com
S
Security Affairs
P
Privacy & Cybersecurity Law Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Cyberwarzone
Cyberwarzone
A
Arctic Wolf
I
Intezer
Forbes - Security
Forbes - Security
L
Lohrmann on Cybersecurity
L
LangChain Blog
L
LINUX DO - 热门话题
博客园 - 三生石上(FineUI控件)
酷 壳 – CoolShell
酷 壳 – CoolShell
Hacker News: Ask HN
Hacker News: Ask HN
量子位
博客园_首页
Security Archives - TechRepublic
Security Archives - TechRepublic
Jina AI
Jina AI
PCI Perspectives
PCI Perspectives
O
OpenAI News
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Know Your Adversary
Know Your Adversary
T
Threatpost
Hugging Face - Blog
Hugging Face - Blog
Last Week in AI
Last Week in AI
小众软件
小众软件
Scott Helme
Scott Helme
博客园 - 司徒正美
IT之家
IT之家
V
V2EX
WordPress大学
WordPress大学
有赞技术团队
有赞技术团队
美团技术团队
大猫的无限游戏
大猫的无限游戏
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Google Online Security Blog
Google Online Security Blog
宝玉的分享
宝玉的分享
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
罗磊的独立博客
The Hacker News
The Hacker News
N
News and Events Feed by Topic
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
J
Java Code Geeks
T
Tor Project blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
A
About on SuperTechFans
C
Cybersecurity and Infrastructure Security Agency CISA

文章列表 on polarisxu

通过一个例子让你彻底掌握 Go 工作区模式 这道题正确率竟然只有 22% Go 开源项目推荐:一个简单的 Go 练手项目 go test 如何禁用缓存? Go1.18 快讯:constraints 包被移除标准库 跟着 Go 作者学泛型 「2022 版」轻松搞定 Go 开发环境 鹅厂小哥用行动反对加班:程序员加班能被终结吗? Go 为什么选择 Gopher 作为吉祥物? 本地如何配置多个 GitHub/Gitee 账号? 为 Java 开发者准备的 Go 教程 02:Java 有而 Go 无 GitHub 发现了 studygolang 项目依赖的漏洞 Typora 宣布收费后,这款开源 Markdown 编辑器火了 为 Java 开发者准备的 Go 教程 01:漫游了 我的 2021 年终总结 泛型版 singleflight:Go 中如何防止缓存击穿? 2021 年你写了多少代码?这个 Go 工具帮你统计 Go1.18 新特性:TryLock Go 泛型入门教程 程序员瑞士军刀:各种结构的转换工具 终于有 Go 版的 Elasticsearch 了 Go泛型系列:maps 包讲解 Go 1.18 中的 any 是什么? Go1.18 快讯:新的 IP 包 Go编程模式:详解函数式选项模式 Go泛型系列:slices 包讲解 Nginx 竟然也有 playground — Go 语言构建的 Go泛型系列:Go1.18 类型约束那些事 Go1.18 快讯:Module 工作区模式 Go1.18 快讯:新增的 Cut 函数太方便了 Go1.18 快讯:废弃了这个 API Go1.18 快讯:新增字符串 Clone API Go:如何获得项目根目录? Go 如何获取和设置环境变量 重磅变动:更快找到微信公众号里的Go文章 Go 这样设置版本号:我们的项目也可以 假期结束,推荐 2 本 manning 出的 Go 图书 Go Fiber 框架系列教程 04:测试应用 Go Fiber 框架系列教程 03:中间件 Go泛型系列:提前掌握Go泛型的基本使用 推荐一个 Go GUI 实战项目 Go Fiber 框架系列教程 02:详解相关 API 的使用 Go Fiber 框架系列教程 01: 和 Express 对比学习 Go Module:私有不合规库怎么解决引用问题 Go1.17 新特性:go get 变了 Go1.17 新特性:testing 包的相关变化 StackOverflow 上关于 Go select 死锁的问题 新书推荐:用 Gin 框架构建分布式应用 Go 官网要变天。。。 Gin 这是要成为 Go 官方框架? 扬眉吐气:刚刚,Go 已经默认支持泛型了 Go 1.17 新特性:Module 有哪些变化? Go 第三方库推荐:类型转换如此简单 担心密码提交到 GitHub?建议使用这个 Go 开源工具 Go 的时间格式化为什么是 2006-01-02 15:04:05? GitHub 为 Go 社区带来安全支持 Go开源项目推荐:500行代码确认请求时间花在哪 一道关于 len 函数的诡异 Go 面试题解析 厉害了我的 Go:推荐系统都有开源实现 Go1.17 新特性:新版构建约束 这个工具真好:看看你的Go项目依赖有无漏洞 网友很强大,发现了Go并发下载的Bug Rust 劝退系列 09:函数 Go项目实战:一步步构建一个并发文件下载器 这本 Go 新书挺期待的:100 个常见错误 Go 启用新的官方问答社区 这是要干嘛?!微软招 Go 编译器全职开发人员 Go1.17 快报之标准库越来越注重易用性 Go1.17 新特性之切片变数组 回顾 Go 官网的演变史 站长8年前的Go代码竟然进入大厂的项目里了 Go图书翻译:一个好消息,一个坏消息 不怕烂尾!决定组织翻译这本 Go 图书 Rust 劝退系列 08:模式匹配 一本花了2.5年写成的Go免费在线图书 被黑惨了:一句话,说明自己会 Go,咋整? Go1.16 中的新函数 signal.NotifyContext 怎么用? Go 1.17 新特性提前学之测试执行随机化 Rust 劝退系列 07:流程控制 官方的 Go 多版本管理:使用和原理 Rust新书:给你一个劝退的理由 周刊题解:常量表达式这个规则应该了解下 盘点那些使用 Go 语言的国外公司 编写了50万行Go代码是一种什么体验 Rust 劝退系列 06:常量 Uber 使用 Go 的规模这么大?!都自己定制的 Go 编译器了 Go Team Leader — rsc 大神新开源了一个库,增强模板功能 再一次看到了 Go 的节制:int128 类型要不要支持? Rust 劝退系列 05:复合数据类型 「卷」有理论依据:海勒姆定律—Go又是怎么卷的 Go 真的也可以进行 GUI 开发:还有这样的图书呢 Rust 劝退系列 04:基本数据类型 我的 Go 语言书单 Rust 劝退系列 03:变量 我又来推荐免费 Go 新书了:一本用 Go 讲架构的书 注释竟然还有特殊用途?一文解惑 //go:linkname 指令 这个功能,公众号、微信群会不会被玩坏? 一道 Go 闭包题,面试官说原来自己答错了:面别人也涨知识 Rust 劝退系列 02:第一个 Rust 程序 Rust 劝退系列 01:打造开发环境
Go 源代码中的复活节彩蛋
2020-07-17 · via 文章列表 on polarisxu

前言

前段时间,我在某个 Slack 工作区与朋友聊天:

朋友:“有人知道为什么time.minWall 的默认值是 1885 吗?” 我:“不知道,也许是从《回到未来 3》那一年开始的?”

我那么说基本是在开玩笑,因为我也不知道为什么将其设置为 1885 年。尽管其背后的事实与我在 Go 中的日常编码没有任何关系,但我还是情不自禁地询问了幕后花絮。我在团队聊天中问了我的同伴 Gophers,但似乎没人能找到相关的线索。

最后,我直接向 Russ Cox(@_rsc )发送了一封电子邮件,以了解背景。

time.minWall

一个 const 值time.minWall设置为 1885,在如下代码中:

const (
    hasMonotonic = 1 << 63
    maxWall      = wallToInternal + (1<<33 - 1) // year 2157
    minWall      = wallToInternal               // year 1885
    nsecMask     = 1<<30 - 1
    nsecShift    = 30
)

这是个常数值,它定义了时间包中值的时代。这是一个常量值,它定义了 time 包的时间纪元。我们经常使用 UNIX 纪元(即 1970 年 1 月 1 日 UTC 的 00:00:00),但这只是几个用于表示日期时间值的标准或实现中的一个纪元,当然 Go 是一种多平台语言,因此 Go 中的纪元需要涵盖所有这些平台。

Russ Cox 在以下地方公开评论了 Go 的纪元。第一个是在 GitHub issue 上

已合入 Go 1.9。我将内部纪元移到 1885 年(最大年份为 2157 年),以避免 NTP 纪元派生的时间出现任何可能的问题。我还调整了设计文档,以调整此更改和一些较小的编码更改。

但是这个评论只提到了为什么以及何时将内部纪元移到 1885 年,而没有提及为什么他们没有移至其他年份,例如 1900 年。

第二个是内部纪元移动的提案文档。

基于 Unix 的系统通常使用 1970,而基于 Windows 的系统通常使用 1980。我们不知道任何使用更早默认壁钟时间(Wall Time)的系统,但是由于 NTP 协议纪元使用 1900,因此选择 1900 之前的年份似乎更具前瞻性。

可见,理论依据也只是支持 1900 年之前的任何年份,而不是特指 1885 年。我几乎可以肯定,这一年来自“回到未来 3”,但我想 100% 确定这一年,所以我联系了肯定知道这一点的人,即向 Russ Cox 发送了一封电子邮件,询问原因。他在一天之内做出了回应(考虑到 EDT 和 JST 之间的时区差异,这是非常快的):

是的,人们说服我移到 1900 年之前,而 1885 年是显而易见的选择,因为它对加利福尼亚的希尔山谷(Hill Valley)具有历史意义。:-)

这就是我知道的!!同样,我很高兴能够从谁做出决定中得到真正的答案。

http.aLongTimeAgo

尽管我很欣赏 Russ 的回答,但这还不是故事的结局。Russ 的回信中还有另外一行。

另请参见 http.aLongTimeAgo,现在将其设置为 time.Unix(1, 0),但以前是 time.Unix(233431200, 0)。

正如他所说,在 Go1.15 中,它设置为time.Unix(1, 0)

// aLongTimeAgo is a non-zero time, far in the past, used for
// immediate cancellation of network operations.
var aLongTimeAgo = time.Unix(1, 0)

因此,我们在源码中确认其原始值。你可以在 Go 1.8 中找到它。

// aLongTimeAgo is a non-zero time, far in the past, used for
// immediate cancelation of network operations.
var aLongTimeAgo = time.Unix(233431200, 0)

我们将 UNIX 时间转换为人类可读的格式。当然,Go 提供了超级简单的方法。

package main

import (
    "fmt"
    "time"
)

func main() {
    pdt, _ := time.LoadLocation("America/Los_Angeles")
    t := time.Unix(233431200, 0).In(pdt)
    fmt.Println(t)
}

结果是:

1977-05-25 11:00:00 -0700 PDT

我们得到 2 条提示:“A Long Time Ago”和 “1977-05-25”。这两个是:

当然,除了*《星球大战:第四集》外*,别无其他。它于1977年5月25日发布的(Wikipedia

Go 包中如何使用此值呢?这是通过指定过去时间的截止日期来强制取消现有连接,例如:

cr.conn.rwc.SetReadDeadline(aLongTimeAgo)

当该值被改为 time.Unix(1, 0) 时,有人注意到了,因此对此作了一些评论(比如 1977-05-25 是谁的生日吗?)。我喜欢看到这些评论。这些有趣的聊天有时会在更改列表中进行。

致谢

  • Russ Cox:感谢您回答我的问题和其他信息。另外,感谢您允许公开分享此内容。引用他的评论:

放心吧。这里没有秘密。

注意

该文最初于 2020-07-17 发布于我的日语博客中。

原文链接:https://dev.to/ymotongpoo/easter-eggs-in-go-source-code-2l02

作者:Yoshi Yamaguchi

编译:polarisxu