最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

GoLang OS包以及File類(lèi)型詳細(xì)講解

 更新時(shí)間:2023年03月17日 09:07:01   作者:鯤鵬飛九萬(wàn)里  
go中對(duì)文件和目錄的操作主要集中在os包中,下面對(duì)go中用到的對(duì)文件和目錄的操作,做一個(gè)總結(jié)筆記。在go中的文件和目錄涉及到兩種類(lèi)型,一個(gè)是type File struct,另一個(gè)是type Fileinfo interface

一、OS包的作用

os包中的API主要可以幫助我們使用操作系統(tǒng)中的文件系統(tǒng)、權(quán)限系統(tǒng)、環(huán)境變量、系統(tǒng)進(jìn)程,以及系統(tǒng)信號(hào)。

對(duì)于類(lèi)Unix的操作系統(tǒng),其中的一切都可以被看作文件。因此可以利用os.File類(lèi)型操作的東西很多。

本篇文章把os.File 類(lèi)型應(yīng)用于常規(guī)的文件。

二、os.File類(lèi)型實(shí)現(xiàn)了哪些io包的接口

os.File擁有的都是指針?lè)椒?,所以除了空接口以外,它本身沒(méi)有實(shí)現(xiàn)任何接口。而它的指針類(lèi)型則實(shí)現(xiàn)了很多io代碼包中的接口。

  • *os.File實(shí)現(xiàn)了io包中三個(gè)最核心的簡(jiǎn)單接口:io.Readerio.Writer、io.Closer
  • *os.File還實(shí)現(xiàn)了另外三個(gè)簡(jiǎn)單接口:io.ReaderAt、io.Seeker、io.WriterAt
  • 由于*os.File實(shí)現(xiàn)了上面六個(gè)簡(jiǎn)單接口,所以它順便實(shí)現(xiàn)了io包中9個(gè)擴(kuò)展接口中的7個(gè):io.ReadWriterio.ReadCloser、io.ReadSeeker、io.ReadWriteCloserio.ReadWriteSeeker、io.WriteCloserio.WriteSeeker。

由于·*os.File沒(méi)有實(shí)現(xiàn)簡(jiǎn)單接口io.ByteReaderio.RuneReader,所以它沒(méi)有實(shí)現(xiàn)它沒(méi)有實(shí)現(xiàn)作為它兩者的擴(kuò)展接口:io.ByteScannerio.RuneScanner。

所以,os.File可以讀寫(xiě)文件,并讀取和設(shè)定下一次讀寫(xiě)的起始索引位置。還可以對(duì)文件進(jìn)行關(guān)閉。但是,并不能專(zhuān)門(mén)地讀取文件的下一個(gè)字節(jié),或者寫(xiě)一個(gè)Unicode字符,也不能進(jìn)行任何的讀回退操作。

三、創(chuàng)建os.File類(lèi)型的指針類(lèi)型

在os包中,有這樣幾個(gè)函數(shù):Create、NewFile、Open和OpenFile。

3.1 os.Create

os.Create函數(shù)用于根據(jù)指定的路徑創(chuàng)建一個(gè)新的文件。

使用這個(gè)函數(shù)創(chuàng)建的文件,對(duì)于操作系統(tǒng)中的所有用戶來(lái)說(shuō),都是可以讀和寫(xiě)的。

  • 如果在我們給予os.Create函數(shù)的路徑之上,已經(jīng)存在一個(gè)文件,那么該函數(shù)會(huì)清空現(xiàn)有文件中的全部?jī)?nèi)容,然后再把它作為第一個(gè)結(jié)果值返回;
  • 如果給定的路徑的某一級(jí)父目錄并不存在,該函數(shù)就會(huì)返回一個(gè)*os.PathError類(lèi)型的錯(cuò)誤值,以表示“不存在的文件或目錄“。

3.2 os.NewFile

該函數(shù)在被調(diào)用的時(shí)候,需要接受一個(gè)代表文件描述符的uintptr類(lèi)型的值,以及一個(gè)用于表示文件名的字符值。

  • 如果給定的文件描述符不是有效的,那么函數(shù)將返回nil。否則,它將會(huì)返回一個(gè)代表了相應(yīng)文件的File值;

這個(gè)函數(shù)的功能并不是創(chuàng)建一個(gè)新的文件,而是依據(jù)一個(gè)已經(jīng)存在的文件描述符,來(lái)新建一個(gè)包裝了該文件的File值。

3.3 os.Open

os.Open函數(shù)會(huì)打開(kāi)一個(gè)文件并返回包裝了該文件的File值。然而,該函數(shù)只能以只讀模式打開(kāi)文件。

換句話說(shuō),我們只能從該函數(shù)返回的File值中讀取內(nèi)容,而不能向它寫(xiě)入任何內(nèi)容。

如果調(diào)用它的任何一個(gè)寫(xiě)入方法,都會(huì)得到一個(gè)表示“壞的文件描述符”的錯(cuò)誤值。

os.File類(lèi)型有一個(gè)指針?lè)椒‵d,它在被調(diào)用之后將會(huì)返回一個(gè)uintptr 類(lèi)型的值,這個(gè)值就代表了當(dāng)前的File值所持有的那個(gè)文件描述符。

3.4 os.OpenFile

os.OpenFile其實(shí)是os.Open、os.Create函數(shù)的底層支持,它最為靈活。

這個(gè)函數(shù)有3個(gè)參數(shù):

  • name:文件路徑;
  • flag:需要施加在文件描述符之上的模式;比如,只讀模式(由os.O_RDONLY)。操作模式
  • perm:代表的也是模式,類(lèi)型是os.FileMode,是一個(gè)基于uint32類(lèi)型的再定義類(lèi)型。權(quán)限模式。

操作模式限定了文件的方式,權(quán)限模式控制文件的訪問(wèn)權(quán)限。

四、os.File值的操作模式有哪些

針對(duì)File值的操作模式主要有:只讀模式、只寫(xiě)模式和讀寫(xiě)模式。

  • 只讀模式:os.O_RDONLY
  • 只寫(xiě)模式:os.O_WRONLY
  • 讀寫(xiě)模式:os.O_RDWR

更多的操作模式:

  • os.O_APPEDN :寫(xiě)內(nèi)容是,追加在現(xiàn)有內(nèi)容的后面;
  • os.O_CREATE :當(dāng)給定路徑上的文件不存在時(shí),創(chuàng)建一個(gè)新文件;
  • os.O_EXCL:需要和os.O_CREATE一同使用,表示給定的路徑上不能有存在的文件。
  • os.O_SYNC :在打開(kāi)文件之上實(shí)施同步I/O。它會(huì)保證讀寫(xiě)的內(nèi)容總會(huì)與硬盤(pán)上的數(shù)據(jù)保持同步。
  • os.O_TRUNC:如果文件已存在,并且是常規(guī)的文件,那么就先清空其中已存在的任何內(nèi)容。

多個(gè)操作模式是通過(guò)按位操作符|組合起來(lái)的。

func Create(name string) (*File, error) {
	return OpenFile(name, O_RDWR|O_CREATE|O_TRUNC, 0666)
}
func Open(name string) (*File, error) {
	return OpenFile(name, O_RDONLY, 0)
}

五、os.OpenFile的第三個(gè)表示模式的參數(shù)

os.OpenFile函數(shù)的第三個(gè)參數(shù)perm代表的是權(quán)限模式,它的類(lèi)型是os.FileMode。實(shí)際上,os.FileMode能夠代表的不僅是權(quán)限模式,還可以代表文件模式(也可以稱(chēng)為文件種類(lèi))。

os.FileMode是基于uint32類(lèi)型的再定義類(lèi)型,包含23個(gè)比特位,在這23個(gè)比特位,每個(gè)比特位都有特定的含義。

  • 如果在最高比特位的二進(jìn)制數(shù)是1,該文件模式就等同于os.ModeDir,也就是說(shuō)相應(yīng)的文件是一個(gè)目錄。
  • 如果在第26位比特位的二進(jìn)制數(shù)是1,該文件模式就等同于os.ModeNamedPipe,也就是說(shuō)該文件是一個(gè)命名管道。

os.FileMode只有最低9個(gè)比特位才用于表示文件的權(quán)限。

os.FileMode類(lèi)型的值與os.ModePerm常量(值為0777)做按位與操作,得到的值就表示對(duì)應(yīng)的權(quán)限模式。

這9個(gè)比特位,3個(gè)為一組,共3組。從高到低,分別表示:文件所有者(創(chuàng)建文件的那個(gè)用戶)、文件所屬的用戶組、用戶對(duì)該文件的訪問(wèn)權(quán)限。而對(duì)于每個(gè)組,其中的3個(gè)比特位從高到低分別表示:讀權(quán)限、寫(xiě)權(quán)限、執(zhí)行權(quán)限。

某個(gè)比特位上是1,表示相應(yīng)的權(quán)限開(kāi)啟,否則,就表示相應(yīng)的權(quán)限關(guān)閉。

  • 八進(jìn)制整數(shù)0777就表示:操作系統(tǒng)中的所有用戶都對(duì)當(dāng)前的文件有讀、寫(xiě)和執(zhí)行的權(quán)限;
  • 而八進(jìn)制整數(shù)0666則表示:所有用戶都對(duì)當(dāng)前文件有讀和寫(xiě)的權(quán)限,但都沒(méi)有執(zhí)行的權(quán)限。

但要注意,只有在新建文件的時(shí)候,這里的第三個(gè)參數(shù)值才是有效的。在其他情況下,即使我們?cè)O(shè)置了此參數(shù),也不會(huì)對(duì)目標(biāo)文件產(chǎn)生任何的影響。

到此這篇關(guān)于GoLang OS包以及File類(lèi)型詳細(xì)講解的文章就介紹到這了,更多相關(guān)Go os包的File內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • golang中包無(wú)法引入問(wèn)題解決

    golang中包無(wú)法引入問(wèn)題解決

    本文主要介紹了golang中包無(wú)法引入問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • golang判斷兩個(gè)事件是否存在沖突的方法示例

    golang判斷兩個(gè)事件是否存在沖突的方法示例

    這篇文章主要為大家詳細(xì)介紹了golang判斷兩個(gè)事件是否存在沖突的方法示例,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-10-10
  • Golang實(shí)現(xiàn)JWT身份驗(yàn)證的示例詳解

    Golang實(shí)現(xiàn)JWT身份驗(yàn)證的示例詳解

    JWT(JSON Web Token)是一種開(kāi)放標(biāo)準(zhǔn)(RFC 7519),用于在網(wǎng)絡(luò)應(yīng)用間安全地傳輸聲明,本文主要為大家詳細(xì)介紹了Golang實(shí)現(xiàn)JWT身份驗(yàn)證的相關(guān)方法,希望對(duì)大家有所幫助
    2024-03-03
  • GO語(yǔ)言實(shí)現(xiàn)列出目錄和遍歷目錄的方法

    GO語(yǔ)言實(shí)現(xiàn)列出目錄和遍歷目錄的方法

    這篇文章主要介紹了GO語(yǔ)言實(shí)現(xiàn)列出目錄和遍歷目錄的方法,涉及ioutil.ReadDir()與filepath.Walk()的應(yīng)用,是非常實(shí)用的技巧,需要的朋友可以參考下
    2014-12-12
  • 從零封裝Gin框架實(shí)現(xiàn)日志初始化及切割歸檔功能

    從零封裝Gin框架實(shí)現(xiàn)日志初始化及切割歸檔功能

    這篇文章主要為大家介紹了從零封裝Gin框架實(shí)現(xiàn)日志初始化及切割歸檔功能示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • go for range遍歷二維數(shù)組的示例

    go for range遍歷二維數(shù)組的示例

    今天小編就為大家分享一篇關(guān)于go for range遍歷二維數(shù)組的示例,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-04-04
  • 一篇文章搞懂Go語(yǔ)言中的Context

    一篇文章搞懂Go語(yǔ)言中的Context

    這篇文章主要介紹了一篇文章搞懂Go語(yǔ)言中的Context,Context攜帶一個(gè)截止日期、一個(gè)取消信號(hào)和其他跨越API邊界的值。上下文的方法可以被多個(gè)gor例程同時(shí)調(diào)用
    2022-07-07
  • Ruby序列化和持久化存儲(chǔ)(Marshal、Pstore)操作方法詳解

    Ruby序列化和持久化存儲(chǔ)(Marshal、Pstore)操作方法詳解

    這篇文章主要介紹了Ruby序列化和持久化存儲(chǔ)(Marshal、Pstore)操作方法詳解,包括Ruby Marshal序列化,Ruby Pstore存儲(chǔ),需要的朋友可以參考下
    2022-04-04
  • Go語(yǔ)言實(shí)現(xiàn)遺傳算法的實(shí)例代碼

    Go語(yǔ)言實(shí)現(xiàn)遺傳算法的實(shí)例代碼

    Go 是一個(gè)開(kāi)源的編程語(yǔ)言,它能讓構(gòu)造簡(jiǎn)單、可靠且高效的軟件變得容易。本文將重點(diǎn)介紹如何用Go語(yǔ)言實(shí)現(xiàn)遺傳算法。如果你還沒(méi)有參加過(guò)GoLang Tour,我還建議你快速看一下這門(mén)語(yǔ)言的介紹
    2017-11-11
  • Go語(yǔ)言實(shí)現(xiàn)常見(jiàn)限流算法的示例代碼

    Go語(yǔ)言實(shí)現(xiàn)常見(jiàn)限流算法的示例代碼

    計(jì)數(shù)器、滑動(dòng)窗口、漏斗算法、令牌桶算法是我們常見(jiàn)的幾個(gè)限流算法,本文將依次用Go語(yǔ)言實(shí)現(xiàn)這幾個(gè)限流算法,感興趣的可以了解一下
    2023-05-05

最新評(píng)論

彭泽县| 巴林右旗| 岢岚县| 嘉祥县| 古田县| 汉中市| 白城市| 商城县| 和林格尔县| 仙居县| 梨树县| SHOW| 乳源| 洛南县| 德庆县| 仁寿县| 平湖市| 南涧| 开平市| 如东县| 德令哈市| 新源县| 资阳市| 大名县| 文登市| 开远市| 延寿县| 普定县| 新巴尔虎左旗| 南昌县| 谢通门县| 象山县| 韶关市| 贡觉县| 柳河县| 巴东县| 石棉县| 侯马市| 建昌县| 龙海市| 监利县|