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

Go語言文件讀寫操作案例詳解

 更新時間:2022年09月23日 14:45:29   作者:山與路  
這篇文章主要為大家介紹了Go語言文件讀寫操作案例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

基本介紹

文件,對我們并不陌生,文件是數(shù)據(jù)源(保存數(shù)據(jù)的地方)的 一種

輸入流和輸出流 文件在程序中是以流的形式來操作的

:數(shù)據(jù)在數(shù)據(jù)源(文件)和程序(內存)之間經(jīng)歷的路徑 輸入流:數(shù)據(jù)從文件到內存的路徑 輸出流:數(shù)據(jù)從內存到文件的路徑

  • os.File封裝所有文件相關操作,File是一個結構體

文件基本操作

讀操作

package main
import (
	"bufio"
	"fmt"
	"io"
	"io/ioutil"
	"mahonia"
	"os"
)
func main() {
	//防止控制臺中文亂碼 如果是Golang編譯則需要安裝第三方轉碼包git clone https://github.com/axgle/mahonia.git
	var enc mahonia.Decoder
	enc = mahonia.NewDecoder("gbk")
	//讀取文件的內容并顯示在終端,使用os.Open, file.Close, bufio.NewReader(), reader.ReadString
	//打開文件 file,err:=os.Open(文件的絕對路徑)
	file,err:=os.Open("F:/test.txt")
	if err !=nil{
		fmt.Println("open file err=",err)
	}
	//關閉文件
	defer file.Close()  //要及時關閉文件,否則會有內存泄露
	//創(chuàng)建一個"Reader",帶緩存 默認緩存大小為4096 reader:=bufio.NewReader(file)
	reader:=bufio.NewReader(file)
	//讀取文件的內容
	for{
		str,err:=reader.ReadString('\n')
		fmt.Print(enc.ConvertString(str))
		/*
			你好啊
			真的很好asdb
			123
		*/
		if err ==io.EOF{// 文件末尾
			break
		}
	}
	//一次性讀取文件內容,適用于文件較小的    無需開啟和關閉文件
	// 使用 ioutil.ReadFile content為byte[]
	content,err:=ioutil.ReadFile("f:/test.txt")
	if err!=nil{
		fmt.Println("read file err=",err)
	}
	fmt.Print(enc.ConvertString(string(content)))
	/*
	你好啊
	真的很好asdb
	123
	*/
}

寫操作

文件打開函數(shù) func OpenFile(name string,flag int,perm FileMode)(file *File,err error)

package main
import (
	"bufio"
	"fmt"
	"io"
	"io/ioutil"
	"mahonia"
	"os"
)
func main() {
	//Read1()
	//Read2("f:/test.txt",'gbk')
	/*
	你好啊
	真的很好asdb
	123
	你好啊
	真的很好asdb
	123
	*/
	//創(chuàng)建一個新文件,寫入內容 5句 "hello,Gardon"
	//Write()
	//打開一個存在的文件中,將原來的內容覆蓋成新的內容10句,"你好,世界!!"
	//Write2()
	//打開一個存在的 文件,將原來的內容追加內容"ABC! ENGLISH!"
	//Write3()
	//打開一個存在的文件,將原來的內容讀出顯示在終端,并追加5句"hello,北京"
	Write4()
}
func Read1(){
	//防止控制臺中文亂碼 如果是Golang編譯則需要安裝第三方轉碼包git clone https://github.com/axgle/mahonia.git
	var enc mahonia.Decoder
	enc = mahonia.NewDecoder("gbk")
	//讀取文件的內容并顯示在終端,使用os.Open, file.Close, bufio.NewReader(), reader.ReadString
	//打開文件 file,err:=os.Open(文件的絕對路徑)
	file,err:=os.Open("F:/test.txt")
	if err !=nil{
		fmt.Println("open file err=",err)
	}
	//關閉文件
	defer file.Close()  //要及時關閉文件,否則會有內存泄露
	//創(chuàng)建一個"Reader",帶緩存 默認緩存大小為4096 reader:=bufio.NewReader(file)
	reader:=bufio.NewReader(file)
	//讀取文件的內容
	for{
		str,err:=reader.ReadString('\n')
		fmt.Print(enc.ConvertString(str))
		/*
			你好啊
			真的很好asdb
			123
		*/
		if err ==io.EOF{// 文件末尾
			break
		}
	}
}
func Read2(filename string,encode string){
	var enc mahonia.Decoder
	enc = mahonia.NewDecoder(encode)
	//一次性讀取文件內容,適用于文件較小的    無需開啟和開啟文件
	// 使用 ioutil.ReadFile content為byte[]
	content,err:=ioutil.ReadFile(filename)
	if err!=nil{
		fmt.Println("read file err=",err)
	}
	fmt.Print(enc.ConvertString(string(content)))
}
func Write(){
	filename:="f:/test2.txt"
	//創(chuàng)建文件,并以只寫形式打開
	file,err:=os.OpenFile(filename,os.O_CREATE |os.O_WRONLY,0666)
	if err !=nil{
		fmt.Println("open file err=",err)
		return
	}
	defer file.Close()
	//寫入內容
	str:="hello,Gardon\r\n"
	//寫入時,帶有緩存的*Writer
	writer:=bufio.NewWriter(file)
	for i:=0;i<5 ;i++  {
		writer.WriteString(str)
	}
	//刷新緩存
	writer.Flush()
	//讀取文件
	Read2(filename,"gbk")
	/*
	hello,Gardon
	hello,Gardon
	hello,Gardon
	hello,Gardon
	hello,Gardon
	*/
}
func Write2(){
	filename:="f:/test2.txt"
	//創(chuàng)建文件,并以只寫形式打開
	file,err:=os.OpenFile(filename,os.O_CREATE |os.O_TRUNC,0666)
	if err !=nil{
		fmt.Println("open file err=",err)
		return
	}
	defer file.Close()
	//寫入內容
	str:="你好,世界!!\r\n"
	//寫入時,帶有緩存的*Writer
	writer:=bufio.NewWriter(file)
	for i:=0;i<10 ;i++  {
		writer.WriteString(str)
	}
	//刷新緩存
	writer.Flush()
	//讀取文件
	Read2(filename,"utf-8")
	/*
		你好,世界!!
		你好,世界!!
		你好,世界!!
		你好,世界!!
		你好,世界!!
		你好,世界!!
		你好,世界!!
		你好,世界!!
		你好,世界!!
		你好,世界!!
	*/
}
func Write3(){
	filename:="f:/test2.txt"
	//創(chuàng)建文件,并以只寫形式打開
	file,err:=os.OpenFile(filename,os.O_CREATE |os.O_APPEND,0666)
	if err !=nil{
		fmt.Println("open file err=",err)
		return
	}
	defer file.Close()
	//寫入內容
	str:="ABC! ENGLISH!\r\n"
	//寫入時,帶有緩存的*Writer
	writer:=bufio.NewWriter(file)
	writer.WriteString(str)
	//刷新緩存
	writer.Flush()
	//讀取文件
	Read2(filename,"utf-8")
	/*
		你好,世界!!
		你好,世界!!
		你好,世界!!
		你好,世界!!
		你好,世界!!
		你好,世界!!
		你好,世界!!
		你好,世界!!
		你好,世界!!
		你好,世界!!
		ABC! ENGLISH!
	*/
}
func Write4(){
	filename:="f:/test2.txt"
	//創(chuàng)建文件,并以只寫形式打開
	file,err:=os.OpenFile(filename,os.O_RDWR |os.O_APPEND,0666)
	if err !=nil{
		fmt.Println("open file err=",err)
		return
	}
	defer file.Close()
	//追加內容
	Read2(filename,"utf-8")
	/*
	你好,世界!!
	你好,世界!!
	你好,世界!!
	你好,世界!!
	你好,世界!!
	你好,世界!!
	你好,世界!!
	你好,世界!!
	你好,世界!!
	你好,世界!!
	ABC! ENGLISH!
	*/
	str:="hello,北京\r\n"
	//寫入時,帶有緩存的*Writer
	writer:=bufio.NewWriter(file)
	writer.WriteString(str)
	//刷新緩存
	writer.Flush()
	//讀取文件
	Read2(filename,"utf-8")
	/*
		你好,世界!!
		你好,世界!!
		你好,世界!!
		你好,世界!!
		你好,世界!!
		你好,世界!!
		你好,世界!!
		你好,世界!!
		你好,世界!!
		你好,世界!!
		ABC! ENGLISH!
		hello,北京
	*/
}

寫操作案例

查看文件或目錄是否存在

package main
import (
	"fmt"
	"os"
)
func main() {
	fmt.Println(PathExists("f:/test2.txt")) //true <nil>
	fmt.Println(PathExists("f:/test3.txt")) //false <nil>
}
func PathExists(path string) (bool, error) {
	_, err := os.Stat(path)
	//如果返回的錯誤為nil,說明文件或文件夾存在
	if err == nil {
		return true, nil
	}
	//如果返回的錯誤類型使用os.IsNotExist()判斷為true,說明文件或文件夾不存在
	if os.IsNotExist(err){
		return false, nil
	}
	//如果返回的 錯誤為其他類型,則不確定是否在存在
	return false,err
}

拷貝文件

package main
import (
	"bufio"
	"fmt"
	"io"
	"os"
)
func main() {
	fmt.Println(PathExists("f:/test2.txt")) //true <nil>
	fmt.Println(PathExists("f:/test3.txt")) //false <nil>
	written,err:=CopyFile("f:/test3.txt","f:/test2.txt")
	if err!=nil{
		fmt.Println("拷貝失敗!!")
	}else{
		fmt.Println("拷貝成功!!")
	}
	fmt.Println(written)
}
func PathExists(path string) (bool, error) {
	_, err := os.Stat(path)
	//如果返回的錯誤為nil,說明文件或文件夾存在
	if err == nil {
		return true, nil
	}
	//如果返回的錯誤類型使用os.IsNotExist()判斷為true,說明文件或文件夾不存在
	if os.IsNotExist(err){
		return false, nil
	}
	//如果返回的 錯誤為其他類型,則不確定是否在存在
	return false,err
}
func CopyFile(writerFileName string,readerFileName string) (written int64,err error){
	ReaderFile,err2:=os.Open(readerFileName)
	WriterFlag,_:=PathExists(writerFileName)
	var WriterFile *os.File
	if WriterFlag{
		WriterFile,err=os.OpenFile(writerFileName,os.O_WRONLY |os.O_TRUNC,0666)
	}else{
		WriterFile,err=os.OpenFile(writerFileName,os.O_WRONLY |os.O_CREATE,0666)
	}
	if err !=nil{
		fmt.Println("file open err=",err)
		return
	}
	writer:=bufio.NewWriter(WriterFile)
	defer WriterFile.Close()
	if err2 !=nil{
		fmt.Println("file open err=",err2)
		return
	}
	defer ReaderFile.Close()
	reader:=bufio.NewReader(ReaderFile)
	return io.Copy(writer,reader)
}

以上就是Go語言文件讀寫操作案例詳解的詳細內容,更多關于Go語言文件讀寫操作的資料請關注腳本之家其它相關文章!

相關文章

  • Go語言中一定要知道的切片使用注意事項總結

    Go語言中一定要知道的切片使用注意事項總結

    了解和掌握切片的使用注意事項,可以避免意外的程序行為,所以本文就來和大家深入探討一下Go語言切片常見的注意事項,希望對大家有所幫助
    2023-06-06
  • Golang中crypto/rand庫的使用技巧與最佳實踐

    Golang中crypto/rand庫的使用技巧與最佳實踐

    在Golang的眾多隨機數(shù)生成庫中,crypto/rand?是一個專為加密安全設計的庫,本文主要介紹了Golang中crypto/rand庫的使用技巧與最佳實踐,感興趣的可以了解一下
    2024-02-02
  • 在Go中實現(xiàn)和使用堆棧以及先進先出原則詳解

    在Go中實現(xiàn)和使用堆棧以及先進先出原則詳解

    Go是一種功能強大的編程語言,提供了豐富的數(shù)據(jù)結構和算法,堆棧是計算機科學中的基本數(shù)據(jù)結構之一,在本博文中,我們將探討如何在?Go?中實現(xiàn)和使用堆棧,以及堆棧如何遵循先進先出?(FIFO)?原則
    2023-10-10
  • Go?mod包管理工具詳解

    Go?mod包管理工具詳解

    Go?mod作為Go語言的官方包管理工具,可以幫助開發(fā)者更好地管理包和依賴,提高開發(fā)效率和項目可維護性,本文將介紹Go語言的包和依賴管理,以及Go?mod的作用和優(yōu)勢,需要的朋友可以參考下
    2023-05-05
  • Golang 限流器的使用和實現(xiàn)示例

    Golang 限流器的使用和實現(xiàn)示例

    這篇文章主要介紹了Golang 限流器的使用和實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-06-06
  • Golang實現(xiàn)for循環(huán)運行超時后自動退出的方法

    Golang實現(xiàn)for循環(huán)運行超時后自動退出的方法

    for循環(huán)對大家來說應該都不陌生,對于golang來說更是必不可少,所以下面這篇文章就來給大家介紹了關于Golang如何實現(xiàn)for循環(huán)運行一段時間超時后自動退出的相關資料,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧。
    2017-11-11
  • Go語言實現(xiàn)支付寶支付與退款詳解

    Go語言實現(xiàn)支付寶支付與退款詳解

    本文詳細介紹使用Go語言對接支付寶支付與退款功能的步驟和注意事項,包括PC端、WAP端和Android端支付實現(xiàn),以及退款功能的代碼實現(xiàn),介紹了GoPay庫的使用,幫助開發(fā)者快速集成支付寶支付到應用中
    2024-10-10
  • GO語言函數(shù)(func)的聲明與使用詳解

    GO語言函數(shù)(func)的聲明與使用詳解

    這篇文章主要介紹了GO函數(shù)(func)的聲明與使用,包括了GO語言函數(shù)聲明與使用,GO語言遞歸函數(shù),GO語言內置函數(shù),GO語言函數(shù)defer應用,GO語言函數(shù)可變長度參數(shù)需要的朋友可以參考下
    2022-12-12
  • Web框架Gin中間件實現(xiàn)原理步驟解析

    Web框架Gin中間件實現(xiàn)原理步驟解析

    這篇文章主要為大家介紹了Web框架Gin中間件實現(xiàn)原理步驟解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • Go檢查結構體中是否存在某個字段及創(chuàng)建結構體切片或映射

    Go檢查結構體中是否存在某個字段及創(chuàng)建結構體切片或映射

    這篇文章主要為大家介紹了Go檢查結構體中是否存在某個字段及創(chuàng)建結構體切片或映射實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01

最新評論

盖州市| 棋牌| 望谟县| 长治县| 北川| 大方县| 临沭县| 凤庆县| 苍山县| 商南县| 青阳县| 商洛市| 克拉玛依市| 嘉兴市| 博乐市| 潍坊市| 长顺县| 平定县| 岫岩| 来安县| 镇康县| 合江县| 晋宁县| 察雅县| 自贡市| 治多县| 财经| 慈溪市| 万载县| 武穴市| 长岭县| 松原市| 白玉县| 韩城市| 措勤县| 梁平县| 永嘉县| 修文县| 青川县| 清河县| 南和县|