#開啟和關閉檔案
package main import "os" func main() { //os.Open是只读模式 fileObj, err := os.Open("永不退缩.txt") if err != nil { panic(err) } //关闭文件 fileObj.Close() //一般情况下使用这种方式关闭文件 defer fileObj.Close() }
註:如果你使用的是Goland
,在學習檔案操作這一塊時,盡量不要右鍵執行#,因為查找檔案路徑不一樣
盡可能的編譯成.exe
文件,這樣找的就是目前目錄
读取文件
读取指定大小
代码
func main() { //os.Open是只读模式 fileObj, err := os.Open("永不退缩.txt") if err != nil { panic(err) } var fileBytes = make([]byte,128) n, err := fileObj.Read(fileBytes) if err != nil { panic(err) } fmt.Println(string(fileBytes[:n])) //一般情况下使用这种方式关闭文件 defer fileObj.Close() }
执行结果
可以发现,根本就没有读取完,并且还乱码了。
读取整个文件
上述我们只读取了128个字节,一个中文3个字节,128/3
,除下标点符号,应该是40个左右,明显不够
那该怎么办才能读取所有呢???
上述我们只读取了128个字节,我们可以在读取128个字节啊
然后找个罐子将每次读取的都装进去,读取完,装完,完美
代码
func main() { //os.Open是只读模式 fileObj, err := os.Open("永不退缩.txt") if err != nil { panic(err) } //一般情况下使用这种方式关闭文件 defer fileObj.Close() var 罐子 []string var 每次读取字节 = make([]byte,128) for{ n, err := fileObj.Read(每次读取字节) //err == io.EOF表示读完了,一定要放在err != nil前面 if err == io.EOF { break } if err != nil { panic(err) } var 每次读取字符串 = string(每次读取字节[:n]) 罐子 = append(罐子,每次读取字符串) } fmt.Println(罐子) }
执行结果
会发现还是有乱码,这是为啥???
这是因为我们每次都是按照字节来读取一部分,一部分的,但是中文是3个字节,所有有时候可能切错了,就出现了乱码
那咋办呢?没办法,默认的读取文件就这么点功能,更多功能,尽在bufio
bufio
bufio
可以理解为原生file操作的一个加强版,更牛叉,功能更多
还是上述这个文件,看看如何完美读取
代码
func main() { //os.Open是只读模式 fileObj, err := os.Open("永不退缩.txt") if err != nil { panic(err) } //一般情况下使用这种方式关闭文件 defer fileObj.Close() //需要将文件对象传进去 reader := bufio.NewReader(fileObj) for{ //按行读取 row, err := reader.ReadString('\n')//参数是字符,不是字符串 if err == io.EOF { break } if err != nil { panic(err) } fmt.Printf("%v",row) } }
执行结果
读取整个文件
可能又有人说了,啊,星期八,我感觉还是麻烦,有没有更简单的办法读取文件,肯定有呀,一次性读取所有呢?答案是肯定的,此时需要用到ioutil
包。
代码
func main() { //os.Open是只读模式 bytes, err := ioutil.ReadFile("永不退缩.txt") if err != nil { panic(err) } fmt.Println(string(bytes)) }
执行结果
但是这种有个缺点,只能读取小文件,要是来个10G文件也这样玩,保证电脑死机!!!
写入文件
写入文件的话,我们就需要使用openFile
这个方法打开文件
在开始之前呢,先记一下下面几种模式
os.O_WRONLY
只写os.O_RDONLY
只读os.O_CREATE
如果文件不存在,则创建文件os.O_RDWR
可读可写os.O_TRUNC
清空os.O_APPEND
追加文件
写入字节和写入行
代码
func main() { fileObj, err := os.OpenFile("临时.txt", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666) if err != nil { panic(err) } defer fileObj.Close() w_content := "我是临时表内容\n" //Write方法需要将字符串转成字节 fileObj.Write([]byte(w_content)) //WriteString直接写入字符串 fileObj.WriteString(w_content) }
执行结果
bufio写文件
代码
func main() { fileObj, err := os.OpenFile("临时.txt", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666) if err != nil { panic(err) } defer fileObj.Close() w_content := "我是临时表内容\n" writer := bufio.NewWriter(fileObj) writer.Write([]byte(w_content)) writer.WriteString(w_content) //写完必须刷入 writer.Flush() }
执行结果
ioutil写文件
代码
func main() { w_content := "我是临时表内容\n" err := ioutil.WriteFile("临时.txt", []byte(w_content), 0666) if err != nil { panic(err) } }
执行结果
拷贝文件
拷贝文件,就是拷贝文件呗,A文件拷贝到B文件中
其实他的底层还是打开俩文件,把A文件内容写入到B文件中
代码
func main() { 原文件, err := os.Open("永不退缩.txt") if err != nil { panic(err) } defer 原文件.Close() 目标文件, err := os.OpenFile("临时.txt", os.O_WRONLY|os.O_CREATE, 0666) if err != nil { panic(err) } defer 目标文件.Close() //拷贝文件 io.Copy(目标文件,原文件) }
执行结果
总结
本次章节我们主要学习文件操作的相关知识,主要分为读取文件和写入文件
读取文件都有原生方法读写和bufio加强读写和ioutil一次性读写
推荐大家使用bufio这个包操作文件,带有缓冲功能,性能更好!!
以上是一篇文章帶你搞定Go語言基礎之文件操作的詳細內容。更多資訊請關注PHP中文網其他相關文章!

goimpactsdevelopmentpositationality throughspeed,效率和模擬性。 1)速度:gocompilesquicklyandrunseff,IdealforlargeProjects.2)效率:效率:ITScomprehenSevestAndardArdardArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdEcceSteral Depentencies,增強的Depleflovelmentimency.3)簡單性。

C 更適合需要直接控制硬件資源和高性能優化的場景,而Golang更適合需要快速開發和高並發處理的場景。 1.C 的優勢在於其接近硬件的特性和高度的優化能力,適合遊戲開發等高性能需求。 2.Golang的優勢在於其簡潔的語法和天然的並發支持,適合高並發服務開發。

Golang在实际应用中表现出色,以简洁、高效和并发性著称。1)通过Goroutines和Channels实现并发编程,2)利用接口和多态编写灵活代码,3)使用net/http包简化网络编程,4)构建高效并发爬虫,5)通过工具和最佳实践进行调试和优化。

Go語言的核心特性包括垃圾回收、靜態鏈接和並發支持。 1.Go語言的並發模型通過goroutine和channel實現高效並發編程。 2.接口和多態性通過實現接口方法,使得不同類型可以統一處理。 3.基本用法展示了函數定義和調用的高效性。 4.高級用法中,切片提供了動態調整大小的強大功能。 5.常見錯誤如競態條件可以通過gotest-race檢測並解決。 6.性能優化通過sync.Pool重用對象,減少垃圾回收壓力。

Go語言在構建高效且可擴展的系統中表現出色,其優勢包括:1.高性能:編譯成機器碼,運行速度快;2.並發編程:通過goroutines和channels簡化多任務處理;3.簡潔性:語法簡潔,降低學習和維護成本;4.跨平台:支持跨平台編譯,方便部署。

關於SQL查詢結果排序的疑惑學習SQL的過程中,常常會遇到一些令人困惑的問題。最近,筆者在閱讀《MICK-SQL基礎�...

golang ...


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

Atom編輯器mac版下載
最受歡迎的的開源編輯器

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

禪工作室 13.0.1
強大的PHP整合開發環境