golang
已收录文章:669篇
-
log.SetOutput用于设置Go日志输出目标,通过指定io.Writer接口实现日志写入文件、终端或多目标,结合SetFlags可定制格式,是构建灵活日志系统的基础。353 收藏
-
Go语言中sync/atomic包提供原子操作支持,适用于多协程环境下无锁安全读写;2.原子操作保证变量访问不可中断,避免数据不一致,相比互斥锁更轻量高效;3.支持int32、int64等基本类型,不直接支持float;4.常用函数包括LoadXXX、StoreXXX、AddXXX、SwapXXX和CompareAndSwapXXX;5.适用于计数器、状态标志等简单共享变量场景。352 收藏
-
答案是利用goroutine和channel结合同步机制设计高效队列。通过channel实现基础并发安全队列,使用缓冲channel平衡吞吐与内存;自定义队列时采用切片加sync.Mutex或RWMutex保护共享状态,注意锁竞争瓶颈;配合sync.Pool复用对象减少GC压力;避免忙等、误关channel、长时持锁等问题,根据业务需求选择合适模型。351 收藏
-
使用os.MkdirAll可递归创建多级目录,filepath.Walk能深度优先遍历目录结构,二者结合可用于初始化项目路径并处理文件,如定期清理过期日志。350 收藏
-
Golang中指针和值类型的最大区别在于数据存储和传递方式。值类型直接存储数据,赋值和传递时会复制独立副本,如int、float、bool和struct;指针则存储内存地址,允许间接访问和修改原始数据。在内存分配上,值类型声明即分配固定空间,而指针本身仅存地址,实际数据可在堆或栈上分配,使用new创建的堆内存由垃圾回收管理。函数参数传递时,值类型传递副本,不影响原始变量,适合小数据和数据安全场景;指针类型传递地址,可修改原始数据,避免复制开销,适合大型结构体或需修改外部变量的情况。使用指针需注意空指针解引348 收藏
-
Go语言通过gotest的benchmark功能量化性能,编写以Benchmark开头、接收*testing.B参数的函数,运行gotest-bench=.可得ns/op等指标,结合-benchmem分析内存分配,利用b.ResetTimer等控制计时,横向对比不同实现以优化高频场景性能。348 收藏