-
提前发现nil指针解引用需:方法开头加nil判断、返回指针时明确文档说明、调用方主动检查、用govet辅助分析、单元测试覆盖nil输入场景。190 收藏 -
策略模式在Go中需手动注册、避免空方法和硬编码判断;应定义精简接口(如Pay/SupportsCurrency)、用sync.Map动态注册、结构体传参、无状态优先。331 收藏 -
最轻量的goroutine泄漏检测方式是runtime.NumGoroutine(),通过操作前后计数差值判断是否回归基线,需显式等待goroutine退出并多次采样取最小值以避免误报。135 收藏 -
本文介绍如何通过封装通用的get和set辅助函数,避免在Go中对map[string]interface{}层层嵌套使用冗长的类型断言(如.([]interface{})[0].(map[string]interface{})["key"]),实现类似Python的简洁路径访问语法。347 收藏 -
享元对象必须不可变以保证线程安全,字段初始化后禁止修改,上下文数据应通过方法参数传入;推荐用sync.Pool替代带锁map实现工厂;键宜用可比较struct而非拼接string。297 收藏 -
struct.field.subfield=value会panic是因为Go链式求值中任一中间指针为nil时立即崩溃;嵌套结构体不自动初始化,指针字段默认为nil,需逐层检查并初始化后才能安全赋值。424 收藏 -
Go的http.Client必须显式配置三阶段超时:DialContext.Timeout控制连接建立,TLSHandshakeTimeout控制TLS握手,ResponseHeaderTimeout控制响应头读取;流式读取还需为resp.Body.Read()单独设context超时。291 收藏 -
Go语言从1.11起通过gomod实现依赖管理,核心步骤包括:初始化模块生成go.mod文件;自动添加依赖并记录版本;精确控制依赖版本与清理冗余;配置私有模块和代理提升下载效率。202 收藏 -
反射不能真正实现代码混淆,它只是在运行时动态访问已有结构;混淆必须发生在编译或字节码层面,反射反而会暴露更多原始信息。432 收藏 -
Go的fmt.Printf不支持\_Golang这种写法,它不是合法格式动词;需用字符串拼接或strings.Repeat实现下划线效果,如fmt.Printf("%s\n%s\n",s,strings.Repeat("_",len(s)))。130 收藏 -
正确做法是构造带超时的http.Client实例,用context.WithTimeout控制单次请求生命周期,复用Client并配置Transport参数,显式关闭resp.Body,检查StatusCode并解析错误响应体。155 收藏 -
Unixdomainsocket常见问题根因是路径权限、文件残留和配置误用:需确保父目录可写、启动前显式删除旧socket、设umask或chmod修正权限;客户端须用绝对路径且与服务端完全一致;服务端应使用UnixListener+Accept并发处理,避免阻塞;SO_REUSEPORT不适用Unixsocket。327 收藏 -
Go标准库无UUID包,需用github.com/google/uuid;推荐NewString()提升性能;UUIDv4作主键会降低索引性能,应转存BINARY(16)或改用自增ID。500 收藏 -
Go程序性能瓶颈常源于锁粒度过大,应缩小临界区、移出耗时操作;RWMutex在写频繁时可能不如Mutex;atomic.Value适合高频读低频写;sync.Pool可减少分配导致的锁争用。206 收藏 -
os.IsTemporary专用于检测系统调用返回的可重试错误码(如EAGAIN、EWOULDBLOCK),非通用“是否该重试”判断;实际应结合syscall错误码、操作类型及文件系统语义综合判定。219 收藏