当前位置: 首页 > 面试题库 >

FileServer处理程序和其他一些HTTP处理程序

戴霖
2023-03-14
问题内容

我试图在Go中启动一个HTTP服务器,该服务器将使用自己的处理程序来提供自己的数据,但与此同时,我想使用默认的http FileServer来提供文件。

我在使FileServer的处理程序在URL子目录中工作时遇到问题。

该代码不起作用:

package main

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

func main() {
        http.Handle("/files/", http.FileServer(http.Dir(".")))
        http.HandleFunc("/hello", myhandler)

        err := http.ListenAndServe(":1234", nil)
        if err != nil {
                log.Fatal("Error listening: ", err)
        }
}

func myhandler(w http.ResponseWriter, req *http.Request) {
        fmt.Fprintln(w, "Hello!")
}

我期望在localhost:1234 / files /中找到本地目录,但是它返回一个404 page not found

但是,如果我将文件服务器的处理程序地址更改为/,它将起作用:

        /* ... */
        http.Handle("/", http.FileServer(http.Dir(".")))

但是现在我的文件可以访问了,并且在根目录中可见。

如何使它可以从不同于root的URL提供文件?


问题答案:

您需要使用http.StripPrefix处理程序:

http.Handle("/files/", http.StripPrefix("/files/", http.FileServer(http.Dir("."))))

看到这里:http :
//golang.org/pkg/net/http/#example_FileServer_stripPrefix



 类似资料:
  • 我有一个包含一些字段的,每个字段都绑定了一些事件(与此功能无关)。 我必须添加另一个到每个字段,以显示一个模态在第一次点击他们中的任何一个,并且只在第一次点击。 我想的是这样的: 其思想是,在第一次单击之后,方法将从所有元素中删除“click handlers”。 如果不存在其他引用的“点击处理程序”,那就太好了,因为这样我就把它们全部删除了。 我需要从所有字段中只删除这个特定的“单击处理程序”,

  • 问题内容: 我的Go Web应用程序中有一个相当快捷的错误处理程序,它会引发HTTP错误,记录响应的重要部分并提供错误模板。我想删除在处理程序中多次编写类似代码的重复: 我已经阅读了Error Handling and Go文章,其中定义了一个自定义HTTP处理程序类型,该类型将返回这样的错误类型/结构(甚至返回int,err): 但是我不确定如何保留现有的中间件功能/包装,使我可以像这样链接中间

  • 我在页面上有输入字段和提交按钮。 这里是jQuery代码: 我想防止模糊,如果从输入字段点击提交div,但想允许它,如果从输入字段点击页面的其他部分。我无法使用“提交”按钮。 我已竖起了小提琴。净/405kzboh/1 但是现在我甚至不明白为什么点击事件没有在模糊事件之前触发,如果有人从输入点击提交!

  • 它只会创建错误或重写现有文件。 TLDR:我如何让我的注释处理器编辑另一个注释处理器生成的文件?

  • 我正在使用带有thymeleaf的Spring Boot,我所有的资源都在Spring应用程序之外的路径上,例如。在dev env上应该使用url解析路径,并且live env继续路径。 为什么资源处理程序不处理这些类型的资源,但是如果我处理没有问题?我错过了什么吗? 编辑:如果是并且位置是url也没有被处理

  • 问题内容: 如果我在http处理程序中启动goroutine,即使返回响应后它也会完成吗?这是一个示例代码: 在上面的示例中,goroutine是否会在所有情况下都完成?还是有什么特殊情况无法完成? 问题答案: 是的,它会完成,没有什么可以阻止它。 停止goroutine完成 “从外部” 完成的唯一事情就是从函数返回(这也意味着完成程序的执行,但是这种情况永远不会发生)。其他导致不稳定状态的情况,