-
数组传参为值传递,函数内修改不影响原数组;切片传参共享底层数组,元素修改会影响原切片,但扩容可能导致底层数组分离,需通过返回值获取新切片。212 收藏 -
fan-out比串行快因并发提升吞吐,但滥用goroutine(如启100万)会导致连接池耗尽、HTTP复用失效、被限流;应控制并发数并复用资源,如用带缓冲channel(如容量100)限流。379 收藏 -
gorm.Openpanic主因是未检查返回的error导致操作nil*gorm.DB;正确做法是先检查err,再用db.DB().Ping()验证连接,并确保DSN含parseTime=true&loc=Local。106 收藏 -
在Go中使用mock对象可隔离外部依赖,常用testify/mock生成接口mock并验证调用行为,需通过接口和依赖注入实现,支持自动生成与手动编写两种方式。174 收藏 -
Go中测试接口实现的核心是验证行为合规性而非类型声明,通过编译期赋值检查、接口参数化单元测试及Mock控制依赖行为来确保契约履行。397 收藏 -
应关闭gRPC非必要组件并优化Protobuf生成:禁用反射、健康检查和日志中间件,限制并发流;用LITE_RUNTIME、裁剪JSON支持、精简import路径;gRPC-Web需Envoy/Nginx代理;编译时去符号、禁CGO、压缩二进制。202 收藏 -
不能直接用sqlmock.Mock接口对接sql.DB,因它非sql.DB类型;须用sqlmock.New()创建mockDB实例并注入业务代码,且需检查错误、调用ExpectationsWereMet()。497 收藏 -
Go中unix.Sendmsg传文件描述符失败的根本原因是SOCK_CLOEXEC标志导致fd被内核自动关闭,需手动创建socket并清除该标志,发送时正确设置SCM_RIGHTScmsg,接收后立即dup并转为*os.File。458 收藏 -
指针用于操作变量内存地址,通过&取地址、*解引用访问值,支持函数内修改变量、new分配内存及结构体方法调用,需避免空指针解引用。275 收藏 -
组合模式通过统一接口处理单个对象和对象集合,适用于树形结构管理。定义Component接口包含Render、Add、Remove和GetChildren方法,叶子节点如Button实现接口但Add/Remove无操作,容器节点如Panel维护子组件列表并实现完整逻辑。主函数中可构建复杂组件树,调用Render时自动遍历所有子节点。实际应用建议使用接口隔离避免无效方法暴露,增加ID便于调试,支持事件冒泡及并发安全控制。Go的接口机制天然支持该模式,无需继承即可实现多态。188 收藏 -
Go1.18内置模糊测试可自动探测JSON解析中的非法Unicode、深度嵌套、超长键名等边界问题;需编写纯函数式解析函数、添加带种子语料的Fuzz测试、运行fuzz发现崩溃用例并针对性加固。492 收藏 -
Go中time.Parse解析RFC3339失败主因是时区偏移格式不匹配,应优先使用time.RFC3339常量而非手写layout;JSON反序列化需正确配置tag或自定义UnmarshalJSON;前端兼容建议输出UTC时间并以Z结尾。286 收藏 -
使用sync.Mutex可避免多goroutine并发修改共享变量导致的数据竞争,通过加锁保护临界区,确保同一时间只有一个goroutine能访问共享资源。501 收藏 -
本文详解Go语言中vara[]T(nil切片)与b:=[]T{}(空切片)在底层结构、语义含义及实际使用中的关键差异,包括判别方法、内存表现、JSON序列化行为及常见陷阱。142 收藏 -
Go中数组是值类型,传参时复制整个数组,无法原地修改;需用*[3]int指针传址才能确保修改原数组,而切片虽可修改底层数组但扩容后失效。155 收藏