-
用net/http+time.Sleep可实现基础重试:捕获502/503/504或net.OpError等错误后sleep再重发,避免对400/401/404重试,注意用time.Second而非固定数值防止线性等待。
-
context.WithTimeout未取消HTTP请求是因为http.Client默认不读取context,需用http.NewRequestWithContext构造请求并调用client.Do(req);http.Client.Timeout控制整个请求生命周期,而WithTimeout仅控制调用方等待时间。
-
管道模式利用goroutine和channel实现数据流水处理,由源头、中间处理器和汇点构成,各阶段通过channel传递数据,需正确关闭channel以避免泄漏。
-
答案:Golang文件上传需验证文件大小、真实类型(魔术字节)、生成安全文件名,并防范路径遍历与DoS攻击。
-
rpcserver:servicenotfound是因注册中心未连通或服务名不一致所致,需检查etcd/Nacos状态、配置地址、服务名大小写、启动顺序及-f参数;client调用超时则多因TLS未禁用,应加WithInsecure()。
-
runtime.SetFinalizer只能绑定到显式指针类型变量,不保证执行且不可用于资源清理;正确用法是先声明变量再取地址绑定,适用于CGO内存释放等极少数场景。
-
gobuild必须显式指定包路径,如./cmd/app;工作目录需为模块根,否则报cannotfindmodule;交叉编译输出路径应含平台标识如bin/app-$(GOOS)-$(GOARCH),并预计算版本与时间戳。
-
Go语言通过闭包、函数类型和接口模拟迭代器模式,支持切片等结构的顺序访问;可定义统一Iterator接口实现多集合类型扩展;还可结合goroutine与channel实现并发安全的异步迭代。
-
直接用io.Copy将resp.Body写入*os.File是最安全高效的方式,因为绕过解码可避免失真、保全原始编码与元数据,并节省内存与CPU;而image.Decode→image.Encode不必要且易出错,仅在需图像处理时才适用。
-
Go1.16+中应使用os.ReadDir替代已弃用的io/ioutil.ReadDir;os.ReadDir返回轻量级fs.DirEntry,支持Name()、IsDir()等方法,需Info()获取完整文件信息;嵌套目录遍历推荐filepath.WalkDir。
-
Go中无原型模式原生支持,需手动实现Clone方法;值拷贝默认为浅拷贝,含指针、slice、map等字段时须显式深拷贝,否则共享底层数据。
-
Go敏感词过滤核心是防漏、防错、高并发稳定;DFA(前缀树)最实用,但需注意isEnd赋值位置、区分isEnd/isPrefix、用rune遍历、支持多匹配回溯、初始化childrenmap、中文替换用[]rune计数。
-
Go调用TTS云API的核心难点是鉴权和参数对齐:需手写HTTP请求,注意签名计算、header格式(Authorization/Content-Type/Accept)、字段名差异、body封装、超时控制及音频流安全处理。
-
runtime.GC()不该被频繁调用,因其破坏Go自适应GC节奏、激增STW次数、干扰内存学习;应优先调优GOGC、复用对象、预分配切片,并通过业务指标验证优化效果。
-
连接池优化关键在“够用、干净、可退”:SetMaxOpenConns需按峰值QPS×平均耗时×1.5计算并≤DBmax_connections的70%;SetMaxIdleConns设为Open值的1/2~2/3,ConnMaxIdleTime须小于ConnMaxLifetime;务必监控db.Stats()中WaitCount、InUse、MaxIdleClosed趋势,事务内禁用db.Query,统一使用tx对象并带context超时。