Go语言HTTP编程-HTTP服务端
HTTP服务端
示例代码:
package main
import (
"fmt"
"net/http"
)
//服务端编写的业务逻辑处理程序 —— 回调函数
func myHandler(w http.ResponseWriter, r *http.Request) {
fmt.Println("method = ", r.Method) //请求方法
fmt.Println("URL = ", r.URL) // 浏览器发送请求文件路径
fmt.Println("header = ", r.Header) // 请求头
fmt.Println("body = ", r.Body) // 请求包体
fmt.Println(r.RemoteAddr, "连接成功") //客户端网络地址
w.Write([]byte("hello http")) //给客户端回复数据
}
func main() {
http.HandleFunc("/hello", myHandler) // 注册处理函数
//该方法用于在指定的 TCP 网络地址 addr 进行监听,然后调用服务端处理程序来处理传入的连接请求。
//该方法有两个参数:第一个参数 addr 即监听地址;第二个参数表示服务端处理程序,通常为nil
//当参2为nil时,服务端调用 http.DefaultServeMux 进行处理
http.ListenAndServe("127.0.0.1:8000", nil)
}
浏览器输入url地址:127.0.0.1:8000/hello
回调函数myHandler的函数原型固定。func myHandler(w http.ResponseWriter, r *http.Request)
参数:w http.ResponseWriter用来“给客户端回发数据”。它是一个interface:
type ResponseWriter interface {
Header() Header
Write([]byte) (int, error)
WriteHeader(int)
}
参数:r *http.Request 用来“接收客户端发送的数据”。浏览器发送给服务器的http请求包的内容可以借助r来查看。它对应一个结构体:
type Request struct {
Method string // 浏览器请求方法 GET、POST…
URL *url.URL // 浏览器请求的访问路径
……
Header Header // 请求头部
Body io.ReadCloser // 请求包体
RemoteAddr string // 浏览器地址
……
ctx context.Context
}
查看一下结构体成员:
fmt.Println("Method = ", r.Method)
fmt.Println("URL = ", r.URL)
fmt.Println("Header = ", r.Header)
fmt.Println("Body = ", r.Body)
fmt.Println(r.RemoteAddr, "连接成功")
查看到如下内容:
练习
在计算机中选定一个目录,存放jpg、png、txt、mp3、gif、m4a等类型文件。编写一个服务器程序,可以给浏览器提供该目录下文件的访问服务。
如:目录中存有图片文件:lf.jpg。用户在浏览器中输入:127.0.0.1:8000/lf.jpg 可以查看该图片。