Golang 从入门到放弃 -0x08

struct、嵌套结构体、匿名结构体和 tag,开始学会组织业务数据。

写到这里,基本类型、函数、切片这些零件你都见过了。接下来该聊 struct,也就是怎么把一堆零散的数据捆成一个更像样的整体。Go 没有传统意义上的 class,但别急着失望,struct 加方法,很多时候已经够用了。

先定义一个结构体

type User struct {
    Name string
    Age  int
    City string
}

这个定义很好理解,User 里有三个字段,分别是名字、年龄和城市。

创建结构体实例的方法也有几种。

u1 := User{}
u2 := User{Name: "Raymond", Age: 18, City: "Hangzhou"}
u3 := User{"Tom", 20, "Shanghai"}

最后那种按顺序硬塞值的写法不是不能用,但字段一多,或者后面结构改了,很容易把自己坑了。实际开发里,还是更推荐带字段名的写法,可读性高很多。

访问和修改字段

fmt.Println(u2.Name)
u2.Age = 19
fmt.Println(u2)

就是这么朴素,没有太多幺蛾子。

结构体也可以嵌套

现实世界里,数据往往不是一层平铺就能装下的,Go 当然也支持嵌套。

type Address struct {
    Province string
    City     string
}

type Profile struct {
    Nickname string
    Address  Address
}

p := Profile{
    Nickname: "ray",
    Address: Address{
        Province: "Zhejiang",
        City:     "Hangzhou",
    },
}

这时候访问字段就一层一层点过去。

fmt.Println(p.Address.City)

结构体指针

结构体经常会和指针一起出现,因为你不一定想每次都复制整个结构体。

user := &User{Name: "Alice", Age: 22}
fmt.Println(user.Name)
user.Age = 23

这里有个对新手很友好的地方:虽然 user 是指针,但访问字段时你依然可以直接写 user.Name,Go 会帮你做一次处理,不需要你每次都手写 (*user).Name 来折磨自己。

匿名结构体

如果这个结构只在局部用一次,懒得专门起名字,也可以用匿名结构体。

config := struct {
    Host string
    Port int
}{
    Host: "127.0.0.1",
    Port: 8080,
}

这种写法适合临时拼装小数据,但别滥用。匿名结构体一多,代码就容易散发出一种“我今天只是随便糊一下”的气质。

标签 tag 先混个脸熟

你可能已经在别人的代码里见过这种东西:

type User struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

这个反引号里的内容叫 tag,常用于 JSON、数据库映射、校验之类的场景。现在先记住它长什么样就行,具体在 JSON 那一章我们再细说。

为什么 struct 重要

因为它决定了你怎么组织业务数据。用户、订单、配置、请求参数、数据库记录,这些东西最后大概率都会落到结构体上。如果前面学的是字词句,struct 基本就是开始写段落了。

小结

这一章没什么特别刁钻的东西,核心就这些:

  • struct 用来组织一组相关的数据。
  • 推荐用带字段名的方式初始化。
  • 结构体和指针经常一起出现,但用起来并不吓人。
  • tag 是后面做 JSON、ORM、校验时的高频角色。

下一章我们继续往前一步,看看方法和接口。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