教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 go对接接口

go对接接口

发布时间:2021-12-20   编辑:jiaochengji.com
教程集为您提供go对接接口等资源,欢迎您收藏本站,我们将为您提供最新的go对接接口资源
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"/></svg><h3>前言:这是第一次使用go语言对接接口,记录一下碰到了那些知识。接口需求文档只有两个接口,一个是获取token,在header中使用;另一个是添加订单接口;大致意思就是从我这的系统中读取数据,到,对方的系统中。</h3> <h3>相关知识点</h3> <ul><li>第一感觉,结构体很重要,很灵活,也很难,用起来有点生涩</li><li>go mod一个好用的包版本管理程序,可以让你的go项目放在电脑的任何文件夹下,从gopath/src下解放出来</li><li>sqlx的使用</li><li>结构体的设计,<mark>映射</mark></li><li>在go中<mark>使用json struct</mark>做映射</li><li>结构体中对字段可能为 null的处理,<mark>看数据类型的源码,有哪些方法,函数</mark></li><li>结构体首字母大写,进行json映射</li><li>for range的使用,<mark>切片的赋值,指针切片,结构体对象赋值</mark></li><li>时间格式相互转换</li><li>字符串转数组,数组去空值</li><li>if 与 switch</li><li><mark>go 结构体、数组、集合/字典和json字符串的相互转换</mark></li><li>go定时任务详解</li></ul><h3>记一下步骤</h3> <ol><li>先使用postman验证对面接口没有问题,测试越全面越好,包括那些必传字段,如果传空/空字符串会怎样,这样做的原因:可能我方数据库有些错误数据,或者正确但是奇怪的数据</li><li>创建go项目,go开发不需要操心本地和服务器上包的数量问题,放心好了,服务器上的环境绝对比你本地的包多,比你本地全。</li><li>使用go连接个数据库,这里使用sqlx包</li><li>连接数据库的代码成功后,移入init()初始化方法中</li><li>开始测试获取token接口,涉及到了go怎么模拟get/post,查找到了http包</li><li>获取token成功后,因为需要token值,所以获取token方法给了返回值,放入init()初始化方法中,这样就可以做到下面的如果有请求对方的接口,就可以获取token变量</li><li>获取列表/多条数据,考虑结构体 属性,类型,映射</li><li>对需要额外处理的字段进行处理</li><li>封装对方 添加订单接口需要的参数样子,同样需要一个结构体</li><li>进行post数据传输–带有头部参数的复杂的post请求</li><li>根据返回结果,如果成功,修改我方系统数据库中数据表的推送标志字段</li><li>优化:添加计数器,对推送数据,和推送成功数据,做一个有个的提示打印输出</li><li>优化:添加定时器,当第一次将历史数据推送结束后,每一小时执行一次,从而达到实时(延迟)的效果</li></ol><h4>相关小语法</h4> <ul><li>如何使用go进行sql的in查询<pre><code>//注意下面这些类型,如果是字符串切片就不用转类型了 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] ")" </code></pre> </li><li>加上一个定时器,达到实时推送的效果;定时器也就是个for循环,周期执行;为了方便,我们把原来的主要函数拿出来,放在一个方法里,main方法放个for就行了,这样代码既清晰又优美了一点
示例:start就是主要程序部分,5秒执行一次</li></ul><pre><code>/** 每一个小时循环执行 */ 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 /执行。。。 //结束 } </code></pre> <ul><li>go发送post请求,带有数据参数;注意数据类型</li></ul><pre><code>/** 带有头部参数的复杂的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 } </code></pre> 到此这篇关于“go对接接口”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
go 获取函数地址_Go语言基础--接口浅析
Go语言接口interface
Go语言空接口类型(interface{})
go语言学习-接口赋值的两种类型
go语言学习笔记(十三)——接口类型
go语言中的继承和接口使用(八)
2020-10-18Go语言接口
关于golang面向接口
想系统学习GO语言(Golang
Go学习笔记:接口实现与指针

[关闭]
~ ~