当前位置:首页 > 汽车 > 正文

我的365第一个视频,从零开始的Golang视频创作之旅

  • 汽车
  • 2026-07-19 01:21:53
  • 44
摘要: 为什么要记录“我的365第一个视频”?说实话,最开始我也没想明白,做视频这件事,在我脑子里转了快两年,每次打开录制软件,看着那个...

为什么要记录“我的365第一个视频”?

说实话,最开始我也没想明白,做视频这件事,在我脑子里转了快两年,每次打开录制软件,看着那个红点,就是按不下去,直到有一天,我翻到一个老程序员的博客,他说:“你写下的每一行代码,都是未来的你写给现在的情书。”我当时就想,那录下的每一个视频呢?可能是我这个Golang开发者写给这个行业的纪念品吧。

有了我的365第一个视频,这不只是一个视频,更像是我对自己承诺的一个锚点,365天,每天一个Golang相关的视频,听起来疯狂,但我想试试。

第一个视频:我到底想表达什么?

选题的犹豫

在决定录我的365第一个视频之前,我花了整整三天选主题,写Go的人都知道,这门语言看着简单,但陷阱不少,我从几个方向里纠结:

  • Go的并发模型:goroutine和channel,这是Go的招牌菜
  • Go的错误处理:很多人觉得烦,但我觉得挺优雅的
  • 一个实际的小项目:比如用Go写个CLI工具
  • 踩坑分享:比如slice的诡异行为

我选了“Golang slice底层陷阱与实战”,为什么呢?因为我自己就因为这玩意儿线上出过bug,凌晨三点爬起来修,那感觉太酸爽了。如果能帮别人少熬一次夜,这视频就值了。

录制过程中的真实状况

我的365第一个视频的过程,简直是一幅“翻车现场”。

录制阶段 实际花费时间 预想时间 翻车点
写提纲 2小时 30分钟 疯狂查资料,越查越深
录制 4次重来 1次过 口胡、忘词、猫跳上桌子
剪辑 3小时 1小时 发现背景有装修声
封面设计 40分钟 10分钟 对字体不满意,换了好几轮

第一遍录到第八分钟,我说了句“当slice扩容时,它的底层数组会——”,然后卡住了整整十秒,因为我在想,“底层数组”这个词到底怎么表达才够通俗?最后我还是用了“藏在背后的那个数组”这种大白话。你懂的,费曼说,如果你不能用简单的话解释,说明你没真懂。

视频里那些重要的知识点

既然聊到我的365第一个视频,我把几个核心的点写在这里,算是给没看视频的朋友们一个速览:

Slice的底层结构

Go里的slice,其实是一个胖指针,它包含三样东西:

  • 指针:指向底层数组的首地址
  • 长度(len):当前元素个数
  • 容量(cap):底层数组能装多少元素

这个结构听起来简单,但坑全藏在细节里,比如下面这个例子:

s := make([]int, 3, 5)
s = append(s, 1, 2, 3)  // 没超容量,不会扩容
s2 := s[:3]             // 共享底层数组
s2[0] = 999
fmt.Println(s[0])       // 输出啥?999!

这就是共享底层数组的坑,我当初线上代码里,就是因为没注意这个,导致数据被意外修改。真事儿,那晚月亮挺圆的。

扩容机制

  • 当容量小于256时,扩容倍数是2倍
  • 当容量大于等于256时,扩容倍数逐渐趋近于25倍
  • 扩容后会分配新的底层数组,旧数据拷贝过去

这个机制保证了性能,但也会导致意外的地址变化,如果你在扩容前取了某个元素的指针,扩容后这个指针就悬空了。永远不要保存slice中元素的地址,除非你知道自己在干什么。

空slice和nil slice

这是个面试高频题,也是初学者容易混淆的地方:

  • var s []int:这是一个nil slice,长度和容量都是0
  • s := []int{}:这是一个空slice,长度和容量也都是0
  • 但它们的底层表现不一样:nil slice没有底层数组,空slice有(虽然底层数组是空的)

我写代码时,习惯用var s []int,因为少打几个字符,而且判断nil更方便。

做完第一个视频后的感受

我的365第一个视频发出去后,我盯着播放量刷新了一下午,最开始只有7个播放,其中有3个是我自己点的,后来慢慢有人评论,有人说“讲得清楚”,有人问了一个我没想到的问题,还有人指出了我语速太快的问题。

我回看视频的时候,发现有个地方把“goroutine”念成了“goroteen”,剪辑时漏掉了。这种小瑕疵,留着吧,挺真实的。

接下来的计划

365天,意味着365个视频,听起来很多,但如果拆开来看,其实每天只需要做三件事:

  1. 确定今天要讲什么(15分钟)
  2. 录制并粗剪(30-60分钟)
  3. 发布(5分钟)

不追求完美,追求完成。 这是我给自己的原则。

比如明天的视频,我打算讲Go的defer,这个关键字看着简单,但“后进先出”和“参数实时求值”这两个特性,够很多人喝一壶的,我打算用一个实际的日志库例子来讲,从错误用法到正确写法一步步推。

再过几天,我可能会录一期讲Go的interface和nil,顺便聊聊Go团队为什么把nil设计成这样,再之后,context包的正确用法pprof性能分析Go modules的版本管理……可以讲的东西太多了。

你也想试试吗? 不用365个视频,就从1个开始,打开录制软件,讲讲你刚踩过的一个坑,或者刚学到的一个API,真的,第一个视频永远是门槛最高,但也是最值得开始的。

我的365第一个视频,从零开始的Golang视频创作之旅