Go 骨架代码

Go 标志性骨架代码行,配合代码模式练习(大小写敏感)

词条计数说明

本页展示前 50 词 / 完整 50 词。该词库全部 50 条已完整列出。

术语对照与用法说明

下面按用途归类的 Go 词汇,全部来自本页词库;分组只改变呈现顺序,词形与释义与下方完整词条列表逐条一致。

这份词库的词条不是单个单词,而是整行 Go 骨架代码——`if err != nil { return err }`、`go worker(wg, jobCh)`、`wg.Add(len(jobList))` 这样的最小可编译片段。练习方式建议配合应用内的代码模式:大小写敏感,`{`/`}`、缩进与分号都要照打,这练的是把代码结构敲进肌肉记忆,而不是认单词。下面按「这行代码在做什么」归类,同一组里的行通常一起出现在同一个函数里。

下面 6 个场景分组覆盖本页全部 50 个词条, 分组依据是词条本身的用途(代码型词库按每行代码的职责归类,术语型词库按词形归类),不是人工随意编排。

并发、通道与取消12 词

goroutine、channel、锁、原子操作与上下文取消——Go 并发的主干词汇。

  • var wg sync.WaitGroup
  • wg.Add(len(jobList))
  • go worker(wg, jobCh)
  • go func() { jobs <- i }()
  • ch := make(chan string, 10)
  • for msg := range msgCh {
  • select { case v := <-ch: use(v) }
  • ctx, cancel := context.WithCancel(ctx)
  • ticker := time.NewTicker(time.Second)
  • time.Sleep(2 * time.Second)
  • var mu sync.RWMutex
  • atomic.AddInt64(&counter, 1)

序列化、格式化与文件读写6 词

结构体与 JSON 之间的来回转换、fmt 字符串拼接,以及把字节写进文件。

  • err := json.Unmarshal(raw, &cfg)
  • out, err := json.Marshal(v)
  • fmt.Sprintf("%s-%d", name, idx)
  • label := fmt.Sprintf("worker-%d", id)
  • os.WriteFile(path, data, 0644)
  • w.Header().Set("Content-Type", "application/json")

错误处理与资源释放8 词

err 冒泡、错误包装与 defer 收尾——Go 里最该形成肌肉记忆的一段。

  • if err != nil { return err }
  • if err != nil { log.Fatal(err) }
  • data, err := os.ReadFile(path)
  • count, err := strconv.Atoi(input)
  • defer resp.Body.Close()
  • return nil, fmt.Errorf("no user")
  • fmt.Errorf("read %s: %w", path, err)
  • errors.New("invalid input")

类型定义、方法签名与服务骨架10 词

结构体声明、构造函数、指针接收者方法与 Stringer 接口,加上起服务、注册路由、写响应头与 t.Run 子测试。

  • type User struct { ID int; Name string }
  • type Server struct {
  • func NewServer(cfg Config) (*Server, error) {
  • func (s *Server) Start() error {
  • func (u *User) String() string {
  • return &Server{cfg: cfg}, nil
  • t.Run("case1", func(t *testing.T) {
  • srv := &http.Server{Addr: ":8080"}
  • http.HandleFunc("/health", healthCheck)
  • w.WriteHeader(http.StatusOK)

流程控制与变量声明5 词

带初始化语句的 if、类型 switch,以及带初始值的 var 与包级 const。

  • if n := len(items); n > 0 {
  • switch v := x.(type) {
  • var retryCount int = 3
  • const MaxRetries = 3
  • if strings.HasPrefix(name, "test") {

集合与字符串处理9 词

map 增删查、切片追加、strings 系列与字节缓冲区。

  • m := make(map[string][]int)
  • m[key] = append(m[key], value)
  • config, ok := m["config"]
  • delete(cache, staleKey)
  • s := strings.TrimSpace(input)
  • parts := strings.Split(line, ",")
  • joined := strings.Join(paths, "/")
  • buf := new(bytes.Buffer)
  • b, _ := io.ReadAll(resp.Body)

相关词库

这几个词库在真实工作里常一起出现,可以连着练: 后端服务与运维、推理任务与集群、前端框架与工程化词各成一条线。

词汇列表

if err != nil { return err }
Go 经典错误检查:出错直接返回
if err != nil { log.Fatal(err) }
错误致命时打日志并退出进程
data, err := os.ReadFile(path)
一次性读取整个文件内容
err := json.Unmarshal(raw, &cfg)
把 JSON 字节反序列化到结构体
out, err := json.Marshal(v)
把值序列化为 JSON 字节
count, err := strconv.Atoi(input)
字符串转整数并返回错误
if n := len(items); n > 0 {
if 带初始化语句:先求长度再判断
switch v := x.(type) {
类型 switch:按运行时类型分支
var wg sync.WaitGroup
声明等待组用于并发收口
wg.Add(len(jobList))
按任务数设置等待组计数
go worker(wg, jobCh)
起一个 goroutine 执行工人函数
go func() { jobs <- i }()
匿名 goroutine 把任务写进通道
ch := make(chan string, 10)
创建带 10 缓冲的字符串通道
for msg := range msgCh {
range 持续接收通道消息
select { case v := <-ch: use(v) }
select 多路监听通道收发
defer resp.Body.Close()
延迟到函数退出时关闭响应体
ctx, cancel := context.WithCancel(ctx)
派生可取消的上下文
ticker := time.NewTicker(time.Second)
创建 1 秒周期的定时器
time.Sleep(2 * time.Second)
休眠 2 秒模拟等待
var mu sync.RWMutex
声明读写互斥锁保护共享数据
atomic.AddInt64(&counter, 1)
原子操作给计数器加一
type User struct { ID int; Name string }
定义 User 结构体(含两个字段)
type Server struct {
定义 Server 结构体(起头)
func NewServer(cfg Config) (*Server, error) {
Server 构造函数,返回实例与错误
func (s *Server) Start() error {
定义 Server 指针接收者的 Start 方法
func (u *User) String() string {
实现 Stringer 接口的自定义打印
return &Server{cfg: cfg}, nil
返回构造好的 Server 实例
return nil, fmt.Errorf("no user")
返回空值与格式化的错误
fmt.Errorf("read %s: %w", path, err)
格式化错误并用 %w 包装底层错误
errors.New("invalid input")
创建一个新的错误值
var retryCount int = 3
声明带初始值的重试计数变量
const MaxRetries = 3
声明最大重试次数常量
m := make(map[string][]int)
创建键到整数切片的映射
m[key] = append(m[key], value)
向 map 中的切片追加元素
config, ok := m["config"]
双返回值检查 map 键是否存在
delete(cache, staleKey)
删除 map 中过期的键
s := strings.TrimSpace(input)
去除字符串首尾空白
parts := strings.Split(line, ",")
按逗号切分字符串成切片
joined := strings.Join(paths, "/")
用斜杠连接路径切片
if strings.HasPrefix(name, "test") {
判断名字是否以 test 开头
buf := new(bytes.Buffer)
新建字节缓冲区
b, _ := io.ReadAll(resp.Body)
一次性读出响应体全部字节
fmt.Sprintf("%s-%d", name, idx)
格式化拼接名称与序号
label := fmt.Sprintf("worker-%d", id)
生成工人编号标签
os.WriteFile(path, data, 0644)
写文件并指定 0644 权限
t.Run("case1", func(t *testing.T) {
定义可独立运行的子测试用例
srv := &http.Server{Addr: ":8080"}
构造监听 8080 端口的 HTTP 服务
http.HandleFunc("/health", healthCheck)
注册健康检查路由
w.Header().Set("Content-Type", "application/json")
设置响应头为 JSON 类型
w.WriteHeader(http.StatusOK)
写回 200 状态码

使用说明

以上词条与释义直接来自本词库的内容包(go-code),未做改写。 本页是静态索引页,只列出词条与释义,不提供练习;完整词库、打字练习与复习调度请进入应用。

进入完整词库 →