
结构体
Go中error类型本身性能开销极小,真正影响性能的是错误的创建方式:fmt.Errorf格式化、带栈追踪、热路径频繁构造均会显著增加开销,errors.New则最轻量。
Go值类型传参是浅层内存块拷贝:基本类型字段全复制,引用类型字段仅复制头部;结构体超64字节、高频调用或含大数组时应改用指针传参。
本文介绍如何利用Go标准库net/http的中间件式设计,在所有路由处理器执行前统一运行预处理逻辑(如IP黑名单校验),无需修改业务handler,兼容http.ServeMux、GorillaMux...
Go中方法接收者必须是同包类型,不可为外部类型直接添加方法;值接收者用于只读小结构体,指针接收者用于修改或大结构体;方法不可重载,接口仅声明无实现。
建造者模式适用于多可选参数、需校验与分步配置的场景,如HTTPClient;工厂模式仅适合参数固定、变体极少的情况;二者组合时应通过私有字段、链式方法和Build()校验实现可控扩展。
泛型解决编译期类型复用,反射解决运行时类型未知;泛型零开销但无法处理字段级动态操作,反射灵活却有性能损耗和panic风险,二者分层协作而非替代。
因为Go中数组是值类型,传参时会复制整个数组,函数内修改不影响原数组;需用数组指针(*[3]int)或切片([]int)才能修改原数据。
是的,Go函数返回值为非指针值类型时一定会拷贝,包括int或struct等,编译器保证在栈帧销毁前将完整副本复制到调用方指定内存位置,即使通过RVO优化延迟或减少中间拷贝,语义上仍是独立副本。
Go中需显式检查指针是否为nil再解引用,因nil指针解引用会直接panic;所有可能为nil的指针(如函数返回、map查找、结构体字段等)都必须判空,常见场景包括json.Unmarshal后、HT...
Go1.21+可直接使用内置的slices.Reverse;旧版本需手动循环、泛型函数或反射实现,所有方法均支持原地反转,如需保留原切片,应先调用slices.Clone复制。