-
用docker.Client连本地daemon需显式指定host为unix:///var/run/docker.sock,Linux/macOS注意用户权限,WSL2需开启DockerDesktop的WSLintegration;ImagePull必须消费io.ReadCloser全部内容,否则阻塞;ContainerCreate返回的resp.ID是字符串,需传给ContainerStart;ContainerList默认只返回运行中容器,查全部需设All:true。
-
Go代码生成器中error必须为接口类型,需实现Error()方法、用%w包装、严格检查err!=nil、避免变量名冲突,并过滤error字段以兼容stringer/easyjson等工具。
-
Go中防止目录遍历需多层校验:先URL解码,再filepath.Join拼接、filepath.Clean标准化,然后比对cleanRoot前缀或用filepath.Rel检查越界;须用os.Lstat防符号链接+TOCTOU,禁用字符串拼接和os.Open竞态调用。
-
使用vendor目录可提升Go项目构建稳定性与依赖一致性。从Go1.6起,官方支持vendor机制,项目根目录下创建vendor文件夹并放入依赖包后,go命令会优先使用其中的本地副本。现代Go项目结合GoModules,可通过gomodinit初始化模块,goget添加依赖,再执行gomodvendor将所有依赖复制到vendor目录。此后gobuild、gorun、gotest等命令自动使用vendor中的依赖。可通过gomodverify检查vendor完整性。建议将vendor提交至版本控制以确保环
-
GoHTTP测试核心是用httptest.NewRequest和httptest.NewRecorder绕过网络、直接测试handler,结合mock依赖与框架适配,覆盖成功及错误路径。
-
Go适合轻量级高性能数据处理,需手动解析CSV字段并容错处理类型转换,聚合统计应手写针对性逻辑,Arrow仅推荐用于大型数据集或Parquet交互场景。
-
bufio.NewReader更快是因为它通过缓冲减少系统调用次数;默认4KB缓冲适合多数场景,超长行可调至64KB;Scanner封装强但有长度限制,ReadString更轻量需手动处理边界。
-
灰度路由核心是提取灰度标识并匹配策略,应抽象为Match函数返回版本名和是否命中;HTTP转发需在反向代理Director中动态改URL并重置req.Host;配置热更新用atomic.Value存策略指针;避免框架路由树污染,需全链路透传灰度标识。
-
base64.StdEncoding.EncodeToString是标准Base64编码函数,需传入[]byte输入,自动处理填充和分块,输出RFC4648兼容字符串,适用于HTTP、JSON等场景。
-
error是可预期、可恢复的业务失败结果,作为函数返回值需显式检查;panic是程序不可继续时的紧急终止机制,触发后默认崩溃goroutine,recover仅用于顶层兜底而非替代error。
-
备份前须确认etcd启用v3API,验证endpointhealth;用go-etcd/v3的SnapshotSave可控备份;恢复时需匹配版本、清空data-dir、设置正确启动参数;快照不含运行时状态和缓存。
-
接口兼容性问题无法被govet和gotest捕获,因其依赖运行时行为一致性(如非nil返回、错误包装等),而静态检查仅验证方法签名;需通过契约测试、构建标签多版本验证及go/types动态检查来保障。
-
fmt.Errorf支持错误包装需用%w动词,%v会丢失嵌套关系导致errors.Is/As失效;正确写法是单%w包装可Unwrap的error,多层需链式调用,避免用errors.New等不可展开类型。
-
用Go发送JSON请求需定义导出结构体并加json标签,用json.Marshal序列化,通过http.NewRequest构造POST请求并设Content-Type为application/json,再用http.Client发送,读取响应并解析。
-
桶排序需手写,因标准库未提供;核心是合理分桶、负数偏移、小桶用插入排序、预分配合并,且仅适用于均匀分布数据。