365天等待完整版视频—在Go语言的世界里,我学会了耐心和重构

你知道吗,我刚开始用Go语言写代码那会儿,心里总有个念头:要是有一个365天等待完整版视频能告诉我“怎么写Go才算正宗”,那我就...

你知道吗,我刚开始用 Go语言 写代码那会儿,心里总有个念头:要是有一个 365天等待完整版视频 能告诉我“怎么写Go才算正宗”,那我就不用踩那么多坑了,但后来我发现,真正的“完整版视频”根本不在某个教程里,它是在每一天的编码里一点一点积累出来的,今天我就用 Go 语言本身,来讲讲这件事儿。

为什么我会有“等待完整版”的错觉?

先说个真事儿,我刚开始学 Go 的时候,特别喜欢看那种“Go语言入门到精通”的视频,第一集讲变量,第二集讲函数,第三集讲 goroutine,我天真地以为,只要我把这些视频全部看完,我就是高手了,但事实证明,看完视频和能写代码是两码事,就像你看了365天的足球集锦,但你上场还是不会踢。

所以我后来换了个方式:我让“等待完整版视频”变成一个具体的程序,我用 Go 写一个小工具,每天输出一句我学到的新知识点,持续 365 天,到第365天的时候,这个程序会生成一个“完整版视频”的元数据文件,代码大概长这样:

365天等待完整版视频—在Go语言的世界里,我学会了耐心和重构

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

(5)

文章推荐

发表回复

本站作者才能评论

评论列表(4条)

  • kyadmin
    kyadmin 2026-07-18

    我是be365的签约作者“kyadmin”!

  • kyadmin
    kyadmin 2026-07-18

    希望本篇文章《365天等待完整版视频—在Go语言的世界里,我学会了耐心和重构》能对你有所帮助!

  • kyadmin
    kyadmin 2026-07-18

    本站[be365]内容主要涵盖:be365,be365网站,be365网址,ball365体育,Be365排名

  • kyadmin
    kyadmin 2026-07-18

    本文概览:你知道吗,我刚开始用Go语言写代码那会儿,心里总有个念头:要是有一个365天等待完整版视频能告诉我“怎么写Go才算正宗”,那我就...

    联系我们

    工作时间:周一至周五,9:30-18:30,节假日休息

    关注我们