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, "连接成功")

查看到如下内容:

Go语言HTTP编程-HTTP服务端

练习

在计算机中选定一个目录,存放jpg、png、txt、mp3、gif、m4a等类型文件。编写一个服务器程序,可以给浏览器提供该目录下文件的访问服务。

如:目录中存有图片文件:lf.jpg。用户在浏览器中输入:127.0.0.1:8000/lf.jpg 可以查看该图片。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~