golang
已收录文章:14427篇
-
iota的使用 iota在const关键字出现时将被重置为0 iota只能在常量的表达式中使用,iota在const关键字出现时将被重置为0。不同const定义块互不干扰。 //const关键字出现时将被重置为0 const ( a = iota /216 收藏
-
不能直接用rate.NewLimiter做三维度限流,因其无key概念,所有请求共享同一令牌桶;必须为每个IP+用户ID+接口路径组合创建独立limiter实例,并用sync.Map安全存取、定时清理过期项。215 收藏
-
Golang中异步任务执行依赖goroutine和channel。通过go关键字启动协程实现非阻塞运行,如sendEmail函数异步执行;利用channel传递完成信号或数据,实现协程间通信与同步;使用sync.WaitGroup管理多个任务的并发执行与等待,确保全部完成;需注意循环变量共享、channel泄漏和资源竞争等常见问题,合理运用机制可构建高效可靠的并发程序。215 收藏
-
并发安全的关键是保护指针指向的数据而非指针本身,多goroutine下需防止数据竞争。使用atomic可对简单类型实现高效无锁操作,如原子读写、增减和比较交换,适用于计数器等单一变量场景;涉及复杂结构或多个操作原子性时应选用mutex或RWMutex,确保临界区互斥,读多写少用RWMutex提升性能。基本原则:优先atomic保证性能,复杂逻辑用锁确保正确性,结合-race工具检测问题。215 收藏
-
接口定义行为规范,指针实现可避免复制、提升性能并修改状态。Dog和Car用指针实现Mover接口,避免值拷贝;大型结构体或需修改状态时应使用指针接收者;接口零值为nil,调用前需判空;接口可组合,如ReadWriter嵌入Reader和Writer,提升复用性。215 收藏
-
Go通过encoding/json包实现JSON处理,使用struct标签映射字段,json.Marshal/Unmarshal进行序列化与反序列化,支持omitempty、-等标签控制输出行为,结构体字段需大写开头,可结合map[string]interface{}处理动态JSON。215 收藏