当 nil 不等于 nil?深度剖析 Go 的 typed nil 大坑

0. 一个能“悄悄坑你”的真实示例:SError 的故事 先看你提到的这段代码,表面上看非常正常,甚至很多人第一眼不会觉得哪里有问题: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 package main import ( "log" "sync" ) type SError struct { cause error // Wrapped error which is the root cause. text string // Error text, which is created by New* functions. i18nText string // 本地错误文字,用于客户端显式中文 ignored bool // 能否忽略该错误 info map[string]string infoMutex sync.RWMutex } func (e *SError) Error() string { return e.text } // demoRetSerr 返回 (int32, *SError)。看上去,如果不想返回任何错误,就直接返回 (0, nil) func demoRetSerr() (int32, *SError) { return 0, nil } func main() { var err error // 这里把第二个返回值的 *SError 赋给了 interface{} 类型的 err _, err = demoRetSerr() if err != nil { log.Printf("err != nil. err: %v", err) } } 0.1 乍看之下哪里会有问题? 我们 demoRetSerr 函数直接返回 (0, nil),而函数签名的第二个参数类型是 *SError。 回到 main 函数中,err 是一个 error 接口,承接了那个 nil 指针。 如果“typed nil” 现象出现,那么 err != nil 这个判断就会莫名其妙地通过,从而在日志里打印出“err != nil. err: <nil>”。有时更可怕的是,实际逻辑会被误判,可能执行本不该执行的错误处理分支。 在某些 Go 版本或特定编译器优化下,你可能发现控制台就输出 err != nil. err: <nil>,让人“一头雾水”。这就是一个十分典型、却很隐蔽的 typed nil 场景。即使你写 return nil,对编译器来说: ...

May 15, 2025 · 4 min · 687 words · [厉辉(Yousa)](https://github.com/Miss-you)

畅享 ChatGPT Plus:无需额外支付手段,突破 OpenAI 支付风控

截至 2024 年 2 月 10 日,该教程仍然有效。我已根据此教程重新操作并成功充值。请注意,购买苹果充值卡时应确保从苹果官方网站购买。 ChatGPT Plus 的优势 GPT-4 的性能非常强大,这是众所周知的事实。 Plus 会员可以使用 ChatGPT 的在线和插件功能,这些功能将极大地增强你的创造力,并为你的个人学习和工作效率提供强大的支持工具。 如何开通 ChatGPT Plus? 关键步骤 ChatGPT 已在美国 iOS App Store 上架。你只需要使用 iOS 设备续费会员即可。 目标用户 本教程适用于拥有 iOS 设备(如 iPhone 或 iPad)的用户。 所需工具 a. iPhone 或 iPad 设备 b. 美国地区的科学上网(可自建或购买) c. 支付宝账户 d. 已注册成功的 chatGPT 账号 开通步骤 1. 创建美国区 iOS 账号 如果你已拥有美国区账号,或已熟悉注册流程,可跳过此步骤。 详细的注册流程如下: 访问网站:在浏览器中访问 https://appleid.apple.com/account 开始创建你的 Apple ID。 设置国家/地区:在"Country/Region"下拉菜单中选择"United States"。 输入邮箱和设置密码:在指定字段输入可接收邮件的邮箱地址(作为你的 Apple ID),设定密码并在确认密码字段再次输入。 输入并验证手机号码:选择"China Mainland"作为电话区域,输入手机号并继续。你将收到验证码,输入以验证。 ...

April 23, 2024 · 2 min · 297 words · [厉辉(Yousa)](https://github.com/Miss-you)

【译】创业生存手册:如何有效地打造产品、组建团队并筹集资金

作者:Sam Altman 原文:https://playbook.samaltman.com/ Sam Altman,OpenAI CEO,经常会在博客中分享他的创业经验与智慧。Sam 曾分享过一篇他的经典文章《创业生存手册:如何有效地打造产品、组建团队并筹集资金》,他提供了一系列富有洞见的指导,帮助我们理解创业的艰难和挑战,并找到成功的途径。无论你是创业新手,还是经验丰富的科技专家,都能在这篇文章中找到有价值的收获。#SamAltman #创业 #科技 个人认为,大公司内的小团队或创新团队与创业公司在诸多方面有着密切的相似性。两者都面临着从零开始,将一个概念或想法转化为可行产品或服务的挑战。他们都需要快速地适应和学习,寻找产品与市场的契合点,同时也要不断地迭代产品,以满足不断变化的市场需求。在这两种环境中,都需要强大的领导力和管理才能以及优秀的团队成员。而且,他们都需要面对并管理风险,同时在有限的资源下取得最大的产出。因此,无论你是处于创业环境还是大公司的创新团队,本文都会为你提供极大的价值。Sam Altman的经验和洞察将帮助你更好地理解如何建立并领导一支成功的团队,如何募集资金,如何处理竞争,以及如何建立持久并能够盈利的公司。 我们在指导初创公司方面投入了大量的时间和精力。尽管一对一的咨询服务始终是不可或缺的,但我们认为,如果能将这些建议中最具普适性的部分提炼出来,整合成一种可以提供给 Y Combinator 以及 YC Fellowship 公司的行动指南,那么我们可能能更好地扩展 Y Combinator 的影响力。 于是,我们决定将这个行动指南分享给所有人。 这是为初涉创业领域的人士准备的。对于那些阅读过大量 YC 合作伙伴所写的文章的人来说,这里的大部分内容可能并不陌生——我们的目标是将这些内容汇集到一处。 关于如何扩大创业公司的规模,我们可能会在后面的部分介绍——本指南主要覆盖了如何创立一家公司的相关内容。 作为一家初创公司,你的目标应该是创造出用户热爱的产品。如果你做到了这一点,那么你需要找出如何吸引更多的用户。但是,首要的一步至关重要——想想今天那些真正成功的公司。他们都是从一个让早期用户如此热爱以至于愿意向他人推荐的产品开始的。如果你没有做到这一点,你将会失败。如果你自欺欺人,认为你的用户热爱你的产品,但实际上并非如此,你仍然会失败。 初创公司的墓地上满是那些认为可以跳过这一步的人。 与其创造出大批用户喜欢的产品,不如首先创造出小部分用户热爱的产品。尽管总的积极感受程度是相同的,但是获得更多用户要比从喜欢提升到热爱要容易得多。 关于选择创业,我有一个警告:这是一件很糟糕的事情!我们从 YC 创始人那里得到的最一致的反馈就是,创业比他们想象的要困难,因为他们对初创公司所需的工作量和强度没有一个清晰的认识。加入一家正处于快速发展轨道的早期初创公司通常会是一个更好的经济上的选择。 另一方面,创业其实对你的职业并不构成很大的风险——如果你在技术方面真的出类拔萃,即使你失败了,也会有工作机会。大多数人在评估风险方面做得非常糟糕。我个人认为,更具风险的选择是,你有一个你非常热衷的想法或项目,但却选择了一个安全、轻松但又无法满足你的工作。 要创办一家成功的初创公司,你需要:一个伟大的想法(包括一个伟大的市场)、一个优秀的团队、一个出色的产品,以及卓越的执行力。 一、一个伟大的想法 我们会首先询问 YC 公司的创始人们,他们正在开发什么,以及为何要开发这个产品。 我们希望得到清晰、简洁的回答。这既是对你作为创始人的评估,也是对创意本身的考察。作为创始人,清晰的思维和沟通能力非常重要——你在招聘、融资、销售等方面都会需要这种能力。一般来说,想法需要清晰才能传播,而复杂的想法几乎总是混乱思维或是人为制造问题的标志。如果你的想法在别人第一次听到时并不能激发起他们的兴趣,那就不妙了。 我们还会问,谁对这款产品有着迫切的需求。 最好的情况是,你自己就是目标用户。次优的情况是,你对目标用户有着深入的理解。 如果公司已经有了用户,我们会问有多少用户,以及这个数字的增长速度如何。我们会尝试找出它的增长速度为何没有更快,尤其是要找出用户是否真的喜欢这个产品。通常,这意味着他们会在没有公司提示的情况下,向他们的朋友推荐这个产品。我们还会问这个公司是否已经产生了收入,如果没有,原因是什么。 如果公司还没有用户,我们会尝试找出最小化的首次构建项目,以便对假设进行验证——也就是说,如果我们从完美的体验回溯,我们会尝试找出从何处着手的核心点。 检验一个想法的方法是发布它看看会发生什么,或者尝试销售它(例如,在你编写一行代码之前,尝试获得购买意向书)。前者更适用于消费者想法(用户可能会告诉你他们会使用它,但实际上它可能无法脱颖而出),后者更适用于企业想法(如果一个公司告诉你他们会购买某件东西,那么就去制造它)。具体来说,如果你是一家企业公司,我们会首先问你是否有来自客户的购买意向书,表明他们愿意购买你正在开发的产品。对于大多数生物技术和硬科技公司来说,检验一个想法的方式是先和潜在客户交谈,然后找出你可以首先构建的技术的最小子集(MVP)。 让你的想法根据用户反馈进行演进非常重要。理解你的用户非常关键——你需要这个能力来评估一个想法,制造一个出色的产品,以及建立一个伟大的公司。 如前所述,初创公司的路非常艰难。他们需要很长的时间和持续的高强度努力。创始人和员工需要有共同的使命感来支撑他们。因此,我们会询问创始人为什么想创办这家特定的公司。 我们也会询问这家公司如何能够成为一家垄断企业。这有很多不同的词汇来表述,但我们采用的是彼得·蒂尔的说法。显然,我们不希望你的公司在面对竞争对手时采取不道德的行为。相反,我们正在寻找那些随着规模的扩大而变得更强大,且难以复制的企业。 最后,我们会询问市场情况。我们会询问它现在的规模,增长速度,以及为什么它在十年后会变得非常大。我们试图理解为什么市场会快速增长,以及为什么这是一个初创公司应该去追逐的好市场。我们喜欢那些刚刚开始出现的大部分人尚未意识到的重大技术变革——大公司在应对这些转变方面做得很糟糕。而有些反直觉的是,最佳策略是在小市场中占据大部分份额。 关于想法,我还有一些其他的想法: 我们更喜欢全新的东西,而不是衍生的东西。大多数真正的大公司都是从一些根本性的新事物开始的(新的一个可以接受的定义是比原来好 10 倍)。如果同时有十家其他公司以同样的计划开始,而且听起来非常像已经存在的东西,我们会有所怀疑。 这其中一个重要的反直觉原因是,做一些新的和困难的事情比做一些衍生的和容易的事情更简单。如果你是前者,人们会想要帮助你,加入你;如果是后者,他们就不会这么做。 最好的想法听起来可能不好,但实际上是好的。所以你不需要对你的想法过于保密——如果它真的是一个好想法,那么它可能不会听起来像是值得被窃取的。即使它听起来像是值得被窃取的,拥有好想法的人至少比愿意付出将伟大的想法转化为伟大的公司所需要的工作的人多一千倍。而且,如果你告诉别人你在做什么,他们可能会帮助你。 说到告诉别人你的想法——虽然这个想法第一次听到时真的能激发一些人的兴趣是很重要的,但几乎每个人都会告诉你你的想法很糟糕。也许他们是对的。也许他们不擅长评估创业公司,或者他们只是嫉妒。无论原因是什么,这种情况会经常发生,它会让你受伤,即使你认为你不会被它影响,你仍然会被影响。你越早建立自我信念,不被恶意评论者过多拖累,你就会越好。无论你多么成功,恶意评论者永远不会消失。 如果你没有创业想法,但是想要创业,怎么办呢?也许你不应该创业。如果首先想法出现,而创业公司是将这个想法推向世界的方式,那会更好。 我们曾经尝试过一个实验,为一批有前途但没有创业想法的创始团队提供资金,希望他们在我们资助他们后能找到一个有前景的创业想法。 所有的尝试都失败了。我认为问题的一部分是,好的创始人往往有很多好的想法(通常是太多)。但更大的问题是,一旦你有了一个创业公司,你就必须赶快想出一个创业想法,而且因为它已经是一个正式的公司,所以想法不能太疯狂。你最终会得到听起来可行但是衍生的创业想法。这就是转型的危险。 因此,最好不要过于积极地强迫自己想出创业想法。相反,去了解许多不同的事物。实践发现问题,看似低效的事物,和主要的技术转变。从事你感兴趣的项目[1] 。尽可能地接触智慧、有趣的人。在某个时候,创业想法会自然出现的。 二、一个优秀的团队 平庸的团队无法打造伟大的公司。我们最关注的事情之一就是创始人的实力。当我过去从事后期投资时,我同样非常关注创始人所雇佣的员工的实力。 什么样的人才是优秀的创始人?最重要的特征包括无坚不摧的毅力、决心、坚韧不拔和足智多谋。聪明才智和激情也排在非常重要的位置。这些都比经验,当然也比“精通语言 X 和框架 Y”更重要。 我们注意到,最成功的创始人都是那种和他们一起工作感觉压力很小的人,因为你觉得“不管是什么事,他/她都能完成。”有时候,你可以凭借纯粹的意志力成功。 优秀的创始人具有一些看似矛盾的特征。一个重要的例子是刚柔并济。你要对公司的核心和其使命有强烈的信念,但对于几乎所有其他事情,你还需要保持非常灵活,乐于学习新事物。 最优秀的创始人反应异常迅速。这是决策力、专注力、强度和执行能力的指标。 ...

July 3, 2023 · 2 min · 344 words · [厉辉(Yousa)](https://github.com/Miss-you)

提升专注力的七种方法

第一,把手机放在看不见的地方:手机已成为现代生活中最大的分心来源。为确保专注力,可以关闭工作用即时通讯软件、退出群聊、取关公众号、卸载容易分心的 APP。通过将手机放在看不见的地方或设置勿扰模式,有助于减少干扰。 第二,寻找一个不易受到干扰和分心的环境:安静、舒适的环境有助于提高专注力。因此,选择图书馆、自习室或安静的咖啡馆进行学习或工作。在家里,可以选择无电视的客厅或书房,避免在卧室或躺在床上学习。 第三,列出分心物清单:在开始工作或学习之前,列出可能导致分心的事物,如电视、游戏、聊天等。意识到这些干扰因素,有助于在工作或学习时保持专注。 第四,想想现在做的事情是否值得消耗注意力:在投入精力之前,评估任务的重要性。分清优先级,考虑投入产出比和任务边界,集中注意力在重要且紧急的事情上。对于长期不做的事情,可以考虑委托给别人或机器,或者干脆不做。 第五,阅读前喝点儿咖啡:适量喝咖啡可以提神醒脑,帮助保持清醒。注意饮用时间和剂量,以免导致失眠。早上喝一杯咖啡,午睡后再喝一杯,既提神又有助于提高新陈代谢。 第六,准备一支笔:在阅读或学习时,手边准备一支笔,以便随时记录笔记、划重点或想到新的想法。没有笔也没关系,可以使用电脑编辑器或 iOS 的提醒事项软件记录想法,避免因寻找笔而分心。 第七,觉知自己走神:在工作或学习过程中,可能会不自觉地走神。根据情况采取相应措施。如果是专注力初学者,需要将注意力拉回;若是心流状态高手,分心可能是因为疲劳,此时需要的是适当休息,例如散步或冥想等。

April 21, 2023 · 1 min · 10 words · [厉辉(Yousa)](https://github.com/Miss-you)