
切片
Go字符串拼接应按场景选择:小量固定用+或fmt.Sprintf,大量动态必须用strings.Builder;+在循环中为O(n²)低效;Builder需预分配、复用并调String()生成结果。
bytes.Buffer是可读写的字节缓冲区,同时实现io.Reader和io.Writer接口,支持边写边读、重复读和修改;底层用[]byte自动扩容但不自动清空,需用Reset()安全复用。
用sync.Pool复用对象可显著降低GC压力,适用于创建开销大、生命周期短、可重置的无状态对象,需手动Reset并提供fallback创建逻辑,且不可依赖必然命中。
strtok不能保留空段且无法区分分隔符语义,因其将分隔符集合视为等价并自动跳过连续分隔符间的空字符串;需用find_first_of手动切片、strtok_r线程安全替代或regex处理复杂规则。
必须用指针接收者:修改字段、大结构体、实现接口、统一风格——语义上表示“方法会改变接收者”,避免副本无效修改与接口实现失败。
sort.Slice快但不稳定,相等元素顺序可能改变;sort.SliceStable稳定但稍慢,保证相等元素相对顺序不变,适用于分页、虚拟滚动等需可预期序的场景。
本文详解如何在GorillaMux路由器中,从GET请求的查询字符串(如/api/v3?id=hello&password=great&product=ipad&confirm...
nil仅是六类引用类型的零值,非所有类型都支持nil比较;判断“空”需按类型区分,初始化方式决定nil或非nil状态,方法调用是否panic取决于是否解引用nil接收者。
享元对象必须不可变以确保共享安全,Go中需通过设计约束实现:字段导出但无setter、构造时传值不传引用、可变类型深拷贝;工厂用mutex保护map实现线程安全池化;严格区分内在与外在状态;小对象池化...
Go基准测试是用gotest-bench运行的性能验证手段,提供可复现、可对比、防编译器干扰的量化依据;手动测易受干扰且编译器可能删除未使用计算。