自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Go開發(fā)文件服務fs.go深入探討之架構

開發(fā) 架構
通過兩行代碼可以看到,代碼比較簡易,請求到達然后發(fā)送文件,要什么就發(fā)什么。這同時也是它的缺點,因為不能對文件進行更細粒度的處理,這個在后文中會詳述。

架構

首先看下FileServer的組成:

接口稱為FileSystem,有一個Open方法。但實現(xiàn)它的卻是名為Dir的類型(其實是一個string),為什么起名為Dir呢?

作者想了下,認為Dir是目錄的意思,而文件系統(tǒng)(FileSystem)就好比是一個目錄包裹一系列文件,于是這個目錄本身就是FileSystem,如下圖所示

如果這樣理解,那么FileSystem的Open方法,就是以該Dir名為目錄,再加上具體的文件路徑構成一個完整的路徑,而源碼中確實也是這樣做的。

FileServer內部實例化一個fileHandler,因此一個Server其實是一個fileHandler。

兩句代碼的分析

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

分析

這兩句代碼是常見的靜態(tài)文件處理方式,http.Dir指定了文件系統(tǒng)(也就是一個目錄)為./assets/。它是一個相對路徑,相對于當前目錄,下面解釋下什么是當前目錄。

如果是在IDE中開發(fā),比如在Goland中,當前目錄就是項目所在的目錄;而如果是直接運行可執(zhí)行程序,那么當前目錄就是可執(zhí)行程序所在目錄。兩者一般是不一樣的,需要注意。

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

完整解釋:創(chuàng)建一個Handler名為fs,當路由以"/static/"開頭時,轉交給該處理器處理,而http.StripPrefix首先將前綴剔除掉。比如,請求的路由是/static/cat.jpg,剔除之后得到/cat.jpg。將該路徑和目錄名組合得到./assets/cat.jpg,就是完整的相對路徑。

得到路徑之后下一步怎么處理呢?按照正常邏輯,就是打開文件,因此,一個文件服務處理就是將文件打開并倒進響應Body的過程。

優(yōu)點和缺點

通過兩行代碼可以看到,代碼比較簡易,請求到達然后發(fā)送文件,要什么就發(fā)什么。這同時也是它的缺點,因為不能對文件進行更細粒度的處理,這個在后文中會詳述。

總結

文件服務是一個普通的Handler,請求到達,服務器打開文件,然后將文件內容倒進響應Body返回。

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2021-09-03 12:33:36

語言并發(fā)下載器

2009-12-23 16:13:00

WPF Attache

2010-04-15 14:02:32

Oracle網(wǎng)絡服務

2009-11-20 17:17:08

Oracle函數(shù)索引

2021-05-17 05:36:02

CSS 文字動畫技巧

2010-11-22 14:18:32

MySQL鎖機制

2010-07-21 09:38:15

PHP緩存技術

2024-01-26 06:42:05

Redis數(shù)據(jù)結構

2017-01-03 17:57:46

Android異步精髓Handler

2013-07-11 09:45:48

扁平化扁平化設計

2009-12-07 13:55:58

PHP array_m

2009-12-07 16:07:03

PHP類的繼承

2009-10-16 09:17:39

屏蔽布線系統(tǒng)

2009-11-12 13:56:54

2009-12-14 14:40:10

Ruby全局域變量

2012-02-28 14:43:43

2009-12-11 11:08:31

靜態(tài)路由策略

2010-10-11 10:31:15

2015-09-02 08:57:56

JavaHashMap工作原理

2009-08-27 11:27:58

foreach語句C# foreach語
點贊
收藏

51CTO技術棧公眾號