-
os.ReadDir是Go1.16+推荐的轻量安全目录遍历方式,返回fs.DirEntry切片,仅Name()和IsDir()不触发stat调用,需手动过滤.和..,出错即终止,容错需改用filepath.WalkDir。
-
interface{}不是万能类型,它只是Go在泛型出现前“不得不妥协”的类型擦除方案——能装任何值,但取出来时你得自己负责类型安全。为什么interface{}能接收任意类型因为它的底层结构只存两样东西:类型信息(type)和值指针(data)。只要某个值有确定的静态类型,就能被隐式转换成interface{};但反过来,从interface{}取值时,Go不会自动还原原始类型。常见错误现象:fmt.Println能直接打印interface{},但一做算术或调方法就p
-
在Go的database/sql包中,Query和QueryRow在性能上几乎无差异——QueryRow内部直接调用Query并封装结果为*Row,额外开销仅为极小的函数调用成本,远低于网络传输和数据库执行本身。
-
必须用make初始化slice、map、chan;只能用new分配任意类型零值内存并返回指针。make返回引用类型值(如[]int),new返回*Type指针,二者语义、用途、返回类型均不同,不可互换。
-
log.Printf在容器中不可见是因为日志未输出到stdout/stderr;应确保log.SetOutput(os.Stdout)或使用logrus/zap等支持JSON的库并配置为输出到stdout,避免文件写入、手动缓冲复用及日志爆炸。
-
URL编码查询参数必须用url.QueryEscape而非url.PathEscape,因其按application/x-www-form-urlencoded规范将空格转为+、中文转%XX;路径编码才用url.PathEscape。
-
Reflect.DeepEqual常返false因严格校验类型、零值及不可比字段;禁用场景包括需忽略字段、浮点容差、含mutex、性能敏感;安全比较slice/map需标准化;业务相等应自定义Equal方法。
-
viper读取环境变量需显式调用AutomaticEnv()或BindEnv(),否则忽略系统变量;多环境配置应动态设名加载单文件,避免merge污染;Unmarshal嵌套结构体必须加匹配yamltag;生产禁用WatchConfig,以防热重载崩溃。
-
Jackson和Gson是两种主流JSON反序列化工具:Jackson通过ObjectMapper支持泛型推导与丰富注解,GsonAPI简洁、默认容忍null且支持TypeToken处理泛型;二者在命名策略、null处理及日期支持上各有差异。
-
应使用r.URL.Query()获取query参数,而非r.FormValue();POST请求中r.FormValue()需先调用r.ParseForm()才有效;JSON请求须手动json.Decode(r.Body);路径参数需借助chi等路由库解析。
-
用os.ReadDir报“invalidargument”需先filepath.Abs转绝对路径,再os.Stat验证存在且为目录;Windows注意路径分隔符,Linux/macOS注意挂载点和权限。
-
Go发短信需封装HTTP客户端防崩丢泄密:设超时、查状态码、显式头、外置密钥、限流重试、异步解耦、接口抽象、渠道适配。
-
Base64编码首选base64.StdEncoding.EncodeToString,输入必须为[]byte;解码须检查error且预估长度;自定义编码表需严格校验字符合法性;复用Encoding实例避免高频创建。
-
答案是通过编译时断言或运行时类型断言和反射来判断接口是否实现方法。1.编译时可用var_Interface=(*Type)(nil)确保实现;2.运行时可用类型断言如v,ok:=reader.(interface{Close()error})检查;3.反射可通过reflect.ValueOf(obj).MethodByName("Close")判断方法存在,但性能低;推荐优先使用接口断言和显式实现检查。
-
根本原因是Go导出Excel时未正确设置中文字体及单元格格式。需用SetCellStyle为中文列设SimSun等字体;时间字段须用TimeToExcelTime转换并配NumFmt=22;大数据量应游标读取+批量写入;响应头须正确设置Content-Type和URL编码的Content-Disposition。