当前位置: 首页 > news >正文

golang web笔记-1.创建Web Server和Handler请求

1. 创建http web server的两个方法

1.1. 方式一:http.ListenAndServe(addr string, handler Handler)

  • addr string:监听地址,如果为"" ,那么就是所有网络接口的80接口
  • handler Handler:如果为nil,那么就是DefaultServeMux,DefaultServeMux是一个multiplexer(可以看作是路由器)
package mainimport ("net/http"
)func main() {// 使用http.ListenAndServe 就可以创建一个web服务,但是这个时候启动访问是404,因为 handle=nilhttp.ListenAndServe("localhost:8080", nil)}

1.2. 方式2:使用http.Serve{}

http.Server是一个struct有两个常用参数(Addr 、Handler) 和一个函数ListenAndServe

  • addr string:监听地址,如果为"" ,那么就是所有网络接口的80接口
  • handler Handler:如果为nil,那么就是DefaultServeMux,DefaultServeMux是一个multiplexer(可以看作是路由器)
  • ListenAndServe()函数
package mainimport "net/http"func main() {server := http.Server{Addr:    "localhost:8080",Handler: nil,}server.ListenAndServe()
}

2. Handler

  • handler处理http请求的的核心接口
  • handle 定义了一个方法ServerHTTP()
    • ResponseWriter 处理请求响应
    • Request接收请求

2.1. 向web server 添加Handler

2.1.1. 方法一:http.Handle(pattern string, handler Handler)

  • pattern string: 路由,访问路径
  • handler Handler:Handler
package mainimport "net/http"// 1. 创建结构体
type helloHandler struct{}
type aboutHandler struct{}// 2. 创建结构体的方法,实现ServeHTTP方法,并在方法中书写代码逻辑
func (m *helloHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {w.Write([]byte("Hello World!"))
}func (m *aboutHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {w.Write([]byte("About!"))
}func main() {server := http.Server{Addr:    "localhost:8080",Handler: nil,}//3.创建结构提的实例hello := helloHandler{}about := aboutHandler{}//4. 使用http.Handle 注册handler//http.Handle 有两个参数,第一个是请求路径,第二个是Handle的指针变量http.Handle("/hello", &hello)http.Handle("/about", &about)server.ListenAndServe()
}

2.1.2. 方法二:http.HandleFunc(pattern string, handler func(ResponseWriter, *Request))

  • pattern string: 路由,访问路径
  • handler func(ResponseWriter, *Request):和handler结构相同的函数,HandleFunc内部会将传入的函数转换为handler并调用http.Handle(pattern string, handler Handler)方法实现注册
package mainimport "net/http"// 1. 创建执行逻辑的函数
func welcome(writer http.ResponseWriter, request *http.Request) {writer.Write([]byte("welcome"))
}
func main() {server := http.Server{Addr:    "localhost:8080",Handler: nil,}//2.使用 http.HandleFunc 注册handlerhttp.HandleFunc("/welcome", welcome)//http.HandlerFunc(函数) 会把传入的函数转换为handler 所以http.HandleFunc("/welcome", welcome) 等同于 http.Handle("/welcome", http.HandlerFunc(welcome))//http.Handle("/welcome", http.HandlerFunc(welcome))//或者使用匿名函数http.HandleFunc("/home", func(writer http.ResponseWriter, request *http.Request) {writer.Write([]byte("home"))})server.ListenAndServe()
}

2.2. 内置handler

1. http.NotFoundHandler()

      func NotFoundHandler() Handler

       返回一个handler,给每个请求的响应都是404 page not found

2.http.RedirectHandler()

        func RedirectHandler(url string, code int) Handler

        返回一个handler,使用给定的状态吗把每个请求跳转到指定的url

        url:要跳转的url

        code:状态吗

3.http.StripPrefix()

        func StripPrefix(prefix string, h Handler) Handler

        返回一个handler,从请求的url中去掉指定的前缀,然后再调用另一个handler

        如果请求的url与提供的前缀不符,返回404

        prefix:需要移除的字符

        h:需要被调用的handler

4. http.TimeoutHandler()

        func TimeoutHandler(h Handler, dt time.Duration, msg string) Handler

        返回一个handler,用来在指定时间内运行传入的handler

        h:需要被修饰的handler,

        dt:handler允许处理的时间

        msg:如果超时就把msg返回给请求

5. http.FileServer()

        func FileServer(root FileSystem) Handler

        返回一个handler,基于root的文件系统来响应请求

        root:访问的根目录,使用 http.Dri将根目录转换为FileSystem

相关文章:

golang web笔记-1.创建Web Server和Handler请求

1. 创建http web server的两个方法 1.1. 方式一:http.ListenAndServe(addr string, handler Handler) addr string:监听地址,如果为"" ,那么就是所有网络接口的80接口handler Handler:如果为nil,那么就是D…...

【Python】Copier:高效的项目模板化工具

Copier 是一个开源的 Python 工具,用于基于项目模板快速生成新项目。它通过灵活的模板化系统,使开发者可以快速创建、维护和更新项目模板,从而自动化项目的初始化流程。无论是简单的文件复制,还是复杂的项目结构配置,C…...

Spring系列 BeanPostProcessor

文章目录 BeanPostProcessor注册时机执行时机 InstantiationAwareBeanPostProcessorSmartInstantiationAwareBeanPostProcessor 本文源码基于spring-beans-5.3.31 参考:https://docs.spring.io/spring-framework/reference/core/beans/factory-extension.html#beans…...

Qualitor processVariavel.php 未授权命令注入漏洞复现(CVE-2023-47253)

0x01 漏洞概述 Qualitor 8.20及之前版本存在命令注入漏洞,远程攻击者可利用该漏洞通过PHP代码执行任意代码。 0x02 复现环境 FOFA:app"Qualitor-Web" 0x03 漏洞复现 PoC GET /html/ad/adpesquisasql/request/processVariavel.php?gridValoresPopHi…...

SpringBoot的概述与搭建

目录 一.SpringBoot的概述 二.SpringBoot 特点 三.SpringBoot 的核心功能 3.1起步依赖 3.2自动配置 四.SpringBoot 开发环境构建 五.SpringBoot 配置文件 六.SpringBoot数据访问管理 七.springboot注解 八.springboot集成mybatis 九.springboot全局异常捕获与处理 一…...

视频集成与融合项目中需要视频编码,但是分辨率不兼容怎么办?

在众多视频整合项目中,一个显著的趋势是融合多元化的视频资源,以实现统一监管与灵活调度。这一需求促使项目团队不断探索新的集成方案,确保不同来源的视频流能够无缝对接,共同服务于统一的调看与管理平台,进而提升整体…...

kafka 换盘重平衡副本 操作流程

一、起因 kakfa某块数据盘损坏,且数据无法恢复,需清空换新盘 二、梳理操作流程 查看topic信息 sh ./kafka-topics --bootstrap-server ***:9092 --list --exclude-internal 查看某个topic数据分布情况 sh ./kafka-topics --bootstrap-server ***:…...

vue3.0 + element plus 全局自定义指令:select滚动分页

需求:项目里面下拉框数据较多 ,一次性请求数据,体验差,效果就是滚动进行分页。 看到这个需求的时候,我第一反应就是封装成自定义指令,这样回头用的时候,直接调用就可以了。 第一步 第二步&…...

HarmonyOS/OpenHarmony 离线加载web资源,并实现web资源更新

关键词:h5离线包加载、h5离线包更新、沙箱 在上一篇文章中,我们已经介绍了如何将 rawfile 资源文件中的文件数据拷贝到沙箱下,那么该篇文章将介绍如何加载该沙箱目录下的文件资源(此处以打包后的web资源为例)&#xf…...

【Spark 实战】基于spark3.4.2+iceberg1.6.1搭建本地调试环境

基于spark3.4.2iceberg1.6.1搭建本地调试环境 文章目录 基于spark3.4.2iceberg1.6.1搭建本地调试环境环境准备使用maven构建sparksql编辑SparkSQL简单任务附录A iceberg术语参考 环境准备 IntelliJ IDEA 2024.1.2 (Ultimate Edition)JDK 1.8Spark 3.4.2Iceberg 1.6.1 使用mave…...

TCP连接建立中不携带数据的报文段为何不消耗序号解析

在TCP协议中,序号的使用是为了确保数据能够按照正确的顺序被接收端重组和确认。每个TCP报文段都有一个序号字段,用于标识该报文段中数据的起始位置相对于整个数据流的偏移量。 初始序号和三次握手 在TCP连接的建立过程中,三次握手是确保双方…...

JS设计模式之状态模式:优雅地管理应用中产生的不同状态

一. 前言 在过去,我们经常使用条件语句(if-else 语句)来处理应用程序中的不同状态。然而,这种方式往往会让代码变得冗长、难以维护,并可能引入潜在的 bug。而状态模式则提供了一种更加结构化和可扩展的方法来处理状态…...

C语言系列4——指针与数组(1)

我们开始C语言的指针与数组 这部分开始进阶了,得反复学习 在开始正题之前,写说一下我们都知道当写一个函数的时候需要进行传参,当实参传递给形参的时候,形参是有独立空间的,那么数组传参又是怎么样的呢,我…...

JS网页设计案例

下面是一个简单的 JavaScript 网页设计案例&#xff0c;展示了如何使用 HTML、CSS 和 JavaScript 创建一个动态的网页。 案例&#xff1a;简单的待办事项列表 1. HTML 部分 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8…...

4.2.1 通过DTS传递物理中断号给Linux

点击查看系列文章 》 Interrupt Pipeline系列文章大纲-CSDN博客 4.2.1 通过DTS传递物理中断号给Linux 参考《GICv3_Software_Overview_Official_Release_B》&#xff0c;下表描述了GIC V3支持的INTID(硬件中断号)的范围。 SGI (Software Generated Interrupt)&#xff1a;软…...

常用性能优化方法

在一个Java项目中进行性能优化是至关重要的。性能优化能够提高项目的效率和响应速度&#xff0c;提升用户体验&#xff0c;并且可以节省服务器资源和成本。 首先&#xff0c;性能优化可以确保项目的高效运行。当项目在运行时&#xff0c;性能问题可能会导致应用程序变慢、响应时…...

上海我店:创新模式引领本地生活新风尚

近年来&#xff0c;一个名为“上海我店”的新兴平台在网络空间中迅速崛起&#xff0c;其公布的业绩令人瞩目——在短短三年内&#xff0c;交易流水已跨越百亿大关&#xff0c;并在最近一个月内迎来了近百万的新增注册用户。这一强劲的增长势头&#xff0c;无疑吸引了众多商家和…...

【微服务】前端微服务qiankun 2.x主子应用通信代码片段

主应用代码 主应用工程里面源代码新建qiankun/index.js&#xff0c;通信代码如下&#xff1a; import { initGlobalState } from "qiankun"; import store from /store// 主应用与微应用数据通信 const state {subappClassName: // 设置子应用打包根的class类名 …...

高级java每日一道面试题-2024年9月30日-算法篇-LRU是什么?如何实现?

如果有遗漏,评论区告诉我进行补充 面试官: LRU是什么?如何实现? 我回答: LRU&#xff08;Least Recently Used&#xff09;是一种常用的缓存淘汰策略&#xff0c;用于在缓存满时决定哪些数据应该被移除。LRU算法的基本思想是&#xff1a;当缓存达到其容量上限时&#xff0…...

CSS选择器的全面解析与实战应用

CSS选择器的全面解析与实战应用 一、基本选择器1.1 通配符选择器&#xff08;*&#xff09;2.标签选择器&#xff08;div&#xff09;1.3 类名选择器&#xff08;.class&#xff09;4. id选择器&#xff08;#id&#xff09; 二、 属性选择器&#xff08;attr&#xff09;三、伪…...

vue3自动暴露element-plus组件的ref

自动暴露子组件的方法&#xff0c;注意在TS下&#xff0c;需要自己声明类型&#xff0c;我这里全用any代替了 <template><el-button click"getFocus">获得焦点</el-button><com ref"comRef" /> </template><script setup…...

龙芯+FreeRTOS+LVGL实战笔记(新)——10蜂鸣器嘀嘀嘀

本专栏是笔者另一个专栏《龙芯+RT-Thread+LVGL实战笔记》的姊妹篇,主要的区别在于实时操作系统的不同,章节的安排和任务的推进保持一致,并对源码做了完善与优化,各位可以先到本人主页下去浏览另一专栏的博客列表(目前已撰写36篇,图1所示),再决定是否订阅。此外,也可以…...

微信小程序-数据模型与动态赋值

首先新建一个小程序项目. 这边有创建基础项目的流程:从0新建一个微信小程序实现一个简单跳转_小白开发小程序源代码-CSDN博客 一共两步: 1.建立页面的 数据模型 和 默认赋值: 默认赋值: 2.接收输入框的新文案,动态替换上面的文案展示 //文件 testUI.js增加方法:onInputChan…...

【Redis】Linux下安装配置及通过C++访问Redis

文章目录 一、Linux Centos 7.0版本下的安装及配置二、通过C访问Redis 一、Linux Centos 7.0版本下的安装及配置 通过源来安装&#xff0c;此次安装的版本为 redis 5.0 的&#xff0c;要通过其他源进行安装&#xff0c;首先安装 scl 源 yum install centos-release-scl-rh再安…...

Python 入门教程(4)数据类型 | 4.7、元组

文章目录 一、元组1、定义2、创建3、访问元组元素4、遍历元组5、 前言&#xff1a; 在Python编程中&#xff0c;元组&#xff08;tuple&#xff09;是一种内置的数据结构&#xff0c;它提供了一种存储多个项目&#xff08;元素&#xff09;的方式&#xff0c;这些项目可以是不同…...

Temu正在吸引越来越多的亚马逊卖家,这个市场Temu蝉联下载榜首

近年来&#xff0c;全球电商市场竞争愈发激烈&#xff0c;各大平台纷纷使出浑身解数&#xff0c;以期在激烈的市场竞争中脱颖而出。 一个来自中国的新兴电商平台——Temu&#xff0c;凭借其独特的市场策略和迅猛的发展势头&#xff0c;正在吸引越来越多的亚马逊卖家。Temu为美国…...

设计原则模式概览

前言 架构设计是软件系统稳定的核心因素&#xff0c;也是程序员晋级架构师的核心因素&#xff0c;建议日常开发过程中针对设计进行深挖与思考 核心 分清楚哪些是稳定的&#xff0c;哪些是变化的&#xff08;一定有稳定跟变化的成分&#xff09;&#xff1b; 捋清楚哪些是类设计…...

高级主题:接口性能测试与压力测试

在现代软件开发中&#xff0c;确保接口的性能和稳定性是非常重要的。随着用户数量的增加&#xff0c;接口需要能够承受高并发请求&#xff0c;从而保证良好的用户体验。本篇文章将介绍如何使用 Python 工具 Locust 进行接口性能测试和压力测试&#xff0c;分析测试结果&#xf…...

python绘制图像

柱状图 import os# 输入想要存储图像的路径 os.chdir(D:)import matplotlib.pyplot as plt import numpy as np # 改变绘图风格 import seaborn as snssns.set(color_codesTrue)cell [gen7, xgspon, 3081GB, vettel, totalplay, other] pvalue [21, 20, 18, 13, 7, 34]width…...

如何修复变砖的手机并恢复丢失的数据

您可能之前听说过“变砖”&#xff0c;但您知道什么是变砖手机吗&#xff1f;正如许多论坛中经常提出的问题一样&#xff0c;我如何知道我的手机是否变砖了&#xff1f;好吧&#xff0c;手机变砖主要有两种类型&#xff0c;即软件变砖和硬变砖。软变砖手机意味着重启后您仍然可…...

网站代理备案步骤/开鲁视频

Node.js os 模块提供了一些基本的系统操作函数。可以通过以下方式引入该模块&#xff08;不过最新版本的node.js已经默认引入了该模块了&#xff09;&#xff1a; var os require("os"); hostname() 返回操作系统的默认临时文件夹。loadavg() 返回一个包含 1、5、…...

app开发方式/宁波seo网络推广推荐

希望自己能够通过对本课程的学习&#xff0c;对C语言能有进一步的了解&#xff0c;能够学会自主运用&#xff0c;学习到经验技术和知识&#xff0c;也希望老师能够在学习新知识时多讲解多运用&#xff0c;反复练习&#xff0c;以增加学生对新知识的熟练度和理解度。转载于:http…...

福田商城网站建设/世界足球排名

linux下的打包压缩打包和压缩gzip 压缩gzip -[1-9] filename 指定压缩等级gzip -c filename 输出压缩结果到标准输出gzip -d filename 解压缩gzip -k filename 保留原文件gzip -f filename 强制覆盖同名文件gzip -l filename 打印压缩信息gzip -n/N filename 保留源文件信息gzi…...

wordpress laravel 共存/中山网站建设

栈空间 栈空间是从高地址向低地址扩充&#xff0c;堆地址是从低地址向高地址扩充。 堆栈是一种具有一定规则的数据结构&#xff0c;我们可以按照一定的规则进行添加和删除数据。它使用的是后进先出的原则。在x86等汇编集合中堆栈与弹栈的操作指令分别为&#xff1a; PUSH&…...

网站建设及推广衬胶蝶阀/优化软件刷排名seo

2020博客地址汇总2019年博客汇总 一、安装docker docker 一般安装在linux7以上&#xff0c;内核3.1以上。 查看内核 uname -a安装文件&#xff1a;docker-18.06.3-ce.tgz 下载地址 tgz https://download.docker.com/linux/static/stable/x86_64/rpm https://download.do…...

wordpress订单邮件内容修改/廊坊百度关键词优化怎么做

我直接就打开了&#xff0c;而且还显示了旧的仓库&#xff0c;没有提示要登录注册什么的 MacOS SourceTree 安装与使用 - 简书...