MENTAL MODEL / 心智模型
先建立正确的程序直觉
goroutine 很轻但不是免费;并发必须有取消、背压和回收路径,错误是普通值并应在边界添加上下文。
Mathematics · Computational Science · Engineering · Personal Knowledge Systems
切换会载入对应网站形态,并更换导航、首页结构、内容密度、页面网格与阅读路径;当前路径及其他查询参数会保留。
预览卡展示真实构图语言;切换后会同步改变布局密度、卡片几何、按钮、边框、HUD、背景纹样与动效节奏。
0% 会停止装饰动画并隐藏粒子;系统开启“减少动态效果”时始终优先静态显示。
0% 会移除上层面板遮罩,100% 为完全不透明;文字和控件始终保持清晰。
系统已启用减少透明效果:背景模糊会关闭,但仍采用你设置的面板不透明度。
LANG-07 · PROGRAMMING WORKBENCH
用小接口、显式错误和 goroutine 构建简单可靠的网络工具。
从模块、切片、接口与 context 进入 Go,以 gofmt、go test、race detector 和 pprof 形成标准工程闭环。
MENTAL MODEL / 心智模型
goroutine 很轻但不是免费;并发必须有取消、背压和回收路径,错误是普通值并应在边界添加上下文。
CODE REPOSITORY / 代码仓库锚点
go-project/
├─ go.mod
├─ go.sum
├─ cmd/memory-tools/main.go
├─ internal/task/service.go
└─ internal/task/service_test.goQUICK START / 第一条命令
go mod init example.com/memory-tools && go run ./cmd/memory-toolsLEARNING ROUTE / 学习路径
每个节点都包含可复制示例、判断原则与常见陷阱。
接受小接口、返回具体类型,错误通过包装保留上下文。
data, err := os.ReadFile(path)
if err != nil {
return nil, fmt.Errorf("read config %q: %w", path, err)
}%w 保留错误链,调用者可以 errors.Is/As 判断根因。
req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil)
if err != nil { return err }
resp, err := client.Do(req)context 从入口传递,不存入长期结构体;外部 I/O 应有 deadline。
main 负责装配,internal 防止外部导入,包围绕单一职责命名。
go mod init example.com/memory-tools
go mod tidy模块路径是导入身份;发布公共模块后不应随意改变。
func main() {
if err := run(context.Background(), os.Args[1:]); err != nil {
log.Printf("error: %v", err)
os.Exit(1)
}
}把可测试逻辑放入返回 error 的 run,main 只处理进程退出。
gofmt、vet、test 和 build 都来自统一 Go 工具链。
gofmt -w .
go vet ./...
go test ./...
go build ./cmd/memory-toolsCI 中格式检查可比较 gofmt 输出而不是修改文件。
$env:GOOS="linux"; $env:GOARCH="amd64"; go build ./cmd/memory-tools这是 PowerShell 示例;涉及 cgo 时还需要目标平台 C 工具链。
提交 go.mod/go.sum,用最小版本选择解析依赖并审阅升级。
go list -m all
go list -m -u all
go get example.com/module@v1.2.3
go mod tidy升级后检查 release notes 并运行测试、race 与集成验证。
go mod why -m example.com/module显示主模块为何需要该模块,便于清理与审计。
用表驱动覆盖输入矩阵,用 race detector 检查并发访问。
for _, tc := range []struct { in string; want int }{{"2", 2}, {" 5 ", 5}} {
t.Run(tc.in, func(t *testing.T) {
if got := parse(tc.in); got != tc.want { t.Fatalf("got %d", got) }
})
}循环变量语义依 Go 版本而不同;并行子测试仍应明确捕获所需值。
go test ./... -cover
go test -race ./...race 会显著变慢,只检测实际执行路径;为并发分支补充分层测试。
错误值必须处理,goroutine 必须知道如何退出。
检查无接收者发送、无发送者接收、WaitGroup 计数、未关闭通道和持锁阻塞;采集 goroutine dump。关闭通道通常由发送方负责;不要为“通知完成”随意关闭共享通道。
接口包含动态类型和值;装入 typed nil 指针后接口本身不等于 nil。返回 error 时直接 return nil。调试时同时打印接口动态类型和值。
为服务器配置超时、请求上限和取消路径,避免无限 goroutine 与内存增长。
server := &http.Server{
Addr: ":8080", Handler: handler,
ReadHeaderTimeout: 5 * time.Second,
ReadTimeout: 15 * time.Second, WriteTimeout: 15 * time.Second,
}还应限制请求体、并发、上传和下游调用时间。
SQL 参数化;exec.Command 分离参数;路径限制在可信根目录;随机数按安全用途选择 crypto/rand;秘密不写日志。接口小和内存安全不自动解决授权、注入或拒绝服务。
尝试更短的关键词,或者清空分类后重新搜索。
PRIVATE CODE VAULT / 私人代码仓库
把 Go 的练习、工程片段、算法伪代码、验证说明与历史版本保存在登录后的私人空间。
游客只看到这个说明,不会收到、缓存或渲染任何私人源码。
REFERENCE SOURCES / 官方与高质量资料
先在本站找回路径,再进入原始文档确认版本、平台和完整前置条件。
DELIVERY LOOP / 练习闭环