仅包含标准库的 Golang 中间件

2024-02-17

我的第一个 stackoverflow 问题,所以请不要介意我对 stackoverflow 的天真和所问的问题,golang 的初学者。

我想知道这两个调用之间的区别以及简单的理解Handle, Handler, HandleFunc, HandlerFunc.

http.Handle("/profile", Logger(profilefunc))
http.HandleFunc("/", HomeFunc)

func main() {            
   fmt.Println("Starting the server.")

   profilefunc := http.HandlerFunc(ProfileFunc)

   http.Handle("/profile", Logger(profilefunc))
   http.HandleFunc("/", HomeFunc)

   http.ListenAndServe("0.0.0.0:8081", nil)
}

func Logger(h http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request){
        log.Println("Before serving request")
        h.ServeHTTP(w, r)
        log.Println("After serving request")
    })
}

func ProfileFunc(w http.ResponseWriter, r *http.Request) {
    fmt.Fprint(w, "You are on the profile page.")
}

func HomeFunc(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello Imran Pochi")
}

我想...简单的了解一下Handle、Handler、HandleFunc、HandlerFunc。

  • Handler是一个可以响应HTTP请求的接口,并且有一个ServeHTTP(ResponseWriter, *Request) method.
  • http.Handle注册一个Handler处理与给定匹配的 HTTP 请求pattern.
  • http.HandleFunc注册一个处理函数来处理与给定匹配的 HTTP 请求pattern。处理函数应采用以下形式func(ResponseWriter, *Request).
  • HandlerFunc是以下形式的显式函数类型func(ResponseWriter, *Request). HandlerFunc有一个方法ServeHTTP那叫它自己。这允许您将函数转换为HandlerFunc并将其用作Handler.

我想知道这两个电话之间的区别

http.Handle("/profile", Logger(profilefunc))
http.HandleFunc("/", HomeFunc)

Logger是一个例子中间件 http://www.alexedwards.net/blog/making-and-using-middleware,这是一个需要一个函数http.Handler它返回另一个http.Handler包装原始处理程序。调用时,此处理程序可能(或可能不)调用嵌套的http.Handler在执行某些操作之前和/或之后。所以第一行是说注册profileFunc Handler包裹在Logger具有“/profile”模式的中间件。第二行是说注册HomeFunc具有“/”模式的函数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

仅包含标准库的 Golang 中间件 的相关文章

  • 具有多个等待组的管道中通道范围内的死锁

    我正在练习通过同时将计算分为 100 组来计算阶乘的挑战 我解决了 WaitGroups 上的很多问题 但仍然处于calculateFactorial函数我在通道部分的范围上陷入了僵局 希望有人能指出这个问题 谢谢 package main
  • Cgo 生成的源无法在 MVC 上编译

    我有一个用 CGo 制作的共享库 它在 Linux 和 Android 上链接得很好 但是 当使用 Microsoft Visual Studio 2017 在 Windows 10 上进行编译时 出现以下错误 Microsoft R Pr
  • 如何使用golang中通过引用传递的索引访问切片中的元素

    我将切片的引用传递给函数 并且我正在函数内的切片中进行更改 我还尝试使用索引访问切片中的元素 它在 golang 中抛出异常 通过引用传递的索引访问切片中的元素的最佳方法是什么 您可以在此处找到示例代码 参考 http www reddit
  • golang从sdin扫描一行数字

    我正在尝试从标准输入读取输入 3 2 1
  • 在 Go 中执行字节数组

    我正在尝试在 Go 程序中执行 shellcode 类似于使用其他语言执行此操作的方式 示例 1 C 程序中的 Shellcode https stackoverflow com questions 16626857 shellcode i
  • Ajax 将文件上传到内容类型为 Multipart 的 GoLang 服务器

    我正在尝试使用多部分表单将音频文件上传到 Golang 服务器 然而 Go 返回错误 multipart NextPart bufio buffer full 我相信这表明我的 Javascript 请求中存在不属于多部分格式的内容 这是我
  • 我想在后端验证来自 golang 前端的时区

    前端在注册期间发送时区以及其他用户详细信息 我需要在时区上放置一个验证器来进行 api 测试 时区数据的格式为 GMT 10 00 Hawaii GMT 08 00 Pacific Time US amp Canada 我所做的是定义数组中
  • 如何解析 Content-Disposition 标头以检索文件名属性?

    使用 go 如何解析从 http HEAD 请求检索到的 Content Disposition 标头以获取文件的文件名 此外 如何从 http HEAD 响应中检索标头本身 这样的事情正确吗 resp err http Head http
  • 如何在 Go 中解组具有多个项目的简单 xml?

    我想从以下 xml 中获取人物 People 的一部分
  • 如何在运行“go test”时排除或跳过特定目录[重复]

    这个问题在这里已经有答案了 go test go list grep v vendor coverprofile testCoverage txt 我正在使用上述命令来测试文件 但有 1 个名为 Store 的文件夹我想从测试中排除 怎样才
  • 鸭子在 Go 中打字

    我想写一个Join函数接受任意对象String 方法 package main import fmt strings type myint int func i myint String string return fmt Sprintf
  • 匿名结构和空结构

    http play golang org p vhaKi5uVmm http play golang org p vhaKi5uVmm package main import fmt var battle make chan string
  • Golang 正则表达式命名组和子匹配

    我正在尝试匹配正则表达式并获取匹配的捕获组名称 当正则表达式仅与字符串匹配一次时 这是有效的 但如果它与字符串匹配多次 SubexpNames不返回重复的名称 这是一个例子 package main import fmt regexp fu
  • 解组转义 XML

    在 Go 中 我将如何解码此 XML 响应 我尝试过建立一个自定义UnMarshal方法在我的Answerstruct 但我运气不太好
  • go中有memset的类似物吗?

    在 C 中 我可以使用某些值初始化数组memset https msdn microsoft com en us library aa246471 28v vs 60 29 aspx const int MAX 1000000 int is
  • 如何将 int[] 转换为 uint8[]

    所以 我需要你的帮助 我找不到关于该主题的任何内容 Golang 是一门刚刚诞生的语言 所以对于像我这样的新手来说很难快速找到答案 预先声明的 Goint类型大小是特定于实现的 32 位或 64 位 数字类型 http golang org
  • 如何使信号量超时

    Go 中的信号量是通过通道来实现的 一个例子是这样的 https sites google com site gopatterns concurrency semaphores https sites google com site gop
  • Golang中按长度分割字符串

    有谁知道如何在 Golang 中按长度分割字符串 例如 每 3 个字符分割 helloworld 那么理想情况下它应该返回一个 hel low orl d 数组 或者 一个可能的解决方案是在每 3 个字符后附加一个换行符 所有的想法都非常感
  • 将 time.Time 转换为字符串

    我正在尝试将数据库中的一些值添加到 string在围棋中 其中一些是时间戳 我收到错误 无法在数组元素中使用 U Created date 类型 time Time 作为类型字符串 我可以转换吗time Time to string typ
  • select 语句是否保证通道选择的顺序?

    继从这个答案 https stackoverflow com a 25795236 274460 如果一个 goroutine 在两个通道上进行选择 是否保证通道的选择顺序与其发送的顺序相同 我对发送者是单线程的情况特别感兴趣 例如 是否保

随机推荐

  • java.net.SocketException:Android 模拟器中的协议不支持地址族

    我正在尝试运行简单的应用程序来从 android 模拟器访问互联网 这是我的代码 我在代理后面 并通过 无线网络 gt APN gt 在模拟器中配置了代理设置 但互联网是通过浏览器而不是应用程序运行的 HttpURLConnection c
  • AWS X 射线追踪在 Node.js 中的传出请求上中断

    嘿 我正在尝试跟踪来自 Express 应用程序的传出请求 但我无法让它工作 当我不使用 AWSXRAY captureHttpsGlobal 函数时 传入请求一切正常 我可以在 服务地图 中看到我的应用程序以及 AWS 上传入的传入请求跟
  • 在捆绑包中找不到名为“Main”的故事板

    我收到一个奇怪的错误 Could not find a storyboard named Main in bundle NSBundle 当尝试在真实的 iOS 设备上运行我的应用程序时 我的目录中有该文件 并且它在模拟器中运行良好 然而
  • Intel HD 3700 linux 的 Java 8 Swing 渲染问题

    我在 Kubuntu 18 04 中用 java 8 update 181 开发了一个应用程序 在我的开发 PC 中 我拥有配备英特尔 HD Graphics 530 的英特尔 i3 6100 所有图形均使用 swing 完成 并且通过此硬
  • 使用 HttpEntity 在 Spring RestTemplate 中删除

    我不知道为什么我的代码不起作用 我尝试过 Postman 并且工作正常 但与RestTemplate当它使用相同的端点时我无法得到响应 ResponseEntity
  • 从 Android 中的 EditText 中移除焦点 [重复]

    这个问题在这里已经有答案了 我有两个EditTexts 和一CheckBox and a Button在我的布局中按上述顺序 将值输入到EditText 用户必须通过单击接受条款和条件Checkbox 我需要将焦点从EditText单击该复
  • 如何在 NetBeans 中获得 jQuery 代码完成?

    我在用着适用于 PHP 的 NetBeans http bits netbeans org netbeans 6 8 m2 当我编辑 js 文件时 它给了我javascript代码完成 我怎样才能让它同时给我 jQuery 代码完成 首先转
  • 配置 htaccess 以与 IIS6 上的 IIRF 配合使用 - codeigniter

    我刚刚使用 CodeIgniter 创建了一个网站 问题出在我们的服务器在带有 IIS6 的 Windows Server 2003 上运行 调用网站时只显示首页 其他页面由于IIS6的 htaccess限制而显示404错误页面 支持人员告
  • 如何使用 openssl 创建公钥和私钥?

    我的问题是 How to create 公钥 和 Windows 中 OpenSSL 的私钥 How to put the created public key in crt文件和 私人的 pcks8 file 我想使用这两个密钥在 Jav
  • 无法启动 Groovy 控制台 - 缺少依赖项 javax/xml/bind/Unmarshaller

    常规版本 2 5 1 Java版本 10 0 2 尝试启动 groovyConsole 我得到以下信息 groovyConsole WARNING An illegal reflective access operation has occ
  • 包含容器日志的日志文件在哪里?

    我正在使用几个容器运行docker compose 我可以使用命令查看应用程序日志docker compose logs 但是 我想访问原始日志文件以将其发送到某个地方 例如 它位于哪里 我想每个容器都有单独的日志 在容器内 但我在哪里可以
  • Qprocess 搞乱了我的 linux 命令(我认为)。怎么修? [复制]

    这个问题在这里已经有答案了 我需要强制我的 C QT4 应用程序从 Linux 命令读取结果 我正在尝试使用 Qpr ocess 但是一旦我的命令变得复杂 它就会以某种方式变得混乱 只是猜测 并且不起作用 这里我试着给大家举一个小例子 QP
  • Java打印四字节十六进制数

    我有一个小问题 我有 5421 1 和 1 等数字 我需要以四个字节打印它们 例如 5421 gt 0x0000152D 1 gt 0xFFFFFFFF 1 gt 0x00000001 另外 我有浮点数 如 1 2 58 654 8 25f
  • Jest.js 强制窗口未定义

    我正在使用笑话 酶设置进行测试 如果定义了窗口 我有一个有条件地渲染某些内容的函数 在我的测试套件中 我试图达到第二种情况 即未定义窗口 但我无法强制它 it makes something when window is not defin
  • 如何移除后退堆栈片段的焦点?

    我在我的应用程序中使用片段 我有一个片段包含EditText还有一些Dialogfragment 当我单击一个特定的小部件时 它将移动到下一个片段 我需要后台堆栈中的第一个片段 因此我还添加了 addToBackStack 方法 第二个片段
  • 以图形方式显示 IntelliJ 中 git log --follow 的等效项

    IntelliJ 14 有没有办法显示特定文件的完整日志 我的意思是 执行一种git log follow以图形方式查看旧版本 在这些文件可能被重命名之前 目前 当我这样做时Git gt 显示历史记录在文件上 它仅显示相当于git log
  • 不带任何操作的 asp.net 路由语法

    我正在尝试建立一条没有任何操作而只有一个参数的路线 domain com 不带任何参数 应转到一个控制器 however 域名 com somestring 域名 com anotherstring 域名 com anythingreall
  • 将 uint16_t 转换为 char[2] 以通过套接字发送(unix)

    我知道大致上有关于这方面的事情 但是我的大脑受伤了 我找不到任何东西可以让这项工作发挥作用 我正在尝试通过 unix 套接字发送一个 16 位无符号整数 为此 我需要将 uint16 t 转换为两个字符 然后我需要在连接的另一端读入它们并将
  • 系统设置意图后无法返回活动

    在我的应用程序中 我需要进入手机的设置活动来激活 GPS 并希望使用以下代码返回我的应用程序 Intent intent new Intent Settings ACTION LOCATION SOURCE SETTINGS startAc
  • 仅包含标准库的 Golang 中间件

    我的第一个 stackoverflow 问题 所以请不要介意我对 stackoverflow 的天真和所问的问题 golang 的初学者 我想知道这两个调用之间的区别以及简单的理解Handle Handler HandleFunc Hand