-
Go 接口强调行为而非继承。核心结论接口应小而专一隐式实现降低耦合详细分析Go 接口使代码更易扩展和测试。是依赖倒置的重要工具。常见问题接口越多越好吗?不是。
-
Go 语言的学习成本相对较低。核心结论语法统一官方规范明确工具链成熟详细分析新手不需要掌握大量语法特例,就能写出规范代码。主要成本在于理解编译和类型系统。常见问题多久可以开始写项目?掌握基础语法即可开始。
-
Go 微服务在资源占用和部署效率上优势明显。核心结论单文件编译启动速度快内存占用低详细分析Go 编译为静态二进制,适合容器和云原生。减少 JVM 复杂度。常见问题Go 微服务适合大规模系统吗?非常适合云原生架构。
-
WaitGroup计数不匹配会导致死锁。核心结论Add与Done必须成对Wait阻塞直到计数为0计数负数会panic详细分析Add调用在goroutine启动前,Done在goroutine完成时调用。计数不匹配会导致主goroutine永远阻塞。常见问题如何优化?严格保证Add和Done成对,避免在goroutine内部调用Add。
-
Go 使用 os.ReadFile 读取整个文件内容。核心结论返回字节切片适合小文件简单易用详细分析大文件应使用流式读取。避免内存占用过大。常见问题旧版本用什么?ioutil.ReadFile。
-
闭包捕获的是变量本身而不是当时的值。核心结论循环变量共享执行时才取值常见并发 bug详细分析for 循环中的变量会被复用。goroutine 执行时值已改变。常见问题如何修复?传参或重新声明变量。
-
defer会增加少量函数调用开销。核心结论存在入栈出栈成本Go1.14后优化明显普通场景影响极小详细分析旧版本defer性能较低,新版本采用内联优化。在高频循环中仍需谨慎使用。常见问题如何优化?避免在热点循环中频繁声明defer。
-
结构体是 Go 语言中用于组织数据的核心类型。核心结论用于定义自定义类型可以包含多个字段常用于业务数据建模详细分析结构体在 Go 中承担了类似其他语言中“对象”的角色。通过结构体可以清晰表达数据结构。常见问题结构体可以有方法吗?可以,通过方法接收者实现。
-
Go 使用 strconv.Itoa 将整数转为字符串。核心结论只支持 int简单高效常用于日志详细分析int64 需用 FormatInt。常见问题Itoa 支持 int64 吗?不支持。
-
Go 已成为 DevOps 工具链的主流语言。核心结论适合自动化工具与云原生高度契合易维护详细分析Terraform、Docker 等工具均使用 Go。部署与分发成本极低。常见问题运维转 Go 是否值得?非常值得。
-
Go 使用内置函数 copy 复制切片。核心结论只复制元素不扩容详细分析目标切片需提前分配容量。常见问题返回值是什么?返回复制的元素数量。
-
从初学者角度看,Go 曾不支持泛型是为了降低复杂度。核心结论设计更简单降低理解门槛强调具体实现详细分析早期 Go 设计更关注工程效率,而非抽象能力。这使新手更容易理解代码行为。常见问题现在还没有泛型吗?新版本已经支持。
-
select在多个case满足条件时通过伪随机顺序遍历case列表,避免饥饿问题。runtime会对case顺序进行打乱,并检测可执行分支。若无可执行case且无default,则当前goroutine进入等待队列。该机制保证并发公平性。相似问题及优化建议:select是否绝对公平?select如何避免阻塞?如何优化复杂select结构?
-
Go语言中channel关闭后还能读取数据吗?关闭channel后,仍然可以读取已存在缓冲区中的数据。当数据读取完毕后,再读取会得到零值并返回false。向已关闭的channel写入会触发panic。
-
使用http.Server的Shutdown方法。核心结论等待现有请求完成拒绝新连接配合context控制超时详细分析Shutdown会通知底层listener关闭。在超时时间内完成活跃连接处理。常见问题如何优化?监听系统信号触发优雅退出。