七叶笔记 » golang编程 » Go语言学习基础-HTTP客户端、HTTP服务器、Context上下文

Go语言学习基础-HTTP客户端、HTTP服务器、Context上下文

HTTP Client HTTP客户端

Go标准库中的net/http包对HTTP客户端和服务器提供了极好的支持。

在本例中,我们将使用它来发出简单的HTTP请求。若要向服务器发出HTTP GET请求,使用函数http.Get是最便捷的方法,它创建http.Client对象并调用其Get方法;它使用的是http.DefaultClient对象,该对象具有默认设置。

程序中打印http响应状态,并打印响应正文的前5行。

结果:

$ go run http-clients.go

Response status: 200 OK

<!DOCTYPE html>

<html>

<head>

<meta charset=”utf-8″>

<title>Go by Example</title>

HTTP Server HTTP服务器

使用net/HTTP包很容易编写一个基本的HTTP服务器。net/HTTP服务器中的一个基本概念是handler处理器。处理器是实现http.handler接口的对象。

编写处理程序的常见方法是把包函数http.HandleFunc用作具有规定签名的函数的适配器。用作处理程序的函数必须采用http.ResponseWriter和http. Request 作为参数。响应编写器用于填充http响应。

在以下程序,hello处理程序只是一个简单响应返回”hello\n”。headers处理程序通过读取所有HTTP请求头并将它们回送到响应体中。

使用HTTP.HandleFunc便利函数在服务器路由上注册处理程序。它的作用是在net/http包中设置默认的路由。

最后,用端口和一个处理程序调用ListenAndServe。nil告诉服务器使用刚刚设置的默认路由。

结果:

$ go run http- server s.go &

$ curl localhost:8090/hello

hello

Context 上下文

HTTP服务器适合于用来演示context.Context的用法,该对象用来控制取消操作非常有用。上下文可以携带截止日期、取消信号和其他跨API边界和协程的值等一些与请求相关的信息。

net/http机制为每个HTTP请求创建一个context.Context,请求对象有一个Context方法返回上下文对象。

hello处理程序接收到请求后,监听定时器通道,等待10秒,模拟服务器正在进行的一些工作后再返回响应。同时,监听上下文的Done通道,以获取我们取消工作的信号并返回响应。上下文的Err方法返回一个错误,该错误解释了关闭Done通道的原因。

和以前一样,在“/hello”路由上注册处理程序,然后开始HTTP服务监听指定端口。在后台运行服务器,开始模拟对/hello页面的请求,然后按下Ctrl+C模拟中断请求信号,结果如下所示。

结果:

$ go run context-in-http-servers.go &

$ curl localhost:8090/hello

server: hello handler started

^C

server: context canceled

server: hello handler ended

相关文章