-
Go语言通过b.ReportAllocs()和-memprofile可分析函数内存分配,结合pprof定位高分配代码,优化时复用对象、预分配容量并减少拷贝,持续测量B/op和allocs/op以验证效果。
-
在Martini中使用命名参数路由(如/edit/:id)时,HTML中的相对路径引用(如assets/css/...)会被浏览器解析为相对于当前URL路径,导致静态文件404;正确做法是统一使用以/开头的根路径(如/assets/css/...),确保静态资源始终从站点根目录加载。
-
io.Writer实现必须返回真实写入字节数而非len(p),因接口契约要求准确反映处理进度;网络写可能部分成功,过滤型Writer完整消费才返回len(p),Discard永远返回len(p);禁止Write中阻塞、Flush或非原子统计;装饰器需显式实现WriteString/Close等接口;二进制数据禁用io.WriteString。
-
微信小程序调用Go后端时POST拿不到body,需显式解析:JSON用json.NewDecoder(r.Body).Decode(),表单用r.ParseForm();code2Session须GET+URL参数且严格校验格式;openid存Redis配随机token,禁存session_key;生产必须HTTPS,建议Nginx终止TLS。
-
Go语言位运算符直接操作二进制位,适用于性能敏感场景。1.基本运算符包括&(与)、|(或)、^(异或)、&^(清零)、<<(左移)、>>(右移)。2.常用技巧:n&1判断奇偶,n<<k实现n*2^k,异或交换两数,n&(n-1)清除最低位1,n&(-n)提取最低位1。3.可用于设置(n|=(1<<i))、清除(n&^=(1<<i))、判断(n&(1<<i)!=0)特定位。4.结合iota定义状态标志,如权限控制(Read|Write)
-
image.Decode读取失败主因是解码器未注册(如webp/bmp)、文件未用io.ReadSeeker包裹、图片头部损坏;缩略图推荐disintegration/imaging;验证码需加载TTF字体并先渲染后扭曲;png.Encode失败多因Content-Type未设、writer异常或误用buf.String()。
-
gocyclo需手动安装且依赖GOPATH/bin在PATH中,支持按文件、函数、阈值过滤及-verbose定位复杂点,CI集成需统一Go版本和输入范围。
-
Python开发者写Go时最常犯的错是忽略值传递与指针显式控制的本质差异:range遍历切片时修改item无效、map嵌套取值未判nil致panic、HTTP客户端不设超时或漏关Body、滥用mock而非接口隔离——根源在于未切换“名字绑定”到“显式控制”的心智模型。
-
strconv包用于Go中字符串与基本类型转换,提供Atoi、ParseInt、ParseFloat实现字符串转数字,Itoa、FormatInt、FormatFloat实现数字转字符串,需注意格式合法性及错误处理。
-
defer无法在运行时取消,但可通过闭包+布尔标记控制其内部逻辑是否执行;或推迟defer语句的执行位置实现“条件注册”;panic不会跳过defer,反而会按栈逆序触发。
-
xml.Unmarshal要求结构体字段必须导出(首字母大写),私有字段即使有xmltag也不会被解析;嵌套字段、命名空间处理、xml.Decoder使用等均有严格规范。
-
飞书机器人Webhook地址必须以https://开头且无空格或换行,需用strings.TrimSpace()清洗并校验前缀;日志告警应通过异步Hook实现,避免阻塞主流程。
-
使用json:"-"标签可完全忽略结构体字段的JSON反序列化,支持单独使用、与其他标签组合、嵌套结构体中局部忽略,也可通过空接口或自定义UnmarshalJSON方法实现动态控制。
-
Go的map并发写会panic,因运行时检测到concurrentmapwrites;sync.Map适用于读多写少场景,而sync.RWMutex+泛型map更灵活高效。
-
必须手动判断参数有效性再拼接WHERE条件,避免空字符串、零值、nil等误入SQL;推荐用切片累积条件+strings.Join拼接,并动态处理IN子句占位符。