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

一文搞懂Go語言中文件的讀寫與創(chuàng)建

 更新時間:2022年07月04日 16:12:15   作者:秋日的晚霞  
這篇文章主要為大家詳細(xì)介紹了Go語言中文件是如何實現(xiàn)讀寫與創(chuàng)建的,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Go語言有一定幫助,需要的可以參考一下

1. 文件的打開與關(guān)閉

1.1 os.open

os.open 函數(shù)能打開一個文件 調(diào)用 close() 方法 關(guān)閉文件

	//打開文件
	open, err := os.Open("./1.text")
	
	if err != nil {
		//打印異常信息
		fmt.Println("open file err", err)
	}

	fmt.Println("文件獲取完畢")

	//沒有出現(xiàn)異常,關(guān)閉文件
	open.Close()

為了防止忘記關(guān)閉文件,通常都將關(guān)閉文件的代碼寫在 defer中

	//打開文件
	open, err := os.Open("./1.text")

	defer func() {
		if open != nil {
			// 關(guān)閉文件
			open.Close()
		}
	}()

	if err != nil {
		//打印異常信息
		fmt.Println("open file err", err)
	}

	fmt.Println("文件獲取完畢")

1.2 os.OpenFile() 指定模式打開文件

func OpenFile(name string, flag int, perm FileMode) (*File, error) {
    ...
}

其中:

name:要打開的文件名 flag:打開文件的模式。 模式有以下幾種:

模式含義
os.O_WRONLY只寫
os.O_CREATE創(chuàng)建文件
os.O_RDONLY只讀
os.O_RDWR讀寫
os.O_TRUNC清空
os.O_APPEND追加

perm:文件權(quán)限,一個八進(jìn)制數(shù)。r(讀)04,w(寫)02,x(執(zhí)行)01。

2. 文件的讀取

2.1 打開文件的方式讀取文件中的數(shù)據(jù)

//首先需要打開一個文件
	open, err := os.Open("./1.text")
	defer func() {
		e := recover()
		if e != nil {

			fmt.Println("打開文件出現(xiàn)了異常", e)
		}
	}()

	if err != nil {
		// 如果有異常  沒必要往下走了  拋出
		panic(err)
	}

	//如果沒有異常
	//創(chuàng)建 字節(jié)切片
	bytes := make([]byte, 1024)

	defer func() {
		e := recover()
		if e != nil {

			fmt.Println("讀取文件出現(xiàn)了異常", e)
		}
	}()

	for {
		//循環(huán)讀
		_, err := open.Read(bytes)

		if err != nil {
			panic(err)
		}

		//打印結(jié)果
		fmt.Println(string(bytes))
	}

2.2 使用 bufio 整行讀取文件

bufio 是在file的基礎(chǔ)上封裝了一層API , 支持更多的功能

	//同樣的首先打開一個文件
	file, err := os.Open("./1.text")

	defer recover()

	if err != nil {
		panic("文件打開出現(xiàn)異常")
	}

	// 封裝為 bufio
	reader := bufio.NewReader(file)

	defer recover()

	for {

		//讀到指定字符串換一行
		line, _, err := reader.ReadLine()

		if err != nil {
			if err == io.EOF {
				fmt.Println("文件讀寫完畢")
				break
			}
			panic("文件讀取出現(xiàn)異常")
		}

		fmt.Println(string(line))
	}

	fmt.Println("程序運行結(jié)束")
func main() {
	file, err := os.OpenFile("xx.txt", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666)
}

3. 寫入文件操作

無論是文件讀取還是文件寫入 都是需要先打開文件 再進(jìn)行操作

3.1 file.Write 與 file.WriteString

// 首先打開文件  O_RDWR  讀寫權(quán)限  O_TRUNC  清空文件  0 開頭表示八進(jìn)制 666表示 當(dāng)用用戶 當(dāng)前組  其他用戶 都是可讀可寫權(quán)限
	file, err := os.OpenFile("1.text", os.O_RDWR|os.O_TRUNC, 0666)
	if err != nil {
		fmt.Printf("打開文件出現(xiàn)異常 %v", err)
	}

	defer file.Close()

	// 返回 寫入的字節(jié)數(shù)
	write, err := file.Write([]byte("測試文件寫入 \n"))
	file.WriteString("一次寫入整個字符串")

	if err != nil {
		fmt.Println(err)
	}

	fmt.Println(write)

3.2 bufio.NewWriter

// 基于緩存操作
	file, err := os.OpenFile("2.text", os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0666)
	if err != nil {
		panic(err)
	}

	defer func() {
		file.Close()
		if e := recover(); e != nil {
			fmt.Printf("異常 : 打開文件出現(xiàn)異常 %v", e)
		}
	}()

	// 使用 bufio 基于緩存操作io流
	// 需要傳入 一個 io 接口包下的 Writer 接口實現(xiàn)類 而 file 實現(xiàn)了該 方法

	writer := bufio.NewWriter(file)

	writer.WriteString(" 寫入緩存字符串內(nèi)容 2")

	//需要將緩存中的數(shù)據(jù)刷新到硬盤上
	writer.Flush()

3.3 ioUtil 工具類

	// 使用工具類  打開文件,寫入文件一氣呵成
	err := ioutil.WriteFile("3.text", []byte("工具類寫入內(nèi)容"), 0666)

	if err != nil {
		fmt.Println("程序運行出現(xiàn)異常", err)
	}

到此這篇關(guān)于一文搞懂Go語言中文件的讀寫與創(chuàng)建的文章就介紹到這了,更多相關(guān)Go語言 文件讀寫 創(chuàng)建內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • go語言實現(xiàn)簡單的并發(fā)網(wǎng)頁爬蟲示例

    go語言實現(xiàn)簡單的并發(fā)網(wǎng)頁爬蟲示例

    在這個章節(jié)中,我們將會結(jié)合之前的知識點,實現(xiàn)一個簡易的并發(fā)網(wǎng)頁爬蟲,我們的爬蟲會先爬取一個起始頁面,提取出所有的鏈接,然后并發(fā)地爬取這些鏈接,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2023-08-08
  • go swagger生成接口文檔使用教程

    go swagger生成接口文檔使用教程

    這篇文章主要為大家介紹了go swagger生成接口文檔使用教程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • golang實踐-第三方包為私有庫的配置方案

    golang實踐-第三方包為私有庫的配置方案

    這篇文章主要介紹了golang實踐-第三方包為私有庫的配置方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • 一文帶你深入理解Go語言中的sync.Cond

    一文帶你深入理解Go語言中的sync.Cond

    sync.Cond?表示的是條件變量,它是一種同步機(jī)制,用來協(xié)調(diào)多個?goroutine?之間的同步。本文將通過示例為大家介紹Go語言中sync.Cond的使用,需要的可以參考一下
    2023-01-01
  • GO語言入門學(xué)習(xí)之基本數(shù)據(jù)類型字符串

    GO語言入門學(xué)習(xí)之基本數(shù)據(jù)類型字符串

    字符串在Go語言中以原生數(shù)據(jù)類型出現(xiàn),使用字符串就像使用其他原生數(shù)據(jù)類型(int、bool、float32、float64 等)一樣,下面這篇文章主要給大家介紹了關(guān)于GO語言入門學(xué)習(xí)之基本數(shù)據(jù)類型字符串的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • 一文帶你深入理解Golang Context包

    一文帶你深入理解Golang Context包

    在 Go 語言中,Context 包是一種非常常用的工具,它被用來管理 goroutine 之間的通信和取消。本文將深入探討Context 包的基本原理,包括使用場景、原理和一些最佳實踐,需要的可以參考下
    2023-05-05
  • Go語言pointer及switch?fallthrough實戰(zhàn)詳解

    Go語言pointer及switch?fallthrough實戰(zhàn)詳解

    這篇文章主要為大家介紹了Go語言pointer及switch?fallthrough實戰(zhàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • 詳解Golang中Channel的原理和使用技巧

    詳解Golang中Channel的原理和使用技巧

    Channel管道提供了一種機(jī)制,它在兩個并發(fā)執(zhí)行的協(xié)程之間進(jìn)行同步,并通過傳遞與該管道元素類型相符的值來進(jìn)行通信。本文主要介紹了Channel的原理和使用技巧,需要的可以參考一下
    2022-11-11
  • go-zero讀取請求體出現(xiàn)EOF錯誤的解決方法

    go-zero讀取請求體出現(xiàn)EOF錯誤的解決方法

    這篇文章主要為大家詳細(xì)介紹了go-zero讀取請求體出現(xiàn)EOF錯誤時如何解決,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-02-02
  • Golang發(fā)送Get和Post請求的實現(xiàn)

    Golang發(fā)送Get和Post請求的實現(xiàn)

    做第三方接口有時需要用Get或者Post請求訪問,本文主要介紹了Golang發(fā)送Get和Post請求的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05

最新評論

黎城县| 宁都县| 邵阳市| 邢台市| 田林县| 龙江县| 金华市| 闸北区| 交城县| 肥乡县| 宣城市| 霸州市| 乌鲁木齐县| 吉安县| 孙吴县| 贵南县| 新宁县| 西充县| 桃源县| 江口县| 广元市| 郑州市| 滨海县| 随州市| 拉萨市| 巴马| 五家渠市| 峨山| 宣城市| 曲周县| 闻喜县| 临沂市| 晋中市| 嘉义市| 固阳县| 监利县| 贡山| 黄陵县| 邮箱| 通河县| 满洲里市|