golang
已收录文章:655篇
-
使用context.Context可安全传递请求ID和元数据,通过WithValue存值、goroutine间传递Context、Value取值,并结合自定义键类型避免冲突,适用于中间件、超时取消等场景。112 收藏
-
使用互斥锁或独立调度goroutine可实现Go定时器的并发安全。1.原生Timer非线程安全,多协程操作易引发竞态;2.通过sync.Mutex封装Reset和Stop操作,确保同一时间仅一个goroutine访问;3.更高阶方案是用channel通信,将Timer置于单独goroutine中,外部发送控制指令,避免共享状态;4.对于周期任务,应由专用goroutine持有Ticker,并通过channel接收停止信号;5.简单场景选Mutex,复杂调度选事件驱动模型,核心原则是避免多协程直接操作同一T111 收藏
-
协程优化需控制数量、减少阻塞、合理调度与资源复用。1.用workerpool和缓冲channel限制并发,避免无限创建;2.防止channel无配对读写、网络无超时等阻塞问题;3.利用sync.Pool缓存对象,减少GC压力;4.结合pprof、trace等工具监控协程行为,定位瓶颈。111 收藏
-
Go语言中类型转换需显式进行,不可隐式转换。1.数值类型通过T(v)语法转换,小范围转大范围安全,大范围转小范围可能溢出;整型与浮点互转时截断小数部分。2.字符串与数值转换依赖strconv包,Atoi、ParseInt等用于字符串转数字并处理错误,Itoa、FormatFloat等用于数字转字符串,也可用fmt.Sprintf实现通用转换但性能较低。3.接口类型转换使用类型断言,推荐安全形式value,ok:=i.(Type)以避免panic,是实现多态的关键。掌握这三类转换可覆盖多数开发场景。110 收藏
-
使用bufio.Scanner可高效按行读取文件,适合文本处理;Scanner默认按行分割,Text()获取字符串,适用于日志等场景。108 收藏
-
Go通过结构体嵌套与组合实现代码复用,支持匿名字段提升字段和方法,可模拟“继承”并避免紧耦合,结合接口增强灵活性,适用于构建复杂数据模型。107 收藏