主要的go

package main

import (
    "net/http"
)

func main() {
    http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("static"))))
    http.ListenAndServe(":8080", nil)
}

目录 struct :

%GOPATH%/src/project_name/主要的go 
%GOPATH%/src/project_name/static/..files and folders ..

即使阅读了文档,我也很难理解http.StripPrefix到底在这里做什么.

1)如果我删除了http.StripPrefix,为什么我无法访问localhost:8080/static

2)如果我删除该功能,哪个URL会映射到/static文件夹?

推荐答案

http.StripPrefix()将请求的处理转发给您指定为其参数的请求,但在此之前,它通过go 掉指定的前缀来修改请求URL.

例如,如果浏览器(或HTTP客户端)请求资源:

/static/example.txt

StripPrefix将剪切/static/并将修改后的请求转发给http.FileServer()返回的处理程序,这样它将看到请求的资源已被删除

/example.txt

http.FileServer()返回的Handler将查找文件relative的内容并将其提供给指定为其参数(您指定"static"是静电文件的根)的文件夹(或者更确切地说是FileSystem).

现在,由于"example.txt"static文件夹中,您必须指定与之相对的路径才能获得当前的文件路径.

另一个例子

此示例可以在http包文档页面(here)中找到:

// To serve a directory on disk (/tmp) under an alternate URL
// path (/tmpfiles/), use StripPrefix to modify the request
// URL's path before the FileServer sees it:
http.Handle("/tmpfiles/",
        http.StripPrefix("/tmpfiles/", http.FileServer(http.Dir("/tmp"))))

Explanation:

被告知静电文件的根是"/tmp".我们希望URL以"/tmpfiles/"开头.因此,如果有人请求"/tempfiles/example.txt",我们希望服务器发送文件"/tmp/example.txt".

为了实现这一点,我们必须从URL中go 掉"/tmpfiles",其余部分将是与根文件夹"/tmp"相比的相对路径,如果我们加入根文件夹"/tmp",则根文件夹"/tmp"将提供:

/tmp/example.txt

Go相关问答推荐

"k8s.io/apimachinery/pkg/runtime.对象(缺少方法DeepCopyBody)

使用恶意软件 scanner (ClamAV)时的Google云存储桶上传文件验证

在保留额外参数的同时解封YAML

使用Digitorus/pdfsign在GO(Golang)中签署pdf文件

如何使用GO GIN从Auth0 JWT内标识检索权限

如何使用Gio设置标题栏图标

当我有外键时,如何使用 GORM 创建数据库的新条目

从带有嵌套括号的字符串中提取值

运行 Docker 容器 - X11 无法打开显示:0

如何测试 Zerolog 记录器引发类型错误的日志(log)事件?

Go 中的 protobuf FieldMask 解组

Kperf 构建失败

同一文件上的多个 Arrow CSV 阅读器返回 null

使用 Go 根据 /etc/shadow 文件中的散列密码验证密码

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

如果服务器在客户端的 gRPC 中不可用,则等待的方法

Golang SSH客户端错误无法验证,try 的方法[无公钥],没有支持的方法

golang jwt.MapClaims 获取用户ID

使用正则表达式拆分具有相同标题的数据块

try 执行`go test ./... -v`时,Golang中有没有办法设置标志