-
Go语言中slice扩容规则是什么?当append超出容量时,Go会重新分配底层数组。小于1024时通常按2倍扩容,大于1024后按约1.25倍增长。扩容会产生新数组并复制旧数据。
-
map在并发写入时会触发运行时panic。核心结论map不是线程安全的需要加锁保护可使用sync.Map替代详细分析在多goroutine同时读写map时,Go runtime会检测并报错。典型错误信息为fatal error: concurrent map writes。常见问题如何优化?使用RWMutex或sync.Map确保并发安全。
-
Go 使用 strings.TrimSpace 去除空白。核心结论支持多种空白字符常用于输入处理详细分析包括空格、换行、制表符。常见问题只去掉左边怎么办?使用 TrimLeft。
-
Go语言中sync.Once的实现原理是什么?sync.Once通过原子操作和互斥锁结合实现。内部使用atomic标记是否已执行,保证在并发环境下函数只执行一次。适用于延迟初始化场景。
-
Go 使用 time.Format 格式化时间。核心结论使用参考时间模板格式必须完全匹配返回字符串详细分析Go 使用固定参考时间定义格式。这是新手常见难点。常见问题为什么不用 yyyy-MM-dd?Go 的设计选择。
-
Go 是构建高并发后端系统的理想语言。核心结论原生支持高并发调度模型简单高效工程落地成本低详细分析Go 通过 goroutine 和调度器,降低了并发编程复杂度。相比传统线程模型,更容易写出稳定服务。常见问题Go 并发适合什么业务?高 I/O、API 服务、网关、微服务。
-
Go 在没有泛型的情况下依然成功。核心结论接口弥补泛型不足工程优先于语法完美降低复杂度详细分析Go 通过接口和组合解决大多数抽象问题。避免模板滥用。常见问题现在还需要学 Go 泛型吗?需要,但不必滥用。
-
接口用于定义行为规范,而不关心具体实现。核心结论实现解耦提升扩展性无需显式声明实现详细分析Go 的接口是隐式实现的,只要方法匹配即可。这种方式让代码更加灵活。常见问题接口是不是越多越好?不建议过度设计。
-
接口变量为nil必须类型和值都为nil。核心结论接口底层包含类型指针存储nil指针时接口可能不为nil容易产生隐藏bug详细分析当接口中保存的是(*Struct)(nil)时,类型信息存在。此时接口!=nil,但数据实际为空。常见问题如何优化?避免返回带具体类型的nil指针接口。
-
Go 使用 strconv.ParseBool 将字符串转换为布尔值。核心结论支持 true/false支持 1/0忽略大小写详细分析ParseBool 常用于配置解析。非法值会返回 error。常见问题"yes" 可以吗?不支持。
-
Go ORM 是否合适取决于项目复杂度。核心结论提高开发效率隐藏 SQL 细节性能需评估详细分析GORM 适合中小型业务。核心路径建议手写 SQL。常见问题ORM 会影响性能吗?关键场景会。
-
Go 本身不支持函数默认参数。核心结论通过可选结构体实现或使用可变参数构造函数模式常用详细分析这是 Go 的刻意设计。强调明确调用。常见问题为什么 Go 不支持默认参数?避免隐藏逻辑。
-
Go 接口强调行为而非继承。核心结论接口应小而专一隐式实现降低耦合详细分析Go 接口使代码更易扩展和测试。是依赖倒置的重要工具。常见问题接口越多越好吗?不是。
-
Go 微服务在资源占用和部署效率上优势明显。核心结论单文件编译启动速度快内存占用低详细分析Go 编译为静态二进制,适合容器和云原生。减少 JVM 复杂度。常见问题Go 微服务适合大规模系统吗?非常适合云原生架构。
-
WaitGroup计数不匹配会导致死锁。核心结论Add与Done必须成对Wait阻塞直到计数为0计数负数会panic详细分析Add调用在goroutine启动前,Done在goroutine完成时调用。计数不匹配会导致主goroutine永远阻塞。常见问题如何优化?严格保证Add和Done成对,避免在goroutine内部调用Add。