-
使用WebSocket实现Golang消息通知,通过gorilla/websocket库建立持久连接,每个连接由独立goroutine处理;利用全局map存储用户ID与连接的映射关系,登录时注册,断开时清理;发送通知时查表并写入JSON消息;前端通过JavaScript监听消息并更新UI,支持重连机制,可扩展至Redis集群与离线队列。212 收藏 -
Go的http.Client默认完全不重试,所有重试必须手动实现:需新建请求、区分可重试错误、用指数退避+抖动、正确处理Body重放与context生命周期。212 收藏 -
无缓冲channel的发送和接收必须在不同goroutine中成对发生,否则会阻塞导致死锁;它像无存水空间的水管,一端发送时另一端必须立即接收。212 收藏 -
time.Now()默认返回本地时区时间而非UTC;Parse/Format的layout基于固定参考时间“2006-01-02”,AddDate才是正确处理日历日期偏移的方式,比较时间应优先使用Equal/Before/After而非==。212 收藏 -
Go数组是值类型、固定长度,栈或堆分配,不可扩容;声明需明确长度,如[3]int;传参时复制整个数组,修改不影响原数组,需传*[3]int指针才能修改;可转切片,但切片转数组需长度严格匹配;仅在值语义、定长、栈优化或CGO场景使用。212 收藏 -
err!=nil有时不生效,因接口值由动态类型和动态值组成,仅当二者均为nil时才真为nil;传入*MyErr(nil)会使动态类型非空,导致判空失效。212 收藏 -
在Go中调用多返回值函数时,若需对部分返回值进行赋值(已有变量)、部分进行声明(新变量),不能混用=和:=;必须统一使用:=进行短声明,但需注意作用域与变量遮蔽问题。211 收藏 -
syscall在Go中开销高是因为每次调用需用户态到内核态切换、g0栈切换、参数拷贝及信号处理准备;高频小I/O下尤为明显,而bufio缓冲和文件复用可显著优化。211 收藏 -
优先选用github.com/yourbasic/bloom库,它经压测支持原子写入、自动计算最优参数,避免手写布隆过滤器在并发Add时因位覆盖或漏置导致误判率失控。211 收藏 -
Golang凭借goroutines和net包实现高效TCP服务器,核心是监听端口、接受连接并为每个连接启动goroutine处理;通过defer关闭连接、设置读写超时、合理处理EOF和网络错误,可有效管理连接;结合日志、netstat、客户端模拟及pprof工具,能有效调试并发安全、阻塞操作和连接泄漏等问题。211 收藏 -
无缓冲channel一发就死锁,因其是同步通道:发送操作会立即阻塞,必须有另一goroutine同时执行接收操作才能配对完成,否则所有goroutine休眠触发deadlock。211 收藏 -
Go语言无内置参数加解密机制,需在handler或中间件中显式处理:从RawQuery或ReadAll(Body)获取原始密文,base64解码后用crypto/aes+CBC/GCM解密,校验PKCS7填充与UTF-8有效性,并通过KMS安全管理密钥。211 收藏 -
Go不支持类似C++的引用传参,必须显式传递接口变量的指针(如&i),再通过反射或类型断言解引用赋值,才能让调用方的接口变量非nil并持有具体实现。210 收藏 -
!!!!210 收藏 -
监控Go并发瓶颈需聚焦四维度:1.查Goroutine状态,用/debug/pprof/goroutine?debug=2定位阻塞协程;2.用blockprofile分析channel、锁、系统调用阻塞;3.通过heap和allocsprofile识别GC频繁与对象分配问题;4.确保监控自身不拖慢业务,如metrics超时控制与pprof端口隔离。210 收藏