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

一文搞懂Golang文件操作增刪改查功能(基礎(chǔ)篇)

 更新時(shí)間:2021年04月16日 09:13:19   作者:Data-Mining  
這篇文章主要介紹了一文搞懂Golang文件操作增刪改查功能(基礎(chǔ)篇),Golang 可以認(rèn)為是服務(wù)器開發(fā)語(yǔ)言發(fā)展的趨勢(shì)之一,特別是在流媒體服務(wù)器開發(fā)中,已經(jīng)占有一席之地,今天我們不聊特別深?yuàn)W的機(jī)制和內(nèi)容,就來(lái)聊一聊 Golang 對(duì)于文件的基本操作

前言

目前,Golang 可以認(rèn)為是服務(wù)器開發(fā)語(yǔ)言發(fā)展的趨勢(shì)之一,特別是在流媒體服務(wù)器開發(fā)中,已經(jīng)占有一席之地。很多音視頻技術(shù)服務(wù)提供商也大多使用 Golang 語(yǔ)言去做自己的后臺(tái)服務(wù)開發(fā),業(yè)內(nèi)貌似已經(jīng)達(dá)成了某種共識(shí)。今天我們不聊特別深?yuàn)W的機(jī)制和內(nèi)容,就來(lái)聊一聊 Golang 對(duì)于文件的基本操作。

正文

開始之前,講一個(gè)非常有意思的小橋段。最開始接觸 Golang 這種語(yǔ)言的時(shí)候,我總感覺(jué)它和 Google 單詞比較像,所以一度懷疑二者有什么聯(lián)系。后來(lái)一查才發(fā)現(xiàn),二者確實(shí)有聯(lián)系,暈… …因?yàn)?Golang 語(yǔ)言就是 Google 公司推出的。這種推廣模式,讓我想起了“旺仔牛奶”和“旺子牛奶”。
配圖

好了,言歸正傳,說(shuō)到文件操作,應(yīng)該是任何一種語(yǔ)言的基本操作了。那么,Golang 是如何操作文件的呢?

使用 Golang 操作文件時(shí),我們可以理解成對(duì)數(shù)據(jù)庫(kù)的基礎(chǔ)操作——增、刪、改、查,它們分別對(duì)應(yīng)創(chuàng)建文件、刪除文件、修改文件內(nèi)容、查詢文件內(nèi)容和信息。

今天我們介紹的主要內(nèi)容,根據(jù)下面的流程圖進(jìn)行展開。

接下來(lái),我們就分別從這四個(gè)維度介紹 Golang 是如何操作文件的。

創(chuàng)建文件

首先,我們來(lái)創(chuàng)建一個(gè)文件 test.txt。在 Golang 中,我們可以使用 os 包來(lái)完成文件的創(chuàng)建,其中有專門的文件創(chuàng)建方法——Create()。注意,我們需要提前導(dǎo)入依賴包,具體使用方式可以參考下面的代碼。

代碼實(shí)例:

package main

import (
	"fmt" 
	"os"
)
func main() {
   	fmt.Println("開始創(chuàng)建一個(gè)文本文件test.txt")
	if _, err := os.Create("test.txt"); err == nil {
		fmt.Println("文件創(chuàng)建成功。。。")
	} else {
		fmt.Println("文件創(chuàng)建失敗。。。")
	}
}

代碼執(zhí)行結(jié)果如下:

開始創(chuàng)建一個(gè)文本文件test.txt
文件創(chuàng)建成功。。。

通過(guò)結(jié)果,我們可以看到,我們已經(jīng)成功創(chuàng)建了一個(gè)名為 test.txt 的文本文件。是不是非常簡(jiǎn)單?好,那我們看下一步。

開心的微笑

修改文件

接下來(lái),我們?cè)谏线叺拇a基礎(chǔ)上繼續(xù)完善,實(shí)現(xiàn)對(duì)文件的修改。我們知道新創(chuàng)建的 test.txt 的文本文件的內(nèi)容肯定是空的,里邊什么信息都沒(méi)有,我們現(xiàn)在寫一些內(nèi)容進(jìn)去。

其實(shí),寫入內(nèi)容到文件中也非常簡(jiǎn)單。通過(guò)我們創(chuàng)建文件時(shí),返回的 File 對(duì)象,我們可以利用它自帶的 Write() 方法把需要的內(nèi)容寫入到文件中。下面一樣,我們通過(guò)一段代碼來(lái)了解這個(gè)過(guò)程。

代碼實(shí)例:

package main

import (
	"fmt"
	"os"
)
func main() {
   	fmt.Println("開始創(chuàng)建一個(gè)文本文件test.txt")
	if f, err := os.Create("test.txt"); err == nil {
		fmt.Println("文件創(chuàng)建成功。。。")
		// 將要寫入文本的內(nèi)容
		_, err=f.Write([]byte("大家好,我是劉振,CSDN博客專家,音視頻領(lǐng)域研發(fā)博主,主頁(yè)地址:https://liuzhen.blog.csdn.net/,歡迎騷擾?。?!"))
		if err == nil {
			fmt.Println("文件寫入內(nèi)容成功。。。")
		}
	} else {
		fmt.Println("文件創(chuàng)建失??!")
	}
}

代碼執(zhí)行結(jié)果:

開始創(chuàng)建一個(gè)文本文件test.txt
文件創(chuàng)建成功。。。
文件寫入內(nèi)容成功。。。

通過(guò)執(zhí)行結(jié)果,我們知道我們把相應(yīng)的信息(大家好,我是劉振,CSDN博客專家,音視頻領(lǐng)域研發(fā)博主,主頁(yè)地址:https://liuzhen.blog.csdn.net/,歡迎騷擾?。。。懭氲?test.txt 文件中了。但是我們還是懷疑文件 test.txt 中的信息是不是真的就是我們想要的內(nèi)容。(魯迅曾經(jīng)說(shuō)過(guò):程序員還是嚴(yán)謹(jǐn)一些比較好,不然實(shí)際工作中會(huì)吃虧的

魯迅真說(shuō)過(guò)

查詢文件

上面的執(zhí)行結(jié)果是說(shuō)明相應(yīng)的內(nèi)容寫入到了文件中,但是不夠直觀。接下來(lái),我們查詢一下文件的內(nèi)容,進(jìn)一步確認(rèn)文件中寫入了相應(yīng)的內(nèi)容。

這個(gè)過(guò)程也屬于常規(guī)操作,但是我們需要用到一個(gè)工具包——io/ioutil,這是一個(gè)和文件讀寫相關(guān)的工具集,當(dāng)我們操作文件時(shí)非常推薦使用它。今天,我們就熟悉一下它的使用。讀取文件內(nèi)容的話,我們主要使用它的 ReadFile() 方法。下面我們通過(guò)代碼了解一下吧。

代碼實(shí)例:

package main

import (
	"fmt"
	"os"
	"io/ioutil"
)
func main() {
   	fmt.Println("開始創(chuàng)建一個(gè)文本文件test.txt")
	if f, err := os.Create("test.txt"); err == nil {
		fmt.Println("文件創(chuàng)建成功。。。")
		// 將要寫入文本的內(nèi)容
		_, err=f.Write([]byte("大家好,我是劉振,CSDN博客專家,音視頻領(lǐng)域研發(fā)博主,主頁(yè)地址:https://liuzhen.blog.csdn.net/,歡迎騷擾?。。?))
		if err == nil {
			fmt.Println("文件寫入內(nèi)容成功。。。")
		}
		bytes, err := ioutil.ReadFile("test.txt")
        if err == nil {
			fmt.Println("test.txt文件的內(nèi)容:",string(bytes))
		} else {
			fmt.Println(err)
		}
	} else {
		fmt.Println("文件創(chuàng)建失??!")
	}
}

代碼執(zhí)行結(jié)果:

開始創(chuàng)建一個(gè)文本文件test.txt
文件創(chuàng)建成功。。。
文件寫入內(nèi)容成功。。。
test.txt文件的內(nèi)容: 大家好,我是劉振,CSDN博客專家,音視頻領(lǐng)域研發(fā)博主,主頁(yè)地址:https://liuzhen.blog.csdn.net/,歡迎騷擾!??!

結(jié)果證明,上一步確實(shí)修改了文件的內(nèi)容,把我們想要的內(nèi)容輸入到了文本文件中。同時(shí),通過(guò)上面的代碼也實(shí)現(xiàn)了查詢文件內(nèi)容的功能。

其實(shí),我們除了查看文件包含的內(nèi)容外,還可以查看文件的一些基本信息,比如名稱、大小、創(chuàng)建時(shí)間等。下面來(lái)看看我們都可以獲取哪些文件基本信息吧。

上代碼:

package main

import (
	"fmt"
	"os"
	"io/ioutil"
)
func main() {
   	fmt.Println("開始創(chuàng)建一個(gè)文本文件test.txt")
	if f, err := os.Create("test.txt"); err == nil {
		fmt.Println("文件創(chuàng)建成功。。。")
		// 將要寫入文本的內(nèi)容
		_, err=f.Write([]byte("大家好,我是劉振,CSDN博客專家,音視頻領(lǐng)域研發(fā)博主,主頁(yè)地址:https://liuzhen.blog.csdn.net/,歡迎騷擾?。?!"))
		if err == nil {
			fmt.Println("文件寫入內(nèi)容成功。。。")
		}
		bytes, err := ioutil.ReadFile("test.txt")
        if err == nil {
			fmt.Println("test.txt文件的內(nèi)容:",string(bytes))
		} else {
			fmt.Println(err)
		}
		// 查詢文件基本信息
		fileinfo, err := os.Stat("test.txt")
		if err == nil {
			fmt.Println("文件名稱:", fileinfo.Name())
			fmt.Println("文件大小:", fileinfo.Size())
			fmt.Println("文件權(quán)限:", fileinfo.Mode())
			fmt.Println("文件修改時(shí)間:", fileinfo.ModTime())
			fmt.Println("是否為文件夾:", fileinfo.IsDir())
		} else {
			fmt.Println("獲取文件信息失?。?)
		}
	} else {
		fmt.Println("文件創(chuàng)建失??!")
	}
}

代碼執(zhí)行結(jié)果:

開始創(chuàng)建一個(gè)文本文件test.txt
文件創(chuàng)建成功。。。
文件寫入內(nèi)容成功。。。
test.txt文件的內(nèi)容: 大家好,我是劉振,CSDN博客專家,音視頻領(lǐng)域研發(fā)博主,主頁(yè)地址:https://liuzhen.blog.csdn.net/,歡迎騷擾?。?!
文件名稱: test.txt
文件大小: 145
文件權(quán)限: -rw-r--r--
文件修改時(shí)間: 2021-04-15 08:51:38.777811891 +0000 UTC
是否為文件夾: false

嗯,不錯(cuò),新創(chuàng)建的 test.txt 文本文件大小是145字節(jié),注意:修改時(shí)間返回的是0區(qū)時(shí)間,中國(guó)在東八區(qū),還需要加8才是我們當(dāng)?shù)氐臅r(shí)間。

目前為止,我們已經(jīng)實(shí)現(xiàn)了對(duì)文件的“增”、“改”、“查”操作,接下來(lái)就看“刪”操作吧。

不錯(cuò)不錯(cuò)

刪除文件

這個(gè)相對(duì)就簡(jiǎn)單多了,直接利用 os 包的 Remove() 方法,好了,看代碼吧。

代碼實(shí)例:

package main

import (
	"fmt"
	"os"
	"io/ioutil"
)
func main() {
   	fmt.Println("開始創(chuàng)建一個(gè)文本文件test.txt")
	if f, err := os.Create("test.txt"); err == nil {
		fmt.Println("文件創(chuàng)建成功。。。")
		// 將要寫入文本的內(nèi)容
		_, err=f.Write([]byte("大家好,我是劉振,CSDN博客專家,音視頻領(lǐng)域研發(fā)博主,主頁(yè)地址:https://liuzhen.blog.csdn.net/,歡迎騷擾?。?!"))
		if err == nil {
			fmt.Println("文件寫入內(nèi)容成功。。。")
		}
		bytes, err := ioutil.ReadFile("test.txt")
        if err == nil {
			fmt.Println("test.txt文件的內(nèi)容:",string(bytes))
		} else {
			fmt.Println(err)
		}
		err = os.Remove("test.txt")
		if err == nil {
			fmt.Println("文件刪除成功。。。")
		} else {
			fmt.Println("文件刪除失??!")
		}
	} else {
		fmt.Println("文件創(chuàng)建失??!")
	}
}

代碼執(zhí)行結(jié)果:

開始創(chuàng)建一個(gè)文本文件test.txt
文件創(chuàng)建成功。。。
文件寫入內(nèi)容成功。。。
test.txt文件的內(nèi)容: 大家好,我是劉振,CSDN博客專家,音視頻領(lǐng)域研發(fā)博主,主頁(yè)地址:https://liuzhen.blog.csdn.net/,歡迎騷擾!?。?br /> 文件刪除成功。。。

根據(jù)執(zhí)行結(jié)果,我們確實(shí)把文本文件 test.txt 刪除了。本著嚴(yán)謹(jǐn)?shù)膽B(tài)度,我們不妨再進(jìn)一步驗(yàn)證一下。增加文件是否存在的校驗(yàn)邏輯進(jìn)去,看看代碼執(zhí)行結(jié)果。

好了,說(shuō)干就干!

實(shí)例代碼:

package main

import (
	"fmt"
	"os"
	"io/ioutil"
)
func main() {
   	fmt.Println("開始創(chuàng)建一個(gè)文本文件test.txt")
	if f, err := os.Create("test.txt"); err == nil {
		fmt.Println("文件創(chuàng)建成功。。。")
		// 將要寫入文本的內(nèi)容
		_, err=f.Write([]byte("大家好,我是劉振,CSDN博客專家,音視頻領(lǐng)域研發(fā)博主,主頁(yè)地址:https://liuzhen.blog.csdn.net/,歡迎騷擾?。?!"))
		if err == nil {
			fmt.Println("文件寫入內(nèi)容成功。。。")
		}
		bytes, err := ioutil.ReadFile("test.txt")
        if err == nil {
			fmt.Println("test.txt文件的內(nèi)容:",string(bytes))
		} else {
			fmt.Println(err)
		}
		err = os.Remove("test.txt")
		if err == nil {
			fmt.Println("文件刪除成功。。。")
		} else {
			fmt.Println("文件刪除失??!")
		}
		fileInfo, e := os.Stat("test.txt")
		if fileInfo != nil && e == nil {
			fmt.Println("我檢查了,文件還存在")
		} else if os.IsNotExist(e) {
			fmt.Println("我檢查了,文件確實(shí)刪除了")
		}	
	} else {
		fmt.Println("文件創(chuàng)建失敗!")
	}
}

代碼執(zhí)行結(jié)果:

開始創(chuàng)建一個(gè)文本文件test.txt
文件創(chuàng)建成功。。。
文件寫入內(nèi)容成功。。。
test.txt文件的內(nèi)容: 大家好,我是劉振,CSDN博客專家,音視頻領(lǐng)域研發(fā)博主,主頁(yè)地址:https://liuzhen.blog.csdn.net/,歡迎騷擾?。?!
文件刪除成功。。。
我檢查了,文件確實(shí)刪除了

嗯嗯,看到 “我檢查了,文件確實(shí)刪除了” 這里,我就放心了。想必,大家也都安心了。

好開心

結(jié)尾

不錯(cuò),到目前為止,我們已經(jīng)實(shí)現(xiàn)了 Golang 對(duì)文件的“增”、“刪”、“改”、“查”,對(duì)文件的常規(guī)操作也基本掌握了。本人是一個(gè)流媒體服務(wù)器后端開發(fā),吃飯的語(yǔ)言是C++、Go和Node.js,了解更多音視頻和流媒體知識(shí),歡迎關(guān)注我,謝謝。

到此這篇關(guān)于一文搞懂Golang文件操作增刪改查功能(基礎(chǔ)篇)的文章就介紹到這了,更多相關(guān)go增刪改查內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go語(yǔ)言調(diào)用ffmpeg-api實(shí)現(xiàn)音頻重采樣

    Go語(yǔ)言調(diào)用ffmpeg-api實(shí)現(xiàn)音頻重采樣

    最近對(duì)golang處理音視頻很感興趣,對(duì)golang音視頻常用庫(kù)goav進(jìn)行了一番研究。自己寫了一個(gè)wav轉(zhuǎn)采樣率的功能。給大家分享一下,中間遇到了不少坑,解決的過(guò)程中還是蠻有意思的,希望大家能喜歡
    2022-12-12
  • 詳解golang碎片整理之 fmt.Scan

    詳解golang碎片整理之 fmt.Scan

    本文介紹了從golang語(yǔ)言中fmt包從標(biāo)準(zhǔn)輸入獲取數(shù)據(jù)的Scan系列函數(shù)、從io.Reader中獲取數(shù)據(jù)的Fscan系列函數(shù)以及從字符串中獲取數(shù)據(jù)的Sscan系列函數(shù)的用法,感興趣的小伙伴們可以參考一下
    2019-05-05
  • 深入解析Golang中JSON的編碼與解碼

    深入解析Golang中JSON的編碼與解碼

    隨著互聯(lián)網(wǎng)的快速發(fā)展和數(shù)據(jù)交換的廣泛應(yīng)用,各種數(shù)據(jù)格式的處理成為軟件開發(fā)中的關(guān)鍵問(wèn)題,本文將介紹?Golang?中?JSON?編碼與解碼的相關(guān)知識(shí),幫助大家了解其基本原理和高效應(yīng)用,需要的可以收藏一下
    2023-05-05
  • Go整合ElasticSearch的示例代碼

    Go整合ElasticSearch的示例代碼

    這篇文章主要介紹了Go整合ElasticSearch的相關(guān)知識(shí),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • 關(guān)于Golang獲取當(dāng)前項(xiàng)目絕對(duì)路徑的問(wèn)題

    關(guān)于Golang獲取當(dāng)前項(xiàng)目絕對(duì)路徑的問(wèn)題

    這篇文章主要介紹了Golang獲取當(dāng)前項(xiàng)目絕對(duì)路徑的問(wèn)題,通常的做法是go run用于本地開發(fā),用一個(gè)命令中快速測(cè)試代碼確實(shí)非常方便;在部署生產(chǎn)環(huán)境時(shí),我們會(huì)通過(guò)go build構(gòu)建出二進(jìn)制文件然后上傳到服務(wù)器再去執(zhí)行,那么會(huì)產(chǎn)生什么問(wèn)題呢?感興趣的朋友一起看看吧
    2022-04-04
  • golang利用unsafe操作未導(dǎo)出變量-Pointer使用詳解

    golang利用unsafe操作未導(dǎo)出變量-Pointer使用詳解

    這篇文章主要給大家介紹了關(guān)于golang利用unsafe操作未導(dǎo)出變量-Pointer使用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-08-08
  • Golang使用sqlite3數(shù)據(jù)庫(kù)實(shí)現(xiàn)CURD操作

    Golang使用sqlite3數(shù)據(jù)庫(kù)實(shí)現(xiàn)CURD操作

    這篇文章主要為大家詳細(xì)介紹了Golang使用sqlite3數(shù)據(jù)庫(kù)實(shí)現(xiàn)CURD操作的相關(guān)知識(shí),文中的示例代碼簡(jiǎn)潔易懂,有需要的小伙伴可以參考一下
    2025-03-03
  • Go Java算法之二叉樹的所有路徑示例詳解

    Go Java算法之二叉樹的所有路徑示例詳解

    這篇文章主要為大家介紹了Go Java算法之二叉樹的所有路徑示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • golang sql連接池的實(shí)現(xiàn)方法詳解

    golang sql連接池的實(shí)現(xiàn)方法詳解

    database/sql是golang的標(biāo)準(zhǔn)庫(kù)之一,它提供了一系列接口方法,用于訪問(wèn)關(guān)系數(shù)據(jù)庫(kù)。下面這篇文章主要給大家介紹了關(guān)于golang sql連接池用法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧
    2018-09-09
  • Go操作etcd的實(shí)現(xiàn)示例

    Go操作etcd的實(shí)現(xiàn)示例

    etcd是近幾年比較火熱的一個(gè)開源的、分布式的鍵值對(duì)數(shù)據(jù)存儲(chǔ)系統(tǒng),提供共享配置、服務(wù)的注冊(cè)和發(fā)現(xiàn),本文主要介紹etcd的安裝和使用,感興趣的可以了解一下
    2021-09-09

最新評(píng)論

无锡市| 莆田市| 铁岭县| 潍坊市| 壶关县| 白玉县| 沁源县| 焦作市| 遵义县| 阳春市| 昌吉市| 陵水| 泾源县| 长沙县| 灵石县| 喜德县| 习水县| 罗定市| 达孜县| 宜章县| 枣阳市| 承德市| 大新县| 蒙阴县| 抚远县| 云阳县| 三都| 阿图什市| 诏安县| 眉山市| 永康市| 崇文区| 仲巴县| 武义县| 胶州市| 濉溪县| 正定县| 株洲市| 山东省| 上高县| 铜陵市|