golang 语言简洁,强大,但使用过程中存在一些有标新立异之处,很容易踩坑。
1. Host 未生效
使用http 发送post请求,服务端一直返回参数错误。
但是用curl发送请求正常,可能组包有问题,直接抓包对比吧。
很明显设置的host未生效,看来set host代码不起作用,搜索发现req提供了Host 参数来设置host信息。Golang API 规范不一致,很容易踩坑,解决方案:
2. Json 科学计数法
govalidator 校验结构字段出错:
2020/03/21 10:26:25 apphandler.go:125: [ERROR] false, function only accepts structs; got float64
一直提示json 有浮点类型字段,可是源请求中没有携带float数值。原因是json.Marshal会将数值转化为float64类型,数值>=1000000 时自动采用科学计数法(1e6)。
解决方案:
3. gorm框架
gorm 比较常用ORM库,强大的反射机制按操作db如丝般顺滑,使用过程中api描述不是很详细,容易出错。
3.1 Find函数
Find() 查询多条记录,当记录为空时,此时err为空,判断条件未触发。可通过len(sm) 判断结果
3.2 Exec() 函数
Exec执行自定义sql,此时where条件是会被忽略的,可将where过滤条件放到sql中