杜松子酒上的 router.Static() 和 router.Use(static.Serve()) 有什么区别?

问题描述 投票:0回答:2

我刚刚阅读了 gin 的文档,发现有两种不同的方法将资产文件夹设置到服务器,一种是使用路由器的

Static()
方法,如下所示:

package main

import "github.com/gin-gonic/gin"

func main() {
        r := gin.Default()
        r.Static("/assets", "./assets")

那么另一种是使用静态中间件,如下:

package main

import (
       "github.com/gin-gonic/gin"
       "github.com/gin-contrib/static"
)

func main() {
        r := gin.Default()
        r.Use(static.Serve("/", static.LocalFile("./assets", false)))

这2种方式在速度、副作用等方面有什么区别吗?

go go-gin
2个回答
2
投票

第一个选项来自

静态从给定的文件系统根目录提供文件。 内部使用 http.FileServer,因此使用 http.NotFound 代替 路由器的 NotFound 处理程序。

第二个选项链接

Static 返回一个中间件处理程序,为给定目录中的静态文件提供服务。

两者都在引擎盖下使用

http.FileServer


0
投票

一个重要的区别是

r.Use(static.Serve("/", static.LocalFile("./assets", false)))
是作为中间件实现的,而
r.Static("/assets", "./assets")
是作为路由实现的。

因此,路由器方法使用通配符,这最终会影响您构建其他路由的方式。您可以使用中间件方法在

/
上提供服务,没有问题,但如果您使用路由器方法尝试相同的操作,它会在启动时出现恐慌,因为您在所有路径的根上放置了通配符。

© www.soinside.com 2019 - 2024. All rights reserved.