当前位置: 首页 > news >正文

上海网站建设选缘魁 -企查网站开发支持二次开发

上海网站建设选缘魁 -企查,网站开发支持二次开发,怎么找网站 优帮云,软件平台拓扑图高效地处理多个数据源并将其整合为有意义的结果是开发中一项重要的任务。Go 语言,以其强大的并发特性,为我们提供了优雅而高效的解决方案。那么我们探讨一下如何利用 Go 语言的协程,同时调用多个接口获取数据,并将这些数据无缝地合…

高效地处理多个数据源并将其整合为有意义的结果是开发中一项重要的任务。Go 语言,以其强大的并发特性,为我们提供了优雅而高效的解决方案。那么我们探讨一下如何利用 Go 语言的协程,同时调用多个接口获取数据,并将这些数据无缝地合并为一个完整的数据集。

先假定一个场景:现有一需求,需要请求n个接口(暂定为3个)获取接口数据,然后对数据进行二次处理并返回。

按照过往的经验,我们会依次请求接口拿到数据暂存,最后对数据进行包装处理,这种自上而下的处理方式其实并无不妥,现在想要提高下效率,利用牺牲cpu资源来换取查询性能。

  1. 先模拟创建几个接口,分别返回(k1,v1)、(k2,v2)、(k3,v4):

    // 模拟接口A
    func getDataFromA() map[string]interface{} {return map[string]interface{}{"key1": "value1",}
    }// 模拟接口B
    func getDataFromB() map[string]interface{} {return map[string]interface{}{"key2": "value2",}
    }// 模拟接口C
    func getDataFromC() map[string]interface{} {return map[string]interface{}{"key3": "value3",}
    }
    
  2. 开启协程分别请求上述接口:
    首先得思考一个问题,协程执行不保证顺序,请求到的数据应该怎么保存?怎么判断全部协程都执行完毕?怎么拿到全部的数据?

    • 上述接口定义中返回的数据均是 map,那么我完全可以用map来保存数据,所以我定义方法就可以这么定义:

      func getAllData() map[string]interface{} {return nil    // 暂时先不做处理
      }
      
    • 为了防止主协程先于其他执行结束,需要引入 sync.WaitGroup 包控制;所有协程返回的数据,可以用通道来暂存,make 一个容量为 3 的 Channel

      func getAllData() map[string]interface{} {var wg sync.WaitGroupresultChan := make(chan map[string]interface{}, 3)return nil    // 暂时先不做处理
      }
      
    • 接下来就可以开启协程去调用:

      func getAllData() map[string]interface{} {var wg sync.WaitGroupresultChan := make(chan map[string]interface{}, 3)wg.Add(3)go func() {defer wg.Done()resultChan <- getDataFromA()}()go func() {defer wg.Done()resultChan <- getDataFromB()}()go func() {defer wg.Done()resultChan <- getDataFromC()}()wg.Wait()close(resultChan)return nil // 暂时先不做处理
      }
      
    • 最后可以对数据做个简单处理,封装成一个大map返回,实际业务当然按需处理:

      newMap := make(map[string]interface{})for res := range resultChan {for k, v := range res {newMap [k] = v}
      }return newMap
      
  3. 执行验证返回结果:

    func main() {newMap := getAllData()fmt.Println(newMap)
    }
    
    [Running] go run "main.go"
    map[key1:value1 key2:value2 key3:value3]
    

http://www.yayakq.cn/news/259595/

相关文章:

  • html5 企业网站模板给客户做网站需要提供
  • 湖南微信网站公司电话号码网站产品类别顺序如果修改
  • 网站建设 cms哪些网站容易被百度收录
  • 手机网站关键词快速排名手机房屋设计软件
  • 网站制作的一般步骤wordpress python采集
  • 学院网站建设管理规章制度做注塑机的网站
  • 公司网站忘了怎么做做网站汉狮网络
  • 衡阳市建设学校官方网站吉林长春seo网站建设网站优化
  • 电子商务网站规划与建设定制开发响应式网站
  • 网站建设销售合作合同织梦网站后台如何做百度优化
  • 做化工的外贸网站都有什么上海网站建设seo公司
  • 网站宽屏背景免费设计签名连笔字
  • 怎么做网站主导航企业大全企业名录
  • 苏宁网站开发人员精品故事网
  • 做IT的需要别人打开网站吗小学生编程软件
  • 有限公司网址湘潭seo公司
  • 域名过期了怎么办怎么找回网站十大邮箱app排行榜
  • 用ssh做的简单网站企业网站建设费用大约多少钱
  • 评论给网站带来的益处免费搭建个人服务器
  • 摄影设计网站福建省龙岩市建设培训中心网站
  • 厦门网站制作推广网站空间空间租赁
  • 资源网站平台建设方案广告海报
  • 农业网站开发的实验报告通辽北京网站建设
  • 保洁公司网站源码网站建设太仓
  • 如何做一家专门卖零食的网站wordpress oauth2
  • 设计师服务平台卡密号招聘网站怎么做seo
  • 企业网站每年续费吗推广方式英语
  • 网站建设网络推广方案企业网站前端建设
  • 福田做网站公司南昌网站制作公司
  • 西宁市建设局官方网站微官网与手机网站首页