教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 go官方的http.request context样例

go官方的http.request context样例

发布时间:2021-05-07   编辑:jiaochengji.com
教程集为您提供go官方的http.request context样例等资源,欢迎您收藏本站,我们将为您提供最新的go官方的http.request context样例资源

go官方的http.request context样例

https://github.com/DavadDi/go_study/blob/master/src/httpreq_context/main.go

package main

import (
	"context"
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"time"
)

func HttpDoTest(ctx context.Context, resChan chan<- string) error {
	start := time.Now()

	repoUrl := "https://api.github.com/repos/campoy/golang-plugins"
	req, err := http.NewRequest("GET", repoUrl, nil)
	if err != nil {
		return fmt.Errorf("http.NewRequest Error: %s", err.Error())
	}

	// in go >= 1.7
	req = req.WithContext(ctx)

	client := &http.Client{}
	resp, err := client.Do(req)
	if err != nil {
		return fmt.Errorf("client.Do Error: %s", err.Error())
	}

	data, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		return fmt.Errorf("ioutil.ReadAll Error: %s", err.Error())
	}

	log.Printf("Read body size [%d]", len(data))
	log.Println("CostTime is: "   time.Since(start).String())

	resChan <- string(data)

	return nil
}

func main() {
	deadline := 1
	d := time.Now().Add(time.Duration(deadline) * time.Second) // deadline max
	ctx, cancel := context.WithDeadline(context.Background(), d)
	defer cancel()

	resChan := make(chan string)

	go HttpDoTest(ctx, resChan)

	var resData string
	select {
	case <-ctx.Done():
		fmt.Println(ctx.Err())

		/* just for ex use. No used*/
	case <-time.Tick(time.Duration(time.Duration(deadline*2) * time.Second)):
		fmt.Println("Time over!")

	case resData = <-resChan:
		fmt.Println("Read data finished")
	}

	log.Printf("Read data size: [%d]", len(resData))
}

  

 

转载于:https://www.cnblogs.com/shhnwangjian/p/9024919.html

到此这篇关于“go官方的http.request context样例”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
go官方的http.request context样例
理解 golang 中的 context(上下文) 包
[翻译]GO并发模型三:基于Context编程
golang 上下文_Golang中的上下文!
golang 上传文件(包括 gin 实现)
深入理解Golang之Context(可用于实现超时机制)
golang 网络编程(5)中间件
Go 语言的网络编程简介
Gin 框架绑定 JSON 参数使用 jsoniter
golang goroutine 通知_深入golang之---goroutine并发控制与通信

[关闭]
~ ~