Golang 从入门到放弃 -0x0C

goroutine、闭包循环变量坑和 WaitGroup,建立并发编程的第一层直觉。

终于来到 Go 的明星功能:goroutine。很多人学 Go,就是冲着它来的。别急着把它神化,它本质上是 Go 提供的一种轻量级并发执行方式。好用是真的好用,但乱开也是真的会出事。

什么是 goroutine

你可以先把它理解成“由 Go 运行时管理的轻量级任务”。启动方式也非常朴素,在函数调用前面加一个 go 关键字就行。

package main

import (
    "fmt"
    "time"
)

func sayHello() {
    fmt.Println("hello from goroutine")
}

func main() {
    go sayHello()
    time.Sleep(time.Second)
}

这里如果你不加那句 time.Sleep,程序可能一闪而过,goroutine 还没来得及执行,主函数就先下班了。记住一句话:main 结束,整个进程就结束。

开很多 goroutine 也不稀奇

for i := 0; i < 5; i++ {
    go func(n int) {
        fmt.Println("goroutine", n)
    }(i)
}

time.Sleep(time.Second)

这里顺手提一个常见坑:循环变量别直接闭包捕获,最好像上面这样通过参数传进去。否则你很可能得到一堆重复结果,然后开始怀疑人生。

更靠谱的等待方式:WaitGroup

time.Sleep 只是演示时图省事,真实代码里最好用同步工具来等任务结束。最常见的就是 sync.WaitGroup

package main

import (
    "fmt"
    "sync"
)

func worker(id int, wg *sync.WaitGroup) {
    defer wg.Done()
    fmt.Println("worker", id, "started")
}

func main() {
    var wg sync.WaitGroup

    for i := 0; i < 3; i++ {
        wg.Add(1)
        go worker(i, &wg)
    }

    wg.Wait()
    fmt.Println("all done")
}

这个套路特别常见:

  • 启动前 Add
  • 任务结束时 Done
  • 主流程最后 Wait

并发不等于并行

这两个词经常被混着说。粗暴点理解:

  • 并发:多件事交替推进
  • 并行:多件事同一时刻真在一起跑

Go 很擅长写并发程序,但你也别以为一加 goroutine 性能就自动起飞。任务本身适不适合并发、有没有锁竞争、有没有 I/O 阻塞,这些都会影响结果。

goroutine 也会带来麻烦

别把 goroutine 当不要钱的小广告贴满整个项目。它虽然轻量,但也不是免费的。常见问题包括:

  • 主程序提前退出
  • 共享数据竞争
  • goroutine 泄漏
  • 日志顺序混乱,看起来像谁都没写错,但就是不对

所以并发这事,重点不是“会开”,而是“开了以后你还能收得回来”。

小结

这一章先有个初印象就行:

  • 在函数前加 go 就能启动 goroutine。
  • main 结束,所有 goroutine 一起下班。
  • 同步等待不要老靠 time.Sleep,更推荐 WaitGroup

下一章我们继续把并发讲完整,轮到 channel 和 select 出场了。Go 真正的“优雅并发宣传片”,差不多就是从那里开始放的。

Read more

Harness Engineering:从驾驭模型到构建 AI 工厂

Harness Engineering:从驾驭模型到构建 AI 工厂

2026 年,AI 编程工具的竞争焦点发生了根本性转变:决定 AI 助手好不好用的,不再是模型本身,而是包裹在模型外面的那层"Harness"。同一个模型,在不同的 Harness 下,性能差距可以达到 78% vs 42%。 这篇文章将带你深入了解 Harness Engineering——这个正在重新定义 AI 工程实践的新兴领域。 一、什么是 Harness Engineering? Harness 的字面意思是"马具/缰绳"——用来驾驭一匹强壮但不受控的马。在 AI 语境下,Harness 就是 LLM 之外的一切:工具定义、记忆系统、权限模型、反馈循环、文档规范、多

By Fuyu Jia

Claude Code CLI + Ralph:让 AI 自动完成大型编程任务的终极方案

TL;DR 当你的编程任务大到一个 AI 对话窗口装不下时,Ralph 会帮你把任务拆成小块,让 Claude Code CLI 一个接一个地自动完成——每轮都用全新的上下文窗口,不会越写越糊涂。 一、什么是 Ralph? Ralph 是一个开源项目(GitHub 16k+ Stars),基于 Geoffrey Huntley 提出的 "Ralph Pattern" 构建。它的核心理念很简单: 不要让 AI 在一个漫长的会话里做完所有事情,而是把大任务拆成小故事,每个故事用一个全新的 AI 实例来完成。 这解决了 AI 编程中最常见的痛点——上下文窗口耗尽。当对话越来越长,AI 的输出质量会明显下降。Ralph 通过「每轮一个新实例」的方式,

By Fuyu Jia