go http的三种实现---3
2024-08-28 13:04:46
package main
//效率最高的一个方法
import (
"fmt"
"io"
"log"
"net/http"
"os"
"strings"
"time"
)
var mux map[string]func(http.ResponseWriter, *http.Request)
func main() {
//声明一个server
server := http.Server{
Addr: ":8080", //监听端口
Handler: &handler{}, //handler
ReadTimeout: 5 * time.Second, //监听超时
}
//路由列表
mux = make(map[string]func(http.ResponseWriter, *http.Request))
mux["/hello"] = hello
//开始监听
err := server.ListenAndServe()
if err != nil {
log.Fatal(err)
}
}
type handler struct{}
func (*handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
//实现静态文件输出
if strings.Contains(r.URL.String(), "/static/") {
fmt.Println("111")
wd, err := os.Getwd()
if err != nil {
log.Fatal(err)
}
//此处使用.Serve.HTTP(w, r)的原因参考下面资料
http.StripPrefix("/static/", http.FileServer(http.Dir(wd))).ServeHTTP(w, r)
return
}
// 动态匹配路由
if h, ok := mux[r.URL.String()]; ok {
//匹配成功执行函数
h(w, r)
return
}
// 没有匹配成功则输出URL
io.WriteString(w, "URL:"+r.URL.String())
}
//输出hello
func hello(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, "hello")
}
最新文章
- ES6之变量常量字符串数值
- 架构师养成记--8.Queue
- js作用域问题
- 初始Python
- jdk安装和环境变量配置
- 【代码笔记】iOS-创建具有中划线的文字
- js随笔,css和js禁止网页选择文本,table的class样式使得td的class样式失效,jquery获得元素坐标
- vim(5)vim下wimrc的配置,解决中文乱码问题
- 9G10内核时钟tick实现
- linux命令备份
- UVaLive 6805 Pantun Grader (恶心的模拟)
- HTML基础和表格
- WPF DataGrid某列使用多绑定后该列排序失效,列上加入 SortMemberPath 设置即可.
- Timestamp转Calendar
- UVA 11100 The Trip, 2007 (贪心)
- Ubuntu18.04 安装搜狗输入法后无法启动的问题
- expr的字符串操作 表达式: length, index, match, substr等
- Java数组逆序排列
- Celery 分布式任务队列入门
- 使用openssh-clients的scp命令来传输文件