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

Go語(yǔ)言中常見(jiàn)的文件操作分享

 更新時(shí)間:2023年01月30日 10:55:50   作者:孫琦Ray  
文件操作應(yīng)該是應(yīng)用程序里非常常見(jiàn)的一種操作,無(wú)論是哪種應(yīng)用場(chǎng)景,幾乎都離不開(kāi)文件的基本操作。Go語(yǔ)言中提供了三個(gè)不同的包去處理文件,下午就來(lái)說(shuō)說(shuō)它們的具體使用

常用包

文件操作應(yīng)該是應(yīng)用程序里非常常見(jiàn)的一種操作,無(wú)論是哪種應(yīng)用場(chǎng)景,幾乎都離不開(kāi)文件的基本操作。Go語(yǔ)言中提供了三個(gè)不同的包去處理文件

os

os包提供了處理文件的API接口,遵循Unix標(biāo)準(zhǔn),平臺(tái)無(wú)關(guān),所有操作系統(tǒng)都可以使用。錯(cuò)誤處理上是Go語(yǔ)言獨(dú)有的,失敗時(shí),返回的是錯(cuò)誤類(lèi)型而非系統(tǒng)錯(cuò)誤編號(hào),對(duì)于調(diào)試很有幫助。os包中提供了創(chuàng)建、刪除、打開(kāi)、修改權(quán)限等功能。

與I/O操作相關(guān)包

io

  • I/O原語(yǔ)接口
  • 包裝到了公共接口中,該接口抽象了功能

ioutil

I/O實(shí)用功能,從Go 1.6開(kāi)始,可以直接通過(guò)io后os包訪問(wèn)相同的功能

bufio

  • 文件的緩沖I/O提供接口
  • 緩沖區(qū)實(shí)際是內(nèi)存中的臨時(shí)空間,用于存儲(chǔ)數(shù)據(jù)并在該空間執(zhí)行臨時(shí)I/O操作,減少系統(tǒng)調(diào)用及磁盤(pán)I/O,適用于數(shù)據(jù)塊傳輸場(chǎng)景,不適用于單個(gè)字符的I/O操作
  • 默認(rèn)的操作都是無(wú)緩沖的

常用文件/目錄操作

路徑拼接

package main

import (
    "fmt"
    "path"
)

func JoinPath() {
    dirs := []string{"/", "home", "ray", "workspace"}
    path := path.Join(dirs...)
    fmt.Printf("Path after join: %v\n", path)
}

func main() {
    JoinPath()
}

輸出信息為

Path after join: /home/ray/workspace

更多功能請(qǐng)參考:https://pkg.go.dev/path/filepath#pkg-functions

創(chuàng)建文件(touch)

改代碼執(zhí)行后將生成一個(gè)為空的sample.txt文件

package main

import (
    "log"
    "os"
)

func CreateEmptyFile() {
	myFile, err := os.Create("sample.txt")
	if err != nil {
		log.Fatal("ERROR! ", err)
	}
	log.Println("Empty file created successfully. ", myFile)
	myFile.Close()
}

func main() {
    CreateEmptyFile()
}

獲取文件信息

這里主要使用os.Stat函數(shù)

package main

import (
    "fmt"
    "log"
    "os"
)

func FileInfo() {
	fileInfo, err := os.Stat("sample.txt")
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println("File Name:", fileInfo.Name())
	fmt.Println("Size ", fileInfo.Size(), " bytes")
	fmt.Println("Permissions:", fileInfo.Mode())
	fmt.Println("Last modified:", fileInfo.ModTime())
	fmt.Println("Is Directory: ", fileInfo.IsDir())
}

func main() {
    FileInfo()
}

讀取文件內(nèi)容

和其他語(yǔ)言類(lèi)似,讀取文件主要使用Open, Read等函數(shù),文件處理最底層是基于原始字節(jié)的,在這個(gè)抽象之上,可以進(jìn)一步構(gòu)建更方便的接口。

package main

import (
    "log"
    "os"
)

func FileRead(filePath string) {
	oFile, err := os.Open(filePath)
	if err != nil {
		log.Fatal(err)
	}
	defer oFile.Close()
	buff := make([]byte, 100)
	for no, err := oFile.Read(buff); err == nil; no, err = oFile.Read(buff) {
		if no > 0 {
			os.Stdout.Write(buff[0:no])
		}
	}
}

func main() {
    FileRead("sample.txt")
}

寫(xiě)入文件內(nèi)容

我們嘗試使用一個(gè)文件拷貝的樣例,來(lái)學(xué)習(xí)寫(xiě)入的方式,這里除了剛才使用的os包,還是用了io包,最終將顯示一共拷貝了多少字節(jié)

package main

import (
    "log"
    "io"
    "os"
)

func Copy(src, dest string) {

	srcFile, err := os.Open(src)
	if err != nil {
		log.Fatal(err)
	}
	defer srcFile.Close()

	destFile, err := os.Create(dest)
	if err != nil {
		log.Fatal(err)
	}
	defer destFile.Close()

	numBytes, err := io.Copy(destFile, srcFile)
	if err != nil {
		log.Fatal(err)
	}
	log.Printf("Successfully copied %d bytes", numBytes)
	err = destFile.Sync()
	if err != nil {
		log.Fatal(err)
	}
}

func main() {
    Copy("source.txt", "dest.txt")
}

到此這篇關(guān)于Go語(yǔ)言中常見(jiàn)的文件操作分享的文章就介紹到這了,更多相關(guān)Go語(yǔ)言文件操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go內(nèi)置零值標(biāo)識(shí)符zero

    Go內(nèi)置零值標(biāo)識(shí)符zero

    大家學(xué)習(xí)和使用?Go?語(yǔ)言時(shí),有一個(gè)神奇的概念:零值(zero-values),所以本文想給大家分享一個(gè)關(guān)于零值的新提案,目測(cè)已經(jīng)八九不離十了
    2023-08-08
  • Go-Web框架中AOP方案的實(shí)現(xiàn)方式

    Go-Web框架中AOP方案的實(shí)現(xiàn)方式

    本文主要介紹了Go-Web框架中AOP方案的實(shí)現(xiàn)方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Go語(yǔ)言LeetCode題解937重新排列日志文件

    Go語(yǔ)言LeetCode題解937重新排列日志文件

    這篇文章主要為大家介紹了Go語(yǔ)言LeetCode題解937重新排列日志文件,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Golang實(shí)現(xiàn)http重定向https

    Golang實(shí)現(xiàn)http重定向https

    這篇文章介紹了Golang實(shí)現(xiàn)http重定向https的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • Go 切片導(dǎo)致內(nèi)存泄露的幾種原因

    Go 切片導(dǎo)致內(nèi)存泄露的幾種原因

    某些情況下,對(duì)一個(gè)已存在的切片或數(shù)組進(jìn)行切分操作可能會(huì)導(dǎo)致內(nèi)存泄漏,本文主要介紹了Go 切片導(dǎo)致內(nèi)存泄露的幾種原因,感興趣的可以了解一下
    2023-05-05
  • go內(nèi)存緩存BigCache使用入門(mén)詳解

    go內(nèi)存緩存BigCache使用入門(mén)詳解

    這篇文章主要為大家介紹了go內(nèi)存緩存BigCache使用入門(mén)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • GO中的條件變量sync.Cond詳解

    GO中的條件變量sync.Cond詳解

    條件變量是基于互斥鎖的,它必須基于互斥鎖才能發(fā)揮作用,條件變量的初始化離不開(kāi)互斥鎖,并且它的方法有點(diǎn)也是基于互斥鎖的,這篇文章主要介紹了GO的條件變量sync.Cond,需要的朋友可以參考下
    2023-01-01
  • 聊聊Golang中很好用的viper配置模塊

    聊聊Golang中很好用的viper配置模塊

    這篇文章主要介紹了Golang中很好用的viper配置模塊用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • Golang Gin框架中間件的用法詳解

    Golang Gin框架中間件的用法詳解

    中間件是Gin框架中的一個(gè)核心概念,它允許開(kāi)發(fā)者在處理HTTP請(qǐng)求的過(guò)程中插入自定義的鉤子函數(shù),從而實(shí)現(xiàn)諸如日志記錄、身份驗(yàn)證、權(quán)限控制等公共邏輯,本文將結(jié)合實(shí)際案例,詳細(xì)講解Gin框架中間件的用法
    2024-10-10
  • 淺談go中切片比數(shù)組好用在哪

    淺談go中切片比數(shù)組好用在哪

    數(shù)組和切片都是常見(jiàn)的數(shù)據(jù)結(jié)構(gòu),本文將介紹Go語(yǔ)言中數(shù)組和切片的基本概念,同時(shí)詳細(xì)探討切片的優(yōu)勢(shì),感興趣的可以了解下
    2023-06-06

最新評(píng)論

东安县| 绥滨县| 罗平县| 海口市| 区。| 县级市| 西青区| 永济市| 太原市| 台东市| 平罗县| 灵川县| 商丘市| 建湖县| 徐水县| 称多县| 蓝山县| 遂昌县| 榆社县| 镇安县| 鄢陵县| 灵武市| 郑州市| 峨山| 刚察县| 桑植县| 张北县| 巨野县| 西乌珠穆沁旗| 古交市| 青川县| 江都市| 慈利县| 密云县| 张家港市| 玛沁县| 磐石市| 株洲县| 大港区| 依安县| 东阿县|