Go开发文件服务fs.go深入探讨之架构

架构

首先看下FileServer的组成:

创新互联专注于阳高企业网站建设,响应式网站开发,商城系统网站开发。阳高网站建设公司,为阳高等地区提供建站服务。全流程按需网站设计,专业设计,全程项目跟踪,创新互联专业和态度为您提供的服务

接口称为FileSystem,有一个Open方法。但实现它的却是名为Dir的类型(其实是一个string),为什么起名为Dir呢?

作者想了下,认为Dir是目录的意思,而文件系统(FileSystem)就好比是一个目录包裹一系列文件,于是这个目录本身就是FileSystem,如下图所示

如果这样理解,那么FileSystem的Open方法,就是以该Dir名为目录,再加上具体的文件路径构成一个完整的路径,而源码中确实也是这样做的。

FileServer内部实例化一个fileHandler,因此一个Server其实是一个fileHandler。

两句代码的分析

fs := http.FileServer(http.Dir("./assets/"))
http.Handle("/static/", http.StripPrefix("/static", fs))

分析

这两句代码是常见的静态文件处理方式,http.Dir指定了文件系统(也就是一个目录)为./assets/。它是一个相对路径,相对于当前目录,下面解释下什么是当前目录。

如果是在IDE中开发,比如在Goland中,当前目录就是项目所在的目录;而如果是直接运行可执行程序,那么当前目录就是可执行程序所在目录。两者一般是不一样的,需要注意。

http.FileServer返回的是一个Handler,因此可以直接用在http.Handle中。

完整解释:创建一个Handler名为fs,当路由以"/static/"开头时,转交给该处理器处理,而http.StripPrefix首先将前缀剔除掉。比如,请求的路由是/static/cat.jpg,剔除之后得到/cat.jpg。将该路径和目录名组合得到./assets/cat.jpg,就是完整的相对路径。

得到路径之后下一步怎么处理呢?按照正常逻辑,就是打开文件,因此,一个文件服务处理就是将文件打开并倒进响应Body的过程。

优点和缺点

通过两行代码可以看到,代码比较简易,请求到达然后发送文件,要什么就发什么。这同时也是它的缺点,因为不能对文件进行更细粒度的处理,这个在后文中会详述。

总结

文件服务是一个普通的Handler,请求到达,服务器打开文件,然后将文件内容倒进响应Body返回。

本文名称:Go开发文件服务fs.go深入探讨之架构
网站路径:http://www.shufengxianlan.com/qtweb/news16/295216.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联