func main() {
    mux := http.NewServeMux()
    staticHandler := http.FileServer(http.Dir("./templates"))
    mux.Handle("/", http.StripPrefix("/", staticHandler))
    log.Fatal(http.ListenAndServe(":8080", mux))
}

我想加载"模板"目录中的html文件.

推荐答案

您可以使用http.ServeFile()来构建自己的文件服务器.

见下面的草图.

然后,你可以在你的定制fileHandler.ServeHTTP()内截取服务文件.

package main

import (
    "log"
    "net/http"
    "path"
    "path/filepath"
    "strings"
)

func main() {
    mux := http.NewServeMux()

    //staticHandler := http.FileServer(http.Dir("./templates"))
    staticHandler := fileServer("./templates")

    mux.Handle("/", http.StripPrefix("/", staticHandler))
    log.Printf("listening")
    log.Fatal(http.ListenAndServe(":8080", mux))
}

// returns custom file server
func fileServer(root string) http.Handler {
    return &fileHandler{root}
}

// custom file server
type fileHandler struct {
    root string
}

func (f *fileHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    upath := r.URL.Path
    if !strings.HasPrefix(upath, "/") {
        upath = "/" + upath
        r.URL.Path = upath
    }
    name := filepath.Join(f.root, path.Clean(upath))
    log.Printf("fileHandler.ServeHTTP: path=%s", name)
    http.ServeFile(w, r, name)
}

Go相关问答推荐

Go PQ驱动程序无法使用默认架构进行查询

更改位置级别和时间戳零点Golang

错误.如果它包含切片,则返回FALSE

如何在 Chi Router 的受保护路由下提供静态文件(尤其是图像)?

如何绕过深层 xml,没有嵌套循环?

「GORM错误」不支持的数据类型:&[],不正确的模式

使用Cookie身份验证的Gorilla Golang Websocket优化

Go test "-run -" 标志执行测试更快

当填充通道的函数调用未嵌入 goroutine 时,为什么我会遇到死锁?

甚至用天真的洗牌分配?

使用 GO 在侧 tar 文件中提取 tar 文件的最快方法

函数超时和 goroutine 泄漏

如何在没有内存分配的情况下压缩和发布文件

我如何解码 aes-256-cfb

有没有办法在 golang 中定义可索引类型?

Go:如何创建一个可以提供配置文件中描述的 url 的服务器

如何在 docker 文件中安装 golang 包?

map和struct golang的合并

Go:如何通过 GIN-Router 从 AWS S3 将文件作为二进制流发送到浏览器?

如何访问Go 1.18泛型 struct (structs)中的共享字段