14、HttpRouter包

本文介绍了Go语言中的HttpRouter库,这是一个轻量级且高效的HTTP请求路由器,支持路由模式变量和请求方法匹配。通过示例展示了如何创建基本路由、处理参数以及结合模板进行HTTP响应的渲染。此外,还提供了综合使用HttpRouter和模板库的方法,以实现动态内容的展示。
摘要由CSDN通过智能技术生成

1、基本介绍

HttpRouter 是用于Go的轻量级高性能 HTTP 请求路由器(也称为多路复用器或简称mux)。

与Go包的默认多路复用器net/http相比,此路由器支持路由模式中的变量并匹配请求方法。它也可以更好地扩展。

该路由器针对高性能和小内存占用进行了优化。即使有很长的路径和大量的路线,它也能很好地扩展。压缩动态 trie(基数树)结构用于有效匹配。

2、基本使用

package hrouter

import (
	"fmt"
	"log"
	"net/http"

	"github.com/julienschmidt/httprouter"
)

func Index(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
	fmt.Fprint(w, "<h1>Welcome!</h1>\n")
}

func Hello(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
	fmt.Fprintf(w, "<h1>hello, %s!</h1>\n", ps.ByName("name"))
}

func TestRouter1() {
	router := httprouter.New()        // 得到一个路由
	router.GET("/", Index)            // 发送Get请求,调用Index函数
	router.GET("/hello/:name", Hello) // 路由传参

	log.Fatal(http.ListenAndServe(":8080", router)) // 开启监听和服务
}

在这里插入图片描述
在这里插入图片描述

3、Http Method对应的方法

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

4、综合使用template\http\httprouter

package hrouter

import (
	"fmt"
	"html/template"
	"log"
	"net/http"

	"github.com/julienschmidt/httprouter"
)

func TestTemplateRouter() {

	// 准备路由
	router := httprouter.New()

	// GET请求1
	router.GET("/", func(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
		// 解析指定文件生成模板对象
		tmpl, err := template.ParseFiles("F:/tools/golang/goweb/hrouter/index.html")
		if err != nil {
			log.Fatal("Error parsing template: ", err)
		}
		// 利用给定数据渲染模板,并将结果写入w
		tmpl.Execute(w, []string{"Java", "Golang", "Python", "C++", "", ""})
	})

	// GET请求2
	router.GET("/user/:name", func(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
		// 解析指定文件生成模板对象
		tmpl, err := template.ParseFiles("F:/tools/golang/goweb/hrouter/user.html")
		if err != nil {
			log.Fatal("Error parsing template: ", err)
		}
		// 利用给定数据渲染模板,并将结果写入w
		tmpl.Execute(w, []string{"Java", "Golang", "Python", "C++", "", ""})

		fmt.Fprintf(w, "Select a User %s", p.ByName("name"))
	})

	// 服务器监听本地8080端口
	err := http.ListenAndServe(":8080", router)
	if err != nil {
		log.Fatal(err)
	}
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值