-
Go中应手写haversine公式计算地理距离:输入经纬度需转弧度,用6371km地球半径,固定(lat1,lng1,lat2,lng2)顺序;对asin输入做[-1,1]截断防panic;统一用float64防精度误差;手动处理经度跨180°及非法坐标。
-
值接收者传递副本,不修改原值,适合小型结构体和只读操作;指针接收者直接修改原对象,避免大结构体复制开销,推荐在需修改或结构体较大时使用,并保持同一类型方法接收者风格一致。
-
Go语言net/url包提供安全标准的URL解析与构建能力,需区分*url.URL各字段用途并用url.Values管理查询参数;解析用url.Parse()后调用Query()获取解码参数,构建时应避免字符串拼接而用PathEscape()和Encode()确保编码安全。
-
数据库查询失败需区分临时性与永久性错误,连接错误可通过重试、连接池优化应对;查询错误应通过测试和类型检查预防;约束冲突宜用唯一键处理机制;事务失败需确保回滚并支持可重试逻辑。
-
最安全是因为它天然杜绝值误用、语义模糊和零值歧义;chanbool易混淆false含义,chanint语义不清且浪费内存(bool占1字节、int占8字节),而struct{}{}占0字节、行为确定。
-
应使用redis.NewClusterClient()连接Redis集群,传入初始节点列表(至少2个),启用自动重定向与槽位路由,避免误用NewClient();Key需通过{tag}控制哈希槽,禁用跨槽命令如KEYS、事务等。
-
最稳妥组合是sync.Mutex+container/list.List+map[string]*list.Element;因其封装链表指针操作、避免裸指针误用,配合统一锁保护所有读写与淘汰逻辑,能可靠实现原子性与并发安全。
-
Go语言通过error接口显式处理错误,推荐使用errors.Is和errors.As判断错误类型,避免忽略err值;针对可预期错误进行类型识别,合理使用panic与recover应对不可恢复错误,并通过自定义错误类型和错误包装(%w)增强上下文信息,提升程序健壮性。
-
Go服务平滑重启和优雅关闭的核心是http.Server.Shutdown()配合信号监听与带超时context,且必须通过fd复用socket;缺一不可,否则丢请求、断连接、泄漏goroutine。
-
在Golang中,path库用于处理通用路径字符串,适合非操作系统层面的路径操作。1.path包提供路径拼接(Join)、目录提取(Dir)、文件名获取(Base)、路径清理(Clean)和扩展名读取(Ext)等功能;2.使用Join可智能拼接路径,避免手动处理分隔符和冗余字符,提升跨平台兼容性;3.Dir、Base、Ext组合可用于解析路径中的关键信息,便于文件处理与日志记录;4.Clean函数规范路径格式,去除多余斜杠、点号和双点号,确保输入路径一致性。该库适用于构建URL或解析资源路径等场景,但不涉
-
反引号字符串不支持变量插值,仅作纯字面量使用;它不转义任何字符(包括\n、${var}),保留全部空白与换行,适用于正则、SQL、YAML等需严格格式的场景。
-
Go1.12+才支持reflect.MapIter,应优先用reflect.Value.MapRange()安全遍历map;低于该版本需降级为MapKeys()+MapIndex(),并严格检查IsValid()和IsNil()以避免panic。
-
nats.Connect连不上JetStream是因服务端未启用,需加-js参数或配置jetstream块;js.Publish失败、消息丢失、重复消费等问题均源于JetStream未正确配置和使用。
-
os.Seek的offset从哪算取决于whence参数:SEEK_SET从文件开头、SEEK_CUR从当前位置、SEEK_END从文件末尾;非寻址设备不支持Seek,多goroutine共用*os.File时Seek会相互干扰。
-
slog默认不支持级别过滤,需自定义Handler实现:通过LevelFilterHandler包装标准Handler,在Handle方法中判断rec.Level>=minLevel决定是否输出。