日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Golang——文件创建和写入、OpenFile追加写入、Open读取文件、ReadBytes缓冲区读取、os.Args、flag

發(fā)布時(shí)間:2025/3/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Golang——文件创建和写入、OpenFile追加写入、Open读取文件、ReadBytes缓冲区读取、os.Args、flag 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Create創(chuàng)建文件:

os.Create:文件不存在則創(chuàng)建,文件存在則刪除文件中的內(nèi)容

語(yǔ)法:

file:創(chuàng)建文件的指針 err:創(chuàng)建文件出現(xiàn)異常后的信息file, err := os.Create("創(chuàng)建文件存放的路徑")

演示:

func CreateFile() {file, err := os.Create("/Users/itzhuzhu/Desktop/filetest/CreateFile")if err != nil {fmt.Println(err)}// 關(guān)流(不關(guān)流會(huì)長(zhǎng)時(shí)間占用內(nèi)存)defer file.Close() }

寫入數(shù)據(jù):

使用WriteString寫數(shù)據(jù):

WriteString底層也是調(diào)用的Write,但是Write需要轉(zhuǎn)換字節(jié)數(shù)組,比較麻煩,WriteString不需要手動(dòng)轉(zhuǎn)換,比較方便

func FileWriteString() {// 創(chuàng)建文件file, err := os.Create("/Users/itzhuzhu/Desktop/filetest/CreateFile")if err != nil {fmt.Println(err)}defer file.Close()// WriteString寫數(shù)據(jù),返回值參數(shù)1是寫的字符長(zhǎng)度,參數(shù)2是異常信息len, err := file.WriteString("WriteString寫入的數(shù)據(jù)")if err != nil {fmt.Println(err)}fmt.Println(len) }

使用Write寫數(shù)據(jù):

func FileWrite() {// 創(chuàng)建文件file, err := os.Create("/Users/itzhuzhu/Desktop/filetest/CreateFile")if err != nil {fmt.Println(err)}defer file.Close()// Write寫數(shù)據(jù),返回值參數(shù)1是寫的字符長(zhǎng)度,參數(shù)2是異常信息str := "Write寫入的數(shù)據(jù)"len, err := file.Write([]byte(str)) //將字符串轉(zhuǎn)換成字節(jié)切片if err != nil {fmt.Println(err)}fmt.Println(len) }

使用WriteAt寫數(shù)據(jù):在指定的位置寫入數(shù)據(jù)

func FileWriteAt() {// 創(chuàng)建文件file, err := os.Create("/Users/itzhuzhu/Desktop/filetest/CreateFile")if err != nil {fmt.Println(err)}defer file.Close()// WriteAt寫數(shù)據(jù),返回值參數(shù)1是寫的字符長(zhǎng)度,參數(shù)2是異常信息// WriteAt寫數(shù)據(jù),參數(shù)列表中參數(shù)1是要寫的數(shù)據(jù),參數(shù)2是要寫入數(shù)據(jù)的開始索引var str string = "WriteAt寫入的數(shù)據(jù)"num, _ := file.Seek(0, io.SeekEnd) //SeekEnd:將數(shù)據(jù)追加到源文件,參數(shù)一:追加數(shù)據(jù)的開始索引,fmt.Println("num:", num)len, err := file.WriteAt([]byte(str), num)if err != nil {fmt.Println(err)}fmt.Println(len) }

OpenFile追加數(shù)據(jù):

  • 文件里已經(jīng)有數(shù)據(jù)的情況下,用上面的三種方式去寫,會(huì)出現(xiàn)覆蓋的效果,WriteAt可以指定索引,但是比較麻煩。

os.OpenFile():打開指定文件進(jìn)行操作

  • OpenFile有三個(gè)參數(shù):
  • 參數(shù)1:打開文件的路徑
  • 參數(shù)2:模式,常見的模式有
參數(shù)說(shuō)明
O_RDONLY只讀方式打開
O_WRONLY只寫方式打開
O_RDWR讀寫方式打開
O_APPEND追加方式打開
O_CREATE不存在,則創(chuàng)建
O_EXCL如果文件存在,且標(biāo)定了O_CREATE的話,則產(chǎn)生一個(gè)錯(cuò)誤
O_TRUNG如果文件存在,且它成功地被打開為只寫或讀寫方式,將其長(zhǎng)度裁剪唯一(覆蓋)
O_NOCTTY如果文件名代表一個(gè)終端設(shè)備,則不把該設(shè)備設(shè)為調(diào)用進(jìn)程的控制設(shè)備
O_NONBLOCK如果文件名代表一個(gè)FIFO,或一個(gè)塊設(shè)備,字符設(shè)備文件,則在以后的文件及I/O操作中置為非阻塞模式
O_SYNC當(dāng)進(jìn)行一系列寫操作時(shí),每次都要等待上次的I/O操作完成再進(jìn)行
  • 參數(shù)3:表示權(quán)限,取值范圍(0-7),和linux里操作文件那個(gè)讀寫一樣

0:沒有任何權(quán)限
1:執(zhí)行權(quán)限(如果是可執(zhí)行文件,是可以運(yùn)行的)
2:寫權(quán)限
3:寫權(quán)限與執(zhí)行權(quán)限
4:讀權(quán)限
5:讀權(quán)限與執(zhí)行權(quán)限
6:讀權(quán)限與寫權(quán)限
7:讀權(quán)限,寫權(quán)限,執(zhí)行權(quán)限

演示:

func OpenFileTest() {// 追加寫數(shù)據(jù)file, err := os.OpenFile("/Users/itzhuzhu/Desktop/filetest/OpenFileTest.txt", os.O_APPEND|os.O_WRONLY, 6)if err != nil {fmt.Println(err)}defer file.Close()// 通過(guò)文件指針讀寫數(shù)據(jù)len, err := file.WriteString("\t我追加了嗎")if err != nil {fmt.Println(err)}fmt.Println(len) }

Open讀取文件:

讀取指定文件的數(shù)據(jù)

演示:

func OpenFileTest2() {// 追加寫數(shù)據(jù)file, err := os.Open("/Users/itzhuzhu/Desktop/filetest/OpenFileTest.txt")if err != nil {fmt.Println(err)}defer file.Close()// 讀數(shù)據(jù),定義一個(gè)切片存儲(chǔ)文件讀取的數(shù)據(jù)buffer := make([]byte, 1024)len, err := file.Read(buffer)// len:讀取文件中的數(shù)據(jù)長(zhǎng)度if err != nil {fmt.Println(err)}fmt.Println(len)//fmt.Println(buffer) // 直接打印都是數(shù)字(ascii碼值),長(zhǎng)度是1024,數(shù)據(jù)沒滿的時(shí)候就會(huì)用默認(rèn)值0代替,可以使用截取操作fmt.Println(buffer[:len])fmt.Println(string(buffer[:len])) // 將類型轉(zhuǎn)換為string,可以展示出內(nèi)容 }

ReadBytes緩沖區(qū)讀取:

在使用ReadBytes( )函數(shù)讀取數(shù)據(jù)時(shí),需要用到緩沖區(qū),所謂緩沖區(qū)就是存儲(chǔ)數(shù)據(jù)的區(qū)域,也就是先將從文件中讀取的數(shù)據(jù)存儲(chǔ)在該區(qū)域內(nèi),然后在將區(qū)域中的數(shù)據(jù)取出來(lái),寫到磁盤上。

提供緩沖區(qū)的原因是:

為了緩和 CPU 與 磁盤設(shè)備之間速度不匹配矛盾。文件緩沖區(qū)是用以暫時(shí)存放讀寫期間的文件數(shù)據(jù)而在內(nèi)存區(qū)預(yù)留的一定空間。

演示:

func ReadBytesTest() {// 追加寫數(shù)據(jù)file, err := os.Open("/Users/itzhuzhu/Desktop/filetest/OpenFileTest.txt")if err != nil {fmt.Println(err)}defer file.Close()// 讀數(shù)據(jù),定義一個(gè)切片存儲(chǔ)文件讀取的數(shù)據(jù)r := bufio.NewReader(file)for {buf, err := r.ReadBytes('\n')if err == io.EOF { // io.EOF是io包中的變量, 表示文件結(jié)束的錯(cuò)誤:break}fmt.Println(err)fmt.Println("buf", string(buf))} }

os.Args:

os.Args是一個(gè)string的切片,可以存儲(chǔ)所有的命令行參數(shù)

package mainimport ("fmt""os" )func main() {// 獲取命令行參數(shù),第0個(gè)參數(shù)是文件本身,后面的是啟動(dòng)可執(zhí)行文件后傳入的參數(shù)args := os.Args// 因?yàn)橐?guī)定了上傳文件需要攜帶至少一個(gè)的文件路徑,所以需要在這里判斷一下上傳的文件數(shù)是否滿足格式if len(args) != 2 {fmt.Println("格式為:go run 可執(zhí)行文件名.go 文件名")return}//提取文件名path := args[1]// 獲取文件屬性stat, err := os.Stat(path)if err != nil {fmt.Println("os.Stat 出錯(cuò)了:", err)return}fmt.Println("文件名:", stat.Name())fmt.Println("文件名:", stat.Size()) }

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

itzhuzhu@itzhuzhudeMacBook-Pro ~ % go run /Users/itzhuzhu/Desktop/goCode/basics/src/day08/命令行參數(shù).go /Users/itzhuzhu/Desktop/產(chǎn)品經(jīng)理自學(xué)路線圖.jpeg 文件名: 產(chǎn)品經(jīng)理自學(xué)路線圖.jpeg 文件名: 588986 itzhuzhu@itzhuzhudeMacBook-Pro ~ %

flag:

flag包實(shí)現(xiàn)了命令行解析,使用Args拿到命令行參數(shù)如果不是按照順序?qū)懙木蜁?huì)有問題,可以使用flag解析,指定名稱然后帶參數(shù),類似于mysql登錄的時(shí)候?qū)?u -p一樣

func listFiles6() {var user stringvar password stringvar host stringvar port int/**參數(shù)1:設(shè)置對(duì)應(yīng)的標(biāo)簽名,可以通過(guò)該標(biāo)簽名來(lái)或得對(duì)應(yīng)值參數(shù)2:如果沒有設(shè)置該標(biāo)簽,則采用這個(gè)值即該值為默認(rèn)值參數(shù)3:這個(gè)參數(shù)為幫助信息,一般用于help調(diào)用展示&user:接收用戶命令行中輸入的 -u 后面的參數(shù)"u":-u的參數(shù)"":默認(rèn)值"用戶名默認(rèn)為空":提示說(shuō)明*/flag.StringVar(&user, "u", "", "用戶名默認(rèn)為空")flag.StringVar(&password, "p", "", "密碼默認(rèn)為空")flag.StringVar(&host, "h", "localhost", "主機(jī)名默認(rèn)為localhost")flag.IntVar(&port, "port", 8000, "端口號(hào)默認(rèn)8000")// Parse:從args中解析注冊(cè)的flag。也就是轉(zhuǎn)換的flag.Parse()fmt.Printf("user=%v password=%v host=%v port=%v\n", user, password, host, port) }

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

itzhuzhu@itzhuzhudeMacBook-Pro day06 % go run 文件操作.go -u root -p ppp -h 127.0.0.1 -port 3306 user=root password=ppp host=127.0.0.1 port=3306

總結(jié)

以上是生活随笔為你收集整理的Golang——文件创建和写入、OpenFile追加写入、Open读取文件、ReadBytes缓冲区读取、os.Args、flag的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 中文字幕网站 | 在线播放av网站 | 国产吃瓜黑料一区二区 | 一区二区视屏 | 日韩第一页 | 一区二区内射 | 俄罗斯精品一区二区三区 | 国产一级二级三级精品 | 图片区 小说区 区 亚洲五月 | 一区二区三区观看 | 欧美三级午夜理伦三级小说 | 日韩精品免费在线视频 | 免费在线观看一区二区 | 国产欧美精品区一区二区三区 | 性欧美日本 | 久久午夜夜伦鲁鲁一区二区 | 一本到在线视频 | 欧美中文字幕在线 | 蜜桃一二三区 | 徐锦江一级淫片免费看 | 国产精品一二区 | 成人3d动漫一区二区三区 | 久久免费视屏 | 五月激情综合 | 国内精品久久久久久久影视简单 | 日本成人黄色片 | 欧洲成人免费视频 | av色图片 | 色亚洲成人 | 少妇精品高潮欲妇又嫩中文字幕 | 男女偷爱性视频刺激 | 国产视频久久久 | 女人性做爰100部免费 | 黄色三级在线播放 | 久久avav | 无码精品国产一区二区三区 | 性欧美大战久久久久久久久 | 久久久久久网站 | 日韩美女视频一区 | 99精品久久精品一区二区 | av中文字幕免费在线观看 | 桃色成人网 | 日本久久不卡 | 综合精品在线 | 久久精品店 | h小视频在线观看 | 91视频黄版| 国产91麻豆视频 | 高清中文字幕在线a片 | 国产成人一区二区三区影院在线 | 久久青青草原亚洲av无码麻豆 | 伊人免费| 岛国精品视频 | 懂色av一区二区三区 | 97在线观视频免费观看 | 久久一区二区三区四区五区 | 一级看片免费视频 | 18女人毛片 | 黑人一区二区三区 | 最新视频 - 88av| 国产亚洲色婷婷久久99精品91 | 蜜臀久久精品久久久用户群体 | 五月天男人天堂 | 欧美激情视频在线 | 秋霞在线视频观看 | 日本少妇吞精囗交 | 香蕉在线网站 | 手机电影在线观看 | 亚洲天堂伦理 | 高清国产视频 | 三级4级全黄60分钟 成人自拍视频 | 福利在线电影 | 国产一二三四在线 | 四虎影库在线播放 | 99热这里是精品 | 亚洲图区综合 | 久久夜色精品国产欧美乱 | 国产精品久线在线观看 | 日本成人a | 少女忠诚电影高清免费 | 少妇人妻偷人精品无码视频 | 日本一区二区视频在线播放 | 日韩不卡av在线 | 天堂√在线 | 久久男人av| 国产美女裸体无遮挡免费视频 | 九九爱精品视频 | 国产高潮在线 | 亚洲色偷偷综合亚洲av伊人 | 国产精品96久久久久久 | 色涩综合 | av中文字幕在线免费观看 | 亚洲国产成人精品91久久久 | 亚洲黄页网站 | 日韩精品电影一区二区三区 | 小珊的性放荡羞辱日记 | 国产三级久久 | 国内精品久久久久久久影视简单 | 伊人一二三|