亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Go語言中常見的文件操作分享

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

常用包

文件操作應(yīng)該是應(yīng)用程序里非常常見的一種操作,無論是哪種應(yīng)用場景,幾乎都離不開文件的基本操作。Go語言中提供了三個不同的包去處理文件

os

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

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

io

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

ioutil

I/O實用功能,從Go 1.6開始,可以直接通過io后os包訪問相同的功能

bufio

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

常用文件/目錄操作

路徑拼接

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

更多功能請參考:https://pkg.go.dev/path/filepath#pkg-functions

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

改代碼執(zhí)行后將生成一個為空的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)容

和其他語言類似,讀取文件主要使用Open, Read等函數(shù),文件處理最底層是基于原始字節(jié)的,在這個抽象之上,可以進一步構(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")
}

寫入文件內(nèi)容

我們嘗試使用一個文件拷貝的樣例,來學(xué)習(xí)寫入的方式,這里除了剛才使用的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語言中常見的文件操作分享的文章就介紹到這了,更多相關(guān)Go語言文件操作內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Golang基于Vault實現(xiàn)敏感信息保護

    Golang基于Vault實現(xiàn)敏感信息保護

    Vault?是一個強大的敏感信息管理工具,自帶了多種認證引擎和密碼引擎,本文主要探討應(yīng)用程序如何安全地從?Vault?獲取敏感信息,并進一步實現(xiàn)自動輪轉(zhuǎn),感興趣的可以了解一下
    2023-06-06
  • Go語言中如何進行包管理

    Go語言中如何進行包管理

    在Go語言中,包(package)是函數(shù)和數(shù)據(jù)的集合,用于組織代碼,實現(xiàn)模塊化開發(fā),本文將結(jié)合實際案例,詳細講解Go語言包管理的用法,有需要的可以參考下
    2024-10-10
  • 詳解Go多協(xié)程并發(fā)環(huán)境下的錯誤處理

    詳解Go多協(xié)程并發(fā)環(huán)境下的錯誤處理

    這篇文章主要介紹了詳解Go多協(xié)程并發(fā)環(huán)境下的錯誤處理,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Golang當中的定時器實例詳解

    Golang當中的定時器實例詳解

    這篇文章主要給大家介紹了關(guān)于Golang當中定時器的相關(guān)資料,定時器的實現(xiàn)大家應(yīng)該都遇到過,最近在學(xué)習(xí)golang,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-07-07
  • GoLang context包的使用方法介紹

    GoLang context包的使用方法介紹

    日常Go開發(fā)中,Context包是用的最多的一個了,幾乎所有函數(shù)的第一個參數(shù)都是ctx,那么我們?yōu)槭裁匆獋鬟fContext呢,Context又有哪些用法,底層實現(xiàn)是如何呢?相信你也一定會有探索的欲望,那么就跟著本篇文章,一起來學(xué)習(xí)吧
    2023-03-03
  • go語言base64加密解密的方法

    go語言base64加密解密的方法

    這篇文章主要介紹了go語言base64加密解密的方法,實例分析了Go語言base64加密解密的技巧,需要的朋友可以參考下
    2015-03-03
  • 詳解Go語言中的iface和eface

    詳解Go語言中的iface和eface

    Go 是 Google 開發(fā)的一種編譯型、并發(fā)型,并具有垃圾回收功能的編程語言,這篇文章主要介紹了Go語言中的iface和eface,需要的朋友可以參考下
    2023-07-07
  • Go語法糖之‘...’ 的使用實例詳解

    Go語法糖之‘...’ 的使用實例詳解

    語法糖(Syntactic sugar),也譯為糖衣語法,指計算機語言中添加的某種語法,這種語法對語言的功能并沒有影響,但是更方便程序員使用。這篇文章主要給大家介紹Go語法糖之‘...’ 的使用,感興趣的朋友一起看看吧
    2018-10-10
  • Go?gRPC進階教程gRPC轉(zhuǎn)換HTTP

    Go?gRPC進階教程gRPC轉(zhuǎn)換HTTP

    這篇文章主要為大家介紹了Go?gRPC進階教程gRPC轉(zhuǎn)換HTTP教程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • Go使用proto3的踩坑實戰(zhàn)記錄

    Go使用proto3的踩坑實戰(zhàn)記錄

    這篇文章主要給大家介紹了關(guān)于Go使用proto3的踩坑記錄,文中通過實例代碼介紹的非常詳細,對大家學(xué)習(xí)或者會用Go語言具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2023-02-02

最新評論