偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Go開(kāi)發(fā)文件服務(wù)fs.go深入探討之架構(gòu)

開(kāi)發(fā) 架構(gòu)
通過(guò)兩行代碼可以看到,代碼比較簡(jiǎn)易,請(qǐng)求到達(dá)然后發(fā)送文件,要什么就發(fā)什么。這同時(shí)也是它的缺點(diǎn),因?yàn)椴荒軐?duì)文件進(jìn)行更細(xì)粒度的處理,這個(gè)在后文中會(huì)詳述。

架構(gòu)

首先看下FileServer的組成:

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

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

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

FileServer內(nèi)部實(shí)例化一個(gè)fileHandler,因此一個(gè)Server其實(shí)是一個(gè)fileHandler。

兩句代碼的分析

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

分析

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

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

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

完整解釋?zhuān)?/strong>創(chuàng)建一個(gè)Handler名為fs,當(dāng)路由以"/static/"開(kāi)頭時(shí),轉(zhuǎn)交給該處理器處理,而http.StripPrefix首先將前綴剔除掉。比如,請(qǐng)求的路由是/static/cat.jpg,剔除之后得到/cat.jpg。將該路徑和目錄名組合得到./assets/cat.jpg,就是完整的相對(duì)路徑。

得到路徑之后下一步怎么處理呢?按照正常邏輯,就是打開(kāi)文件,因此,一個(gè)文件服務(wù)處理就是將文件打開(kāi)并倒進(jìn)響應(yīng)Body的過(guò)程。

優(yōu)點(diǎn)和缺點(diǎn)

通過(guò)兩行代碼可以看到,代碼比較簡(jiǎn)易,請(qǐng)求到達(dá)然后發(fā)送文件,要什么就發(fā)什么。這同時(shí)也是它的缺點(diǎn),因?yàn)椴荒軐?duì)文件進(jìn)行更細(xì)粒度的處理,這個(gè)在后文中會(huì)詳述。

總結(jié)

文件服務(wù)是一個(gè)普通的Handler,請(qǐng)求到達(dá),服務(wù)器打開(kāi)文件,然后將文件內(nèi)容倒進(jìn)響應(yīng)Body返回。

責(zé)任編輯:武曉燕 來(lái)源: 今日頭條
相關(guān)推薦

2021-09-03 12:33:36

語(yǔ)言并發(fā)下載器

2009-12-23 16:13:00

WPF Attache

2010-04-15 14:02:32

Oracle網(wǎng)絡(luò)服務(wù)

2009-11-20 17:17:08

Oracle函數(shù)索引

2021-05-17 05:36:02

CSS 文字動(dòng)畫(huà)技巧

2010-11-22 14:18:32

MySQL鎖機(jī)制

2010-07-21 09:38:15

PHP緩存技術(shù)

2009-12-11 11:08:31

靜態(tài)路由策略

2013-07-11 09:45:48

扁平化扁平化設(shè)計(jì)

2009-11-12 13:56:54

2017-01-03 17:57:46

Android異步精髓Handler

2024-01-26 06:42:05

Redis數(shù)據(jù)結(jié)構(gòu)

2009-10-16 09:17:39

屏蔽布線系統(tǒng)

2009-12-14 14:40:10

Ruby全局域變量

2012-02-28 14:43:43

2009-12-07 16:07:03

PHP類(lèi)的繼承

2009-12-07 13:55:58

PHP array_m

2010-03-05 13:44:00

Python序列

2009-08-27 11:27:58

foreach語(yǔ)句C# foreach語(yǔ)

2023-01-12 17:18:06

數(shù)據(jù)庫(kù)多云
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)