前言:这是第一次使用go语言对接接口,记录一下碰到了那些知识。接口需求文档只有两个接口,一个是获取token,在header中使用;另一个是添加订单接口;大致意思就是从我这的系统中读取数据,到,对方的系统中。
相关知识点
第一感觉,结构体很重要,很灵活,也很难,用起来有点生涩 go mod一个好用的包版本管理程序,可以让你的go项目放在电脑的任何文件夹下,从gopath/src下解放出来 sqlx的使用 结构体的设计,映射 在go中使用json struct 做映射 结构体中对字段可能为 null的处理,看数据类型的源码,有哪些方法,函数 结构体首字母大写,进行json映射 for range的使用,切片的赋值,指针切片,结构体对象赋值 时间格式相互转换 字符串转数组,数组去空值 if 与 switch go 结构体、数组、集合/字典和json字符串的相互转换 go定时任务详解
记一下步骤
先使用postman验证对面接口没有问题,测试越全面越好,包括那些必传字段,如果传空/空字符串会怎样,这样做的原因:可能我方数据库有些错误数据,或者正确但是奇怪的数据 创建go项目,go开发不需要操心本地和服务器上包的数量问题,放心好了,服务器上的环境绝对比你本地的包多,比你本地全。 使用go连接个数据库,这里使用sqlx包 连接数据库的代码成功后,移入init()初始化方法中 开始测试获取token接口,涉及到了go怎么模拟get/post,查找到了http包 获取token成功后,因为需要token值,所以获取token方法给了返回值,放入init()初始化方法中,这样就可以做到下面的如果有请求对方的接口,就可以获取token变量 获取列表/多条数据,考虑结构体 属性,类型,映射 对需要额外处理的字段进行处理 封装对方 添加订单接口需要的参数样子,同样需要一个结构体 进行post数据传输–带有头部参数的复杂的post请求 根据返回结果,如果成功,修改我方系统数据库中数据表的推送标志字段 优化:添加计数器,对推送数据,和推送成功数据,做一个有个的提示打印输出 优化:添加定时器,当第一次将历史数据推送结束后,每一小时执行一次,从而达到实时(延迟)的效果
相关小语法
如何使用go进行sql的in查询//注意下面这些类型,如果是字符串切片就不用转类型了
awesome_id_list := []int{3,5,8}
var str string
for _, value := range awesome_id_list {
str += strconv.Itoa(value) + ","
}
query := "SELECT * FROM awesome_table WHERE id IN (" + str[:len(str)-1] + ")"
加上一个定时器,达到实时推送的效果;定时器也就是个for循环,周期执行;为了方便,我们把原来的主要函数拿出来,放在一个方法里,main方法放个for就行了,这样代码既清晰又优美了一点 示例:start就是主要程序部分,5秒执行一次
/**
每一个小时循环执行
*/
func main() {
log.Println("**************main*************")
//ticker := time.NewTicker(time.Hour*1)
ticker := time.NewTicker(time.Second*5)
for{
Start()
<-ticker.C
}
}
func Start() {
//执行方法a
//执行方法b
/执行。。。
//结束
}
/**
带有头部参数的复杂的post请求
*/
func httpPost(data []byte) (res Return) {
client := &http.Client{}
req, err := http.NewRequest("post", "请求接口url", bytes.NewBuffer(data))
if err != nil {
fmt.Println("there is httpPost,occur error", err)
return
}
defer req.Body.Close()
req.Header.Add("Content-Type", "application/json")
req.Header.Add("authorization", token.Token)
resp, err := client.Do(req)
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("there is httpPost,occur error", err)
return
}
//log.Println(string(body))
json.Unmarshal([]byte(body), &res)
return res
}