-
Go中方法必须绑定到命名类型,即通过typeT...声明的新类型,不能为未命名基础类型或类型别名定义方法;值接收者不修改原值,指针接收者可修改;接口实现需匹配方法集,*T的方法集包含值和指针接收者方法,而T仅含值接收者方法。
-
errors.New返回的错误不能直接比较相等,因其每次调用都创建新指针实例,故err==errors.New("x")恒为false;应使用errors.Is、自定义类型或谨慎用err.Error()。
-
结构体字段顺序影响内存占用是因为Go不自动重排字段,需手动按对齐要求从大到小排列以减少填充;可用unsafe.Sizeof与Offsetof或structlayout工具检测填充。
-
bufio包通过内存缓冲减少系统调用次数而非加速读写;WriteString后需显式Flush才能写入磁盘;ReadString遇EOF可能报错,须检查err;缓冲区大小应依场景调整;Reader/Writer混用同一文件需避免竞态。
-
Go1.10引入-failfast标志,可使单个包内测试在首次失败后终止;但该标志不跨包生效。本文详解其用法、局限性,并提供可靠的工作方案以实现多包场景下的“首错即停”。
-
使用strings.Builder可高效拼接字符串,避免频繁内存分配。它通过WriteString、WriteByte累积内容,String()生成结果,支持预分配Grow()提升性能,适用于日志、SQL生成等场景,但非并发安全,复用需调用Reset()。
-
net/http可快速搭建轻量可控的Mock服务,关键在于精准拦截请求并返回预设响应;需避免DefaultServeMux冲突、前缀匹配路径、设置Content-Type、支持运行时配置更新、安全透传真实API,并用常驻服务替代httptest.Server以保障可观察性与协作效率。
-
goldenfile测试本质是“存一次,比多次”,首次运行保存输出为testdata/xxx.golden,后续读取并与新输出字节或结构对比;需用程序自动生成、统一路径、规范编码与换行,避免手动修改引发隐形差异。
-
生产环境应选wkhtmltopdf而非godf,因其基于headlessWebKit可真实渲染HTML/CSS;需预装二进制、用封装库调用、显式声明中文字体路径、合理设置CSS分页规则,并通过进程池或异步任务控制并发。
-
runtime.ReadMemStats的Alloc和TotalAlloc差异大是因为前者是当前存活对象内存,后者是历史总分配量;监控泄漏需观察Alloc等字段的增量趋势,配合强制GC和时间间隔采样,而非单次读值。
-
单例模式是一种创建型设计模式,确保一个结构体在整个程序运行期间只有一个实例存在,并提供全局访问点。其核心目标是限制某个类只能被实例化一次,在Golang中通过结构体和包级变量模拟实现,常用方式包括包级变量直接初始化、懒加载+sync.Once、互斥锁控制并发访问,其中sync.Once是官方推荐做法,线程安全且代码简洁。实际应用场景包括数据库连接池、配置管理器、日志记录器、缓存服务等。使用时需注意测试困难、隐藏依赖关系、过度使用等问题,建议依赖注入、mock测试、避免滥用,以提升代码清晰度与可维护性。
-
Go爬虫核心是稳定、全面、防封、易维护:需自定义http.Client控制超时/重试/重定向,显式设User-Agent和Cookie管理,用golang.org/x/net/html解析HTML,通过channel限并发并按Host独立节流。
-
interface{}不能直接转string,强转会panic;应使用str,ok:=v.(string)判断类型,或用fmt.Sprintf("%v",v)仅作调试输出;json.RawMessage需判空再转string;推荐实现String()方法统一安全转换。
-
最高效的是用[]int实现带路径压缩和按秩合并的数组版Union-Find:parent[i]==i表示根节点,Find递归压缩路径,Union按rank比较避免退化,初始化parent[i]=i、rank全0。
-
用http.Handler包装实现日志中间件,记录method、path、status、duration_ms四个字段,使用结构化日志库(如zap),避免敏感信息泄露、I/O阻塞和上下文污染。