-
Go1.16+必须用os.CreateTemp替代已弃用并移除的ioutil.TempFile;其参数为dir和pattern(需含""),返回已打开且权限0600的文件,常见错误包括漏写""、重复打开及路径构造不当。
-
Go中包别名可解决命名冲突、简化长路径、明确语义意图;需避免模糊命名,推荐短小明确且团队一致的别名,如sql、pgx、cache、logger及_忽略副作用。
-
Go结构体Tag必须用空格分隔,不可用逗号;key后value须双引号包裹,reflect.StructTag.Get()返回值需手动校验是否为空,解析嵌套结构体需递归处理,多tag并存时应按用途分键且避免滥用。
-
本文详解如何用Go标准库crypto/aes和crypto/cipher安全加密文件,涵盖IV生成规范、流式加解密实现、密文结构设计及关键安全注意事项。
-
优先使用strings包内置函数如Contains、Index、HasPrefix/HasSuffix进行字符串搜索,底层优化算法提升性能;复杂正则匹配应预编译并复用regexp.Regexp实例以减少开销;避免频繁内存分配,推荐使用strings.Builder拼接和[]byte操作;高频查询可构建索引或采用trie树结构优化查找效率。
-
pre-commit钩子不触发需检查文件权限和shebang;Go检查应打包为静态二进制而非gorun;规范检查推荐gofmt+govet+revive;跨平台需用filepath.Join和POSIXshell。
-
context.WithTimeout需配合select监听ctx.Done()才能中断goroutine,否则仅创建超时上下文无效;必须在每次循环迭代及阻塞操作前检查,显式退出并调用cancel()。
-
Go中map必须显式初始化(如make或字面量),否则赋值会panic;计数自增无需判空,因读取不存在key返回零值;并发写需sync.RWMutex保护;遍历顺序随机,需手动排序。