ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

小白学标准库之 mux

2021-11-04 01:04:05  阅读:216  来源: 互联网

标签:http mux 标准 books 小白学 8080 路由 路由器



本文介绍第三方库 gorilla/mux,相比于 Go 自带的 net/http 它能提供更为强大的路由处理功能。

mux 表示 HTTP request multiplexer (HTTP 请求多路复用器),它通过路由器(这里的路由器不是 TCP/IP 中的路由器)实现类 mux.Router 匹配用户请求,并将请求转发到系统注册的路由规则,由相应的规则对请求进行处理。

1. gorilla/mux 使用

首先使用 go get 导入 mux 包:

go get -u github.com/gorilla/mux

实现 mux server:

import (
        "fmt"
        "github.com/gorilla/mux"
        "net/http"
)

func main() {
        r := mux.NewRouter()

        r.HandleFunc("/books/list", ListHandler)
        r.HandleFunc("/books/{quality}/{price}", RecordHandler).Methods("GET")

        http.ListenAndServe(":8080", r)
}

func ListHandler(w http.ResponseWriter, r *http.Request) {
        w.WriteHeader(http.StatusOK)
        fmt.Fprintf(w, "hello, books...")
}

func RecordHandler(w http.ResponseWriter, r *http.Request) {
        vars := mux.Vars(r)

        quality := vars["quality"]
        price := vars["price"]

        w.WriteHeader(http.StatusOK)
        fmt.Fprintf(w, "books quality: %s, price: %s\n", quality, price)
}

代码实现上:

  • 调用 mux 包的 NewRouter 构造一个路由器,通过路由器的 HandleFunc 方法建立请求和路由规则的关联。
  • server 端通过 http 包的 ListenAndServe 函数实现了路由器在地址的侦听。访问该地址的 URL 将被转发到路由器中相应的路由规则,并由路由规则处理 URL 请求。
  • mux 包的 Vars 函数解析路由参数。

查看程序实现效果。
server:

[chunqiu@104 mux]$ go run muxUpdater.go

[chunqiu@104 mux]$ netstat -antp | grep 8080
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp6       0      0 :::8080                 :::*                    LISTEN      35739/muxUpdater
tcp6       0      0 ::1:36798               ::1:8080                TIME_WAIT   -

client:

[chunqiu@105 mux]$ curl http://10.159.***.***:8080/books
hello, books...

[chunqiui@105 mux]$ curl http://localhost:8080/books
hello, books...

2. gorilla/mux 实现

简单介绍 mux 包中请求多路复用路由的实现。

2.1 mux.NewRouter

路由器中包括路由切片,切片存储路由规则:

// This will send all incoming requests to the router.
type Router struct {
	// Routes to be matched, in order.
	routes []*Route

	// Routes by name for URL building.
	namedRoutes map[string]*Route
}

2.2 HandlerFunc

...
r.NewRoute().Path(path).HandlerFunc(f)

写不下去了.....

标签:http,mux,标准,books,小白学,8080,路由,路由器
来源: https://www.cnblogs.com/xingzheanan/p/15506432.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有