Go问答技术文章
-
Go 错误设计应清晰且可追踪。核心结论错误要有语义支持错误包装便于定位问题详细分析errors.Is 和 errors.As 是关键工具。避免字符串比较。常见问题自定义 error 结构体好吗?在复杂系统中推荐。168 收藏 -
range 遍历切片时,元素是值拷贝而不是原始引用。核心结论range 返回的是副本修改不会影响原切片容易产生隐藏 bug详细分析range 每次迭代都会拷贝元素值。对结构体或指针尤为危险。常见问题如何安全修改切片元素?使用索引访问。398 收藏 -
Go map 默认不是线程安全的。核心结论并发读写会 panic需加锁或使用 sync.Map设计阶段需注意详细分析map 读写需通过 mutex 保护。sync.Map 适合读多写少。常见问题sync.Map 能完全替代 map 吗?不能。241 收藏 -
defer 采用后进先出执行顺序。核心结论类似栈结构函数返回前执行影响性能详细分析defer 在资源释放中非常重要。大量使用需注意性能。常见问题循环中使用 defer 合适吗?通常不推荐。413 收藏 -
sync.Map 针对读多写少场景优化。核心结论内部使用 read/dirty map避免频繁加锁不适合所有场景详细分析写入成本高于普通 map。遍历顺序不保证。常见问题可以替代所有 map 吗?不可以。164 收藏 -
channel 关闭后仍然可以读取。核心结论会读到零值ok 标志为 false不会 panic详细分析关闭表示不再写入。用于广播结束信号。常见问题重复 close 会怎样?会 panic。402 收藏 -
Go 使用 json.Marshal 将结构体转 JSON。核心结论字段需导出支持 tag 控制详细分析未导出字段会被忽略。常见问题怎么美化输出?使用 MarshalIndent。431 收藏 -
context 通过 Done channel 传播取消信号。核心结论基于 channel支持层级取消是并发控制核心详细分析WithCancel 会返回可取消 context。子 context 会继承取消。常见问题为什么不能存到 struct?context 应显式传递。401 收藏 -
Go 是构建高并发后端系统的理想语言。核心结论原生支持高并发调度模型简单高效工程落地成本低详细分析Go 通过 goroutine 和调度器,降低了并发编程复杂度。相比传统线程模型,更容易写出稳定服务。常见问题Go 并发适合什么业务?高 I/O、API 服务、网关、微服务。488 收藏 -
Go 使用 go 关键字启动 goroutine。核心结论非常轻量由调度器管理详细分析go 后面必须是函数调用。常见问题主函数结束会怎样?程序直接退出。162 收藏 -
Go 可通过 []byte(string) 将字符串转为字节数组。核心结论类型转换即可会产生拷贝常用于 IO 操作详细分析字符串和字节切片底层不同。转换后可修改字节内容。常见问题是否有零拷贝方式?不安全,不推荐。186 收藏 -
Go 使用 strconv.ParseBool 将字符串转换为布尔值。核心结论支持 true/false支持 1/0忽略大小写详细分析ParseBool 常用于配置解析。非法值会返回 error。常见问题"yes" 可以吗?不支持。476 收藏 -
接口用于定义行为规范,而不关心具体实现。核心结论实现解耦提升扩展性无需显式声明实现详细分析Go 的接口是隐式实现的,只要方法匹配即可。这种方式让代码更加灵活。常见问题接口是不是越多越好?不建议过度设计。479 收藏 -
闭包捕获的是变量本身而不是当时的值。核心结论循环变量共享执行时才取值常见并发 bug详细分析for 循环中的变量会被复用。goroutine 执行时值已改变。常见问题如何修复?传参或重新声明变量。451 收藏 -
Go 使用 strconv.Itoa 将整数转为字符串。核心结论只支持 int简单高效常用于日志详细分析int64 需用 FormatInt。常见问题Itoa 支持 int64 吗?不支持。445 收藏