日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯網營銷解決方案
聊聊Go語言中文件操作

常用包

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

成都創(chuàng)新互聯長期為成百上千家客戶提供的網站建設服務,團隊從業(yè)經驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯網生態(tài)環(huán)境。為蘿北企業(yè)提供專業(yè)的成都網站設計、網站建設蘿北網站改版等技術服務。擁有十余年豐富建站經驗和眾多成功案例,為您定制開發(fā)。

os

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

與I/O操作相關包

? io

 I/O原語接口

包裝到了公共接口中,該接口抽象了功能

? ioutil

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

? bufio

? 文件的緩沖I/O提供接口

? 緩沖區(qū)實際是內存中的臨時空間,用于存儲數據并在該空間執(zhí)行臨時I/O操作,減少系統調用及磁盤I/O,適用于數據塊傳輸場景,不適用于單個字符的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函數

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()
}

讀取文件內容

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

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")
}

寫入文件內容

我們嘗試使用一個文件拷貝的樣例,來學習寫入的方式,這里除了剛才使用的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")
}

參考資料

? 更多關于文件的操作,可以在使用過程中查詢官方文檔。

? Go語言文件操作大全(https://colobu.com/2016/10/12/go-file-operations/)


文章名稱:聊聊Go語言中文件操作
本文路徑:http://www.dlmjj.cn/article/dhhopjd.html