首页 > 其他分享 >golang使用http客户端 多个协程同时请求接口

golang使用http客户端 多个协程同时请求接口

时间:2024-08-30 18:52:20浏览次数:9  
标签:wg http err fmt golang Printf 协程 resp

package main

import (
	"encoding/json"
	"fmt"
	"io"
	"net/http"
	"net/url"
	"sync"
)

type ApiResponse struct {
	Code int           `json:"code"`
	Msg  string        `json:"msg"`
	Data []interface{} `json:"data"` // 使用空接口数组来表示空的数据字段
}

func main() {
	numTasks := 30 // 假设我们想要启动 5 个任务

	var wg sync.WaitGroup // 使用 sync.WaitGroup 来同步协程

	for i := 0; i < numTasks; i++ {
		wg.Add(1)                // 增加 WaitGroup 的计数
		go getTaskList(&wg, i+1) // 启动协程
	}

	wg.Wait() // 阻塞,直到所有协程调用了 Done
	fmt.Println("All tasks have completed.")
}

func getTaskList(wg *sync.WaitGroup, id int) {
	defer wg.Done() // 在函数结束时通知 WaitGroup 减少一个计数
	fmt.Printf("Task list %d started\n", id)

	baseURL := "http://qq.com/getTaskList"

	// 创建一个用于存储查询参数的 url.Values 实例
	params := url.Values{}
	// 添加参数到 params
	//params.Add("param1", "value1")

	// 将查询参数附加到基础 URL
	urlWithQuery := baseURL + "?" + params.Encode()

	// 使用 http.Get 发送 GET 请求
	resp, err := http.Get(urlWithQuery)
	if err != nil {
		fmt.Printf("Error fetching URL: %v\n", err)
		return
	}
	defer resp.Body.Close()
	var apiResponse ApiResponse

	// 打印响应状态码
	fmt.Printf("Response Status Code: %d\n", resp.StatusCode)
	body, err := io.ReadAll(resp.Body)

	if err != nil {
		fmt.Printf("Error reading response body: %v\n", err)
		return
	}

	if err := json.Unmarshal([]byte(string(body)), &apiResponse); err != nil {
		fmt.Printf("Error decoding JSON: %v\n", err)
		return
	}

	// 打印响应体
	fmt.Printf("Response Body: %s\n", apiResponse.Msg)

	defer resp.Body.Close()
}

标签:wg,http,err,fmt,golang,Printf,协程,resp
From: https://www.cnblogs.com/xuyaoxiang1991/p/18389346

相关文章

  • containerd:配置https私有镜像仓库的最新方法
    随着containerd应用越来越广泛,我们必须紧跟官网的节奏。之前配置https私有镜像仓库的方法比较繁琐,并且不易梳理,下边介绍一下目前最新的配置方法。配置https私有镜像仓库我假设你现在已经有私有仓库并且是https再假设你的harbor域名是harbor.example.cn你只需要在/etc/contain......
  • HTTP协议请求/响应格式详解
    HTTP协议请求格式HTTP请求是浏览器或其他客户端和服务器之间通信的基础。一个HTTP请求由四个部分组成:请求行(requestline)请求头(headers)空行(blankline)请求体(body)1.请求行(RequestLine)请求行由方法(Method)、请求URI(UniformResourceIdentifier)、协议版本组......
  • HTTP协议入门
    HTTP协议入门参考:http://www.ruanyifeng.com/blog/2016/08/http.html      一、HTTP/0.9HTTP是基于TCP/IP协议的应用层协议。它不涉及数据包传输,主要规定了客户端和服务器之间的通信格式,默认使用80端口。最早版本是1991年发布的0.9版。该版本及其简单,只有一个命......
  • https通信过程
    转自:https://zhuanlan.zhihu.com/p/692295428 HTTPS的通信过程可以简单分为以下几个步骤:客户端发起连接请求:客户端向服务器发送HTTPS请求,请求连接到服务器的HTTPS端口(默认是443端口)。服务器返回证书:服务器在接收到客户端的连接请求后,会将自己的数字证书发送给客户端。......
  • 如何提取用C#语言写的接口(http)里的内容
    这段Kotlin代码定义了一个用于发起HTTP请求的异步函数和相关的数据模型。下面是对代码的详细解析,包括每个部分的功能和工作原理。代码解析1.Response数据类dataclassResponse(vardata:JSONObject=JSONObject(),varlist:JSONArray=JSONArray(),v......
  • 记Spring HTTP Invoker远程调用的使用(二)基于Servlet方式,配置servlet映射url-pattern实
    目录前言一、概念二、代码实现1.服务端实现2.客户端实现前言本篇接上一篇记SpringHTTPInvoker远程调用的使用(一)基于Url映射方式,DispatcherServlet统一处理实现-CSDN博客https://blog.csdn.net/u011529483/article/details/141678510?spm=1001.2014.3001.5501之......
  • HTTPS证书一年费用是多少?价格全解析
    HTTPS证书作为保障数据传输安全的关键工具,其重要性日益凸显。本文将深入探讨HTTPS证书的作用、类型以及价格因素,帮助读者了解如何为网站选择合适的安全证书。HTTPS证书的作用HTTPS证书的核心作用是通过加密技术保护网站与用户之间的数据传输,防止数据在传输过程中被截获或篡改。这不......
  • 【Markdown笔记】设置字体颜色——转载https://blog.csdn.net/u012028275/article/det
     【Markdown笔记】设置字体颜色dadalaohua于2021-04-0517:53:19发布阅读量5.7w 收藏 293点赞数103分类专栏: Markdown笔记 文章标签: markdown latex html版权GitCode开源社区文章已被社区收录加入社区Markdown笔记专......
  • ABP Framework Consuming HTTP APIs from a .NET Client
    1、AddBookStore_AppsectionintBookStore.DbMigrator\appsettings.json"BookStore_App":{"ClientId":"BookStore_App","ClientSecret":"1q2w3e*","RootUrl":"https://localhost:44333&qu......
  • gyp GET https://nodejs.org/download/release/v20.15.0/node-v20.15.0-headers.tar.g
    如图我执行yarn关于node会报错:gyphttpGEThttps://nodejs.org/download/release/v20.15.0/node-v20.15.0-headers.tar.gzgyphttpfetchGEThttps://nodejs.org/download/release/v20.15.0/node-v20.15.0-headers.tar.gzattempt1failedwithETIMEDOUTgypWARNins......