-
小文件用os.ReadFile(Go1.16+)或ioutil.ReadFile(旧版),大文件用bufio.Scanner或bufio.Reader,二进制文件用os.Open+io.ReadFull或binary.Read,GBK等编码需用golang.org/x/text/encoding处理。
-
Gomapdelete不缩容,空桶残留致内存碎片;值类型优化使GC不扫描值引用,仅map整体不可达才回收;重建map或显式置nil是唯一有效清理方式。
-
sync.Map不适合高频写入场景,因其为读多写少设计,写操作触发dirtymap提升、键拷贝和全量迁移,万级写入时性能断崖下降且GC压力剧增。
-
Go的sort库通过接口与混合算法实现高效通用排序。它支持基本类型便捷排序,并利用sort.Interface或sort.Slice实现自定义排序,底层采用Introsort结合快排、堆排和插入排序,确保性能稳定。
-
Go错误码设计必须用具名类型(如ErrorCodeint)和结构体(如*BizError)实现,禁止直接用int;需分模块编号、查表映射HTTP状态码,并通过errors.As提取,确保类型安全与语义清晰。
-
base64.StdEncoding.EncodeToString只接受[]byte,不接受string或nil切片;传"hello"会编译失败,必须写[]byte("hello");解码前需strings.TrimSpace清洗并匹配编码器,URL场景须用URLEncoding。
-
Go的net/http包内置轻量,几行代码即可启动Web服务器;通过http.HandleFunc注册处理器,用http.ListenAndServe监听端口;请求参数可从r.URL.Query()、r.FormValue()或json.NewDecoder(r.Body)获取;响应需用w.WriteHeader()设状态码、w.Header().Set()设头;路由可用默认ServeMux或gorilla/mux等第三方库;中间件通过包装http.Handler实现。
-
Go项目中重复依赖源于模块路径冲突、间接依赖版本不一致或replace/exclude误用;表现为同一路径多版本共存,可用golist-mall或gomodgraph定位,需手动统一版本并验证编译。
-
Go语言通过net包实现TCP通信,先启动服务器监听端口,再运行客户端连接并收发消息。服务器使用net.Listen监听,Accept接收连接,并用goroutine处理每个连接;客户端通过net.Dial连接服务器,发送数据并读取回显。程序以换行符分隔消息,支持多客户端并发,体现Go的高并发优势。
-
Go语言API版本管理需显式实现,推荐URL路径嵌入主版本号(如/v1),辅以子路由器隔离;Accept头仅限内部调用;须通过中间件注入版本上下文;废弃版本应返回410或308,并添加弃用响应头。
-
本文深入剖析Go并发编程中因通道阻塞导致WaitGroup无法完成而引发死锁的常见场景,重点解释为何goroutine在out<-item处永久挂起,并提供可立即落地的修复方案与调试技巧。
-
Go反射无法访问私有字段,必须用unsafe.Offsetof计算偏移量配合unsafe.Pointer读取,但存在跨平台不稳定、内存安全风险及维护成本高等问题。
-
需手动按RFC1035构造DNS查询包:初始化12字节头部→域名label-wise编码(长度字节+标签+0x00)→写QTYPE/QCLASS(uint16大端)→UDP发送(≤512字节)。
-
Gomodules是Go1.11引入的依赖管理机制,默认仅在GOPATH外启用;需确保项目不在$GOPATH/src下,执行gomodinit初始化,再用gomodtidy或gobuild自动下载并记录依赖,replace用于临时替换依赖但不可提交至生产环境。
-
深拷贝结构体需用reflect手动遍历字段,确保目标可寻址、跳过不可导出字段、递归处理引用类型、校验类型兼容性,并避免误用reflect.Copy。