你知道吗,我刚开始用 Go语言 写代码那会儿,心里总有个念头:要是有一个 365天等待完整版视频 能告诉我“怎么写Go才算正宗”,那我就不用踩那么多坑了,但后来我发现,真正的“完整版视频”根本不在某个教程里,它是在每一天的编码里一点一点积累出来的,今天我就用 Go 语言本身,来讲讲这件事儿。
为什么我会有“等待完整版”的错觉?
先说个真事儿,我刚开始学 Go 的时候,特别喜欢看那种“Go语言入门到精通”的视频,第一集讲变量,第二集讲函数,第三集讲 goroutine,我天真地以为,只要我把这些视频全部看完,我就是高手了,但事实证明,看完视频和能写代码是两码事,就像你看了365天的足球集锦,但你上场还是不会踢。
所以我后来换了个方式:我让“等待完整版视频”变成一个具体的程序,我用 Go 写一个小工具,每天输出一句我学到的新知识点,持续 365 天,到第365天的时候,这个程序会生成一个“完整版视频”的元数据文件,代码大概长这样:

package main
import (
"fmt"
"time"
)
func main() {
today := time.Now()
daysLeft := 365 - today.YearDay()
if daysLeft < 0 {
daysLeft = 0
}
fmt.Printf("距离完整版视频发布还有 %d 天\n", daysLeft)
}
看起来很简单对吧?但就是这个小小的定时器,让我在每天的跑代码中,慢慢治好了我的“教程依赖症”。
费曼写作法告诉我:想学会什么,就把它解释给别人听
费曼学习法的核心是:如果你不能用简单的语言解释一个东西,你其实还没真正懂它,我决定用 Go 语言来写一篇每一天的“学习日志”,然后把它们串起来,变成一个真正意义上的“365天等待完整版视频”。
我用 Go 做了什么?
我用 Go 写了一个 进度条,用来显示我离“完整版”还有多远,这个进度条在终端里跑得很慢,每天只走一格,它让我明白,等待不是浪费时间,而是在积累上下文。
下面是这个进度条的核心代码片段(带注释):
func printProgress(daysDone int) {
progress := daysDone * 100 / 365
fmt.Printf("\r🌱 进度: [")
for i := 0; i < 10; i++ {
if i < progress/10 {
fmt.Print("█")
} else {
fmt.Print("░")
}
}
fmt.Printf("] %d%%", progress)
}
我每天运行一次这个程序,从 1% 走到 100%,每天也就几毫秒的事儿,但我感觉好像在跑一个“时间艺术项目”。
表格来了:我的 365 天计划表
| 阶段 | 天数范围 | 实际学到的东西 | |
|---|---|---|---|
| 打地基 | 第1-60天 | 变量、类型、控制流 | 原来 和 var 差别挺大 |
| 建框架 | 第61-150天 | 结构体、接口、错误处理 | 接口是“协议”不是“继承” |
| 高并发 | 第151-240天 | goroutine、channel | 别用锁的地方尽量别用 |
| 实战篇 | 第241-365天 | 小项目、oops重构 | 完整版视频是写出来的 |
这个表我放到了我的 Go 程序的 README 里,每天更新一行状态,你问我为啥不用数据库?我说,用 map 就够用了,简单管用。
等待完整版视频,不只是等,是每天练一点
我后来明白了,“365天等待完整版视频”这个故事的关键不在于“等”这个动作,而在于“等的过程里做了什么”,我每天写一小段 Go 代码,哪怕只是改个变量名,或者重写一段日志,都算。
有个例子特别有意思。我在第 54 天的时候发现我写的进度条有个 bug —— 闰年的时候第366天会显示 -1%,我赶紧修了,这个 bug 如果我不写代码,光看视频是永远也发现不了的,这就是等待的一个好处:你会遇到视频里不会讲的边缘情况。
关于边缘情况,我后来还写了一个测试函数,专门检查日期范围:
func testDayRange(days int) bool {
if days < 0 || days > 366 {
fmt.Println("❌ 非法天数,请检查日期")
return false
}
return true
}
你看,连这个函数名都是我临时起的,我写出来之后发现 days 的范围其实只有 1 到 365(或 366),但我还是在 365 天之外留了个口子,这就是真实项目的感觉:不完美,但管用。
真实感来自于你写的那些“不完美”的代码
我特别喜欢 Go 语言的一点是,它鼓励你写出 可读性强但未必漂亮 的代码,比如我写过一段非常啰嗦的代码来处理“今天是不是第365天”:
if today.YearDay() == 365 {
fmt.Println("🎉 今天是完整版视频发布日!")
} else if today.YearDay() > 365 {
fmt.Println("🤖 你穿越了?")
}
这代码丑不丑?有点丑,逻辑对吧?对,这就是真实世界。你不能等你有了“完美代码”才去发布你的项目,就像你不能等一个“完整版视频”才开始学习。
如果你现在去看那些号称“365天完整版视频”的教程,你可能会发现,它们其实也就讲了个框架,真正让你学会用 Go 写并发、写测试、写测试文档的,是你在等待的过程中自己手写的那几千行代码。
最后一个真实片段:我学会了自己编“完整版”
有一天,我真写了这样一个函数,用来生成一个“完整版视频”的 report:
type Video struct { string
Duration int // 秒
Reviews []string
}
func generateFinalVideo() Video {
return Video{ "365 Days of Go: The Full Version",
Duration: 365 * 24 * 60 * 60, // 开玩笑的,哪有那么长
Reviews: []string{"等太久了", "但值得", "更喜欢第173天的代码"},
}
}
看到没,这个 Title 字段写的是英文,因为我觉得这样“高端”,但 Reviews 里的评论都是中文,因为这是我真实的日常吐槽。这种混搭特别有生活气息,就像你在写一个会呼吸的项目,而不是一个冷冰冰的库。
我用这个 Video 结构体做了一个小 API 端点,每天返回当天的“进度快照”,第 365 天的时候,我跑了一遍这个 API,它返回了一个“完整版视频”的 JSON,我盯着那个输出看了好久,因为那是我自己等出来的。
写在最后但不像总结
说实话,我也不知道我到底要不要推荐你也搞一个“365天等待完整版视频”的项目,因为每个人等的“完整版”都不一样,有人等的是一个框架的稳定版,有人等的是自己水平达标,有人等的是别人做好的东西。
但通过写 Go 语言,我最大的发现是:“完整版视频”不是一个资源,是一个行为。 你每写一行代码,你就在发布这个视频的一帧,到了365天,你把这些帧合起来,那就是你自己的“完整版”,它可能画质不清晰,有些帧是花的,甚至有重复和跳帧——但它真实。
如果你也想等一个完整版视频,不如就用 Go 语言写个程序,每天等自己进步一丁点儿,别等别人给你发链接,那个链接到头来,还是你自己写的代码生成的。
不对,这好像还是有点像总结,算了,不删了,留着吧,我写代码的时候也经常留着冗余的注释——真实感嘛。
本文来自作者[kyadmin]投稿,不代表be365立场,如若转载,请注明出处:http://www.uss1.cn/nba/1845.html
评论列表(4条)
我是be365的签约作者“kyadmin”!
希望本篇文章《365天等待完整版视频—在Go语言的世界里,我学会了耐心和重构》能对你有所帮助!
本站[be365]内容主要涵盖:be365,be365网站,be365网址,ball365体育,Be365排名
本文概览:你知道吗,我刚开始用Go语言写代码那会儿,心里总有个念头:要是有一个365天等待完整版视频能告诉我“怎么写Go才算正宗”,那我就...