golang http

2023-09-15 12:31:33
函数说明
http.ServeMux是 Go 语言标准库中的一个多路复用器(multiplexer)。它用于路由和处理 HTTP 请求,将请求分发到相应的处理器函数。
http.HandleFunc是 Go 语言标准库中的一个函数,用于注册处理器函数来处理 HTTP 请求。它是对 http.ServeMux 的简化封装,方便快速实现路由功能。
http.Handler接口定义了一个方法 ServeHTTP,该方法接收两个参数:ResponseWriter 和 Request。它用于处理传入的 HTTP 请求并生成相应的 HTTP 响应。
http.ListenAndServe是 Go 语言标准库中的一个函数,用于启动一个 HTTP 服务器并开始监听指定的地址和端口,以接收和处理传入的 HTTP 请求。

一、使用 http.ServeMux 的一些基本操作:
1、创建一个新的 ServeMux:

mux := http.NewServeMux()

2、注册处理器函数并指定 URL 路径:

mux.HandleFunc("/hello", helloHandler)
mux.HandleFunc("/foo", fooHandler)
//在上面的例子中,当 /hello 路径接收到请求时,helloHandler 函数将被调用;当 /foo 路径接收到请求时,fooHandler 函数将被调用。

3、创建一个 HTTP 服务器并指定 ServeMux 作为处理器:

server := &http.Server{
    Addr:    ":8080",
    Handler: mux,
}
//创建了一个监听 8080 端口的 HTTP 服务器,并将 mux 作为处理器。

4、启动服务器:

err := server.ListenAndServe()
if err != nil {
    panic(err)
}
//这会开始监听指定的端口,并开始接受和处理请求。

完整示例:

package main

import (
	"net/http"
	"time"
)

func main() {
	mux := http.NewServeMux()
	mux.HandleFunc("/", handler)

	server := &http.Server{
		Addr:         ":8080",
		Handler:      http.TimeoutHandler(mux, 2*time.Second, "Timeout"),
		ReadTimeout:  5 * time.Second,
		WriteTimeout: 10 * time.Second,
	}

	err := server.ListenAndServe()
	if err != nil {
		panic(err)
	}
}

func handler(w http.ResponseWriter, r *http.Request) {
	time.Sleep(3 * time.Second) // 模拟长时间处理的操作

	w.Write([]byte("Hello, World!"))
}

package main

import (
	"net/http"
	"time"
)

func main() {
	http.HandleFunc("/", handler)
	http.ListenAndServe(":8081", nil)
}

func handler(w http.ResponseWriter, r *http.Request) {
	w.Write([]byte("Hello, World!"))
}

-------------end

更多推荐

【数据结构】哈希表(详)

文章目录前言正文一、基本概念二、基本原理1.哈希函数1.1直接定址法(常用)1.2除留余数法(常用)1.3平方取中法(了解)1.4折叠法(了解)1.5随机数法(了解)1.6数学分析法(了解)2.哈希冲突2.1平均查找长度2.2负载因子2.3闭散列(开放定制法)2.1.1线性探测2.1.2二次探测2.1.3二重哈希2.4

MySQL 8.0 OCP (1Z0-908) 考点精析-架构考点5:数据字典(Data Dictionary)

文章目录MySQL8.0OCP(1Z0-908)考点精析-架构考点5:数据字典(DataDictionary)File-basedMetadataStorage(基于文件的元数据存储)TransactionalDataDictionary(事务数据字典)SerializedDictionaryInformation(S

相机One Shot标定

1原理说明原理部分网上其他文章[1][2]也已经说的比较明白了,这里不再赘述。2总体流程参考论文作者开源的Matlab代码[3]和github上的C++代码[4]进行说明(不得不说还是Matlab代码更优雅)论文方法总体分两部,第一部是在画面中找到所有的类棋盘格角点,第二步是角点的基础上构建出棋盘格形状。3模块说明3.

【Verilog 教程】3.1 Verilog 连续赋值

关键词:assign,全加器连续赋值语句是Verilog数据流建模的基本语句,用于对wire型变量进行赋值。:格式如下assignLHS_target=RHS_expression;LHS(lefthandside)指赋值操作的左侧,RHS(righthandside)指赋值操作的右侧。assign为关键词,任何已经声

Redis面试二“缓存击穿是什么”

条件缓存击穿是应为Redis某个缓存数据设置了过期时间,而刚好有大并发数据请求这个数据,导致DB有大量请求,引发DB崩溃。第一种方法就是设置互称锁当缓存失效时不立即删除缓存而是用setnx设置一个互斥锁,当操作完成后在loaddb,并回设缓存,否则重试get缓存方法,这样就减少了直接大量访问DB的请求。实现@Servi

Java高级-动态代理

动态代理1.介绍2.案例1.介绍publicinterfaceStar{Stringsing(Stringname);voiddance();}publicclassBigStarimplementsStar{privateStringname;publicBigStar(Stringname){this.name=n

关于ClickHouse的SQL操作

目录clickhouse和mysql的比较5.1create5.2Insert1.标准INSERT2.从表到表的插入5.3Update和Delete1.删除操作2.修改操作clickhouse和mysql的比较共同点:都是关系型数据库,支持SQL查询语言;支持事务处理,具备ACID特性(原子性、一致性、隔离性、持久性)

【多尺度无监督:Pansharpening】

Mun-GAN:AMultiscaleUnsupervisedNetworkforRemoteSensingImagePansharpening(Mun-GAN:一种多尺度无监督遥感图像泛锐化网络)在遥感图像融合中,全色锐化是一种遥感图像融合方法,旨在融合全色(PAN)图像和多光谱(MS)图像,以产生高分辨率的MS(H

ClickHouse(15)ClickHouse合并树MergeTree家族表引擎之GraphiteMergeTree详细解析

GraphiteMergeTree该引擎用来对Graphite数据(图数据)进行瘦身及汇总。对于想使用ClickHouse来存储Graphite数据的开发者来说可能有用。如果不需要对Graphite数据做汇总,那么可以使用任意的ClickHouse表引擎;但若需要,那就采用GraphiteMergeTree引擎。它能减

主打低功耗物联网国产替代,纵行科技ZT1826芯片以速率和灵敏度出圈

在低功耗物联网领域,国产替代的趋势越演越烈。9月20日,纵行科技在“IOTE2023深圳·物联网通信技术与应用高峰论坛”发表了“自主原创AdvancedM-FSK®调制技术助力国产替代和泛在物联”的演讲,并推出了ZT1826芯片,以“更低功耗、更低成本、更高性能”为差异化优势,想在低功耗物联网赛道上开辟出一条“国产替代

C4BUILDER—用于构建C4模型图的Web项目

c4builder是什么?c4builder:字面理解是产生C4架构图的构建器。c4builder是一个轻量级的nodejscli工具,用于仅使用文本构建、维护和共享软件体系结构项目。c4builder是一种架构设计工具,可以帮助开发人员和架构师描述和可视化软件系统的架构,包括系统的组件、关系、依赖和交互。它基于C4模

热文推荐