首页 > 后端开发 > Golang > 如何在 Go 中从根目录提供主页和静态内容?

如何在 Go 中从根目录提供主页和静态内容?

Linda Hamilton
发布: 2024-12-18 11:05:10
原创
118 人浏览过

How to Serve Both a Homepage and Static Content from the Root Directory in Go?

在 Go 中从根目录提供主页和静态内容

在 Go 中,从根目录提供静态内容和主页,同时处理特定的内容URL 需要量身定制的方法。默认情况下,为根路径(“/”)注册处理程序与从同一目录提供静态内容相冲突。

要解决此问题,一种选择是使用替代 FileServer 实现来检查是否存在在尝试提供文件之前。对于不存在的文件,它可以遵循主页处理程序或返回 404 错误。

以下代码演示了这种方法:

package main

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

func HomeHandler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "HomeHandler")
}

func exists(path string) bool {
    _, err := os.Stat(path)
    return !os.IsNotExist(err)
}

func FileServerWithFallback(dir string) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        path := dir + r.URL.Path
        if exists(path) {
            http.ServeFile(w, r, path)
            return
        }
    }
}

func main() {
    http.HandleFunc("/", HomeHandler) // homepage
    http.Handle("/static/", FileServerWithFallback("./static"))

    http.ListenAndServe(":8080", nil)
}
登录后复制

在此代码中,exists 函数检查是否存在文件存在于给定路径。如果文件存在于提供的目录中,则 FileServerWithFallback 处理程序提供文件服务。否则,它允许请求继续处理主页处理程序。

通过使用此自定义的 FileServer 实现,可以从根目录提供静态内容,同时仍然允许按预期调用主页处理程序。

以上是如何在 Go 中从根目录提供主页和静态内容?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板