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

Go語言IO輸入輸出底層原理及文件操作API

 更新時間:2023年01月08日 10:41:54   作者:夏沫的夢  
這篇文章主要為大家介紹了Go語言IO輸入輸出底層原理及文件操作API示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

1.輸入輸出的底層原理

終端其實是一個文件,相關(guān)實例如下:

  • os.Stdin:標準輸入的文件實例,類型為*File
  • os.Stdout:標準輸出的文件實例,類型為*File
  • os.Stderr:標準錯誤輸出的文件實例,類型為*File

以文件的方式操作終端:

package main
import "os"
func main() {
    var buf [16]byte
    os.Stdin.Read(buf[:])
    os.Stdin.WriteString(string(buf[:]))
}

2. 文件操作相關(guān)API

  • func Create(name string) (file *File, err Error) 根據(jù)提供的文件名創(chuàng)建新的文件,返回一個文件對象,默認權(quán)限是0666
  • func NewFile(fd uintptr, name string) *File 根據(jù)文件描述符創(chuàng)建相應(yīng)的文件,返回一個文件對象
  • func Open(name string) (file *File, err Error) 只讀方式打開一個名稱為name的文件
  • func OpenFile(name string, flag int, perm uint32) (file *File, err Error) 打開名稱為name的文件,flag是打開的方式,只讀、讀寫等,perm是權(quán)限
  • func (file *File) Write(b []byte) (n int, err Error) 寫入byte類型的信息到文件
  • func (file *File) WriteAt(b []byte, off int64) (n int, err Error) 在指定位置開始寫入byte類型的信息
  • func (file *File) WriteString(s string) (ret int, err Error) 寫入string信息到文件
  • func (file *File) Read(b []byte) (n int, err Error) 讀取數(shù)據(jù)到b中
  • func (file *File) ReadAt(b []byte, off int64) (n int, err Error) 從off開始讀取數(shù)據(jù)到b中
  • func Remove(name string) Error 刪除文件名為name的文件

3. 打開和關(guān)閉文件

os.Open()函數(shù)能夠打開一個文件,返回一個*File和一個err。對得到的文件實例調(diào)用close()方法能夠關(guān)閉文件。

package main
import (
    "fmt"
    "os"
)
func main() {
    // 只讀方式打開當前目錄下的main.go文件
    file, err := os.Open("./main.go")
    if err != nil {
        fmt.Println("open file failed!, err:", err)
        return
    }
    // 關(guān)閉文件
    file.Close()
}

4. 寫文件

package main
import (
    "fmt"
    "os"
)
func main() {
    // 新建文件
    file, err := os.Create("./xxx.txt")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer file.Close()
    for i := 0; i < 5; i++ {
        file.WriteString("ab\n")
        file.Write([]byte("cd\n"))
    }
}

5. 讀文件

文件讀取可以用file.Read()和file.ReadAt(),讀到文件末尾會返回io.EOF的錯誤

package main
import (
    "fmt"
    "io"
    "os"
)
func main() {
    // 打開文件
    file, err := os.Open("./xxx.txt")
    if err != nil {
        fmt.Println("open file err :", err)
        return
    }
    defer file.Close()
    // 定義接收文件讀取的字節(jié)數(shù)組
    var buf [128]byte
    var content []byte
    for {
        n, err := file.Read(buf[:])
        if err == io.EOF {
            // 讀取結(jié)束
            break
        }
        if err != nil {
            fmt.Println("read file err ", err)
            return
        }
        content = append(content, buf[:n]...)
    }
    fmt.Println(string(content))
}

6. 拷貝文件

package main
import (
    "fmt"
    "io"
    "os"
)
func main() {
    // 打開源文件
    srcFile, err := os.Open("./xxx.txt")
    if err != nil {
        fmt.Println(err)
        return
    }
    // 創(chuàng)建新文件
    dstFile, err2 := os.Create("./abc2.txt")
    if err2 != nil {
        fmt.Println(err2)
        return
    }
    // 緩沖讀取
    buf := make([]byte, 1024)
    for {
        // 從源文件讀數(shù)據(jù)
        n, err := srcFile.Read(buf)
        if err == io.EOF {
            fmt.Println("讀取完畢")
            break
        }
        if err != nil {
            fmt.Println(err)
            break
        }
        //寫出去
        dstFile.Write(buf[:n])
    }
    srcFile.Close()
    dstFile.Close()
}

7. bufio

  • bufio包實現(xiàn)了帶緩沖區(qū)的讀寫,是對文件讀寫的封裝
  • bufio緩沖寫數(shù)據(jù)

os.O_WRONLY //只寫 os.O_CREATE //創(chuàng)建文件 os.O_RDONLY //只讀

os.O_RDWR //讀寫 os.O_TRUNC //清空 os.O_APPEND //追加

  • bufio讀數(shù)據(jù)
package main
import (
    "bufio"
    "fmt"
    "io"
    "os"
)
func wr() {
    // 參數(shù)2:打開模式,所有模式d都在上面
    // 參數(shù)3是權(quán)限控制
    // w寫 r讀 x執(zhí)行   w  2   r  4   x  1
    file, err := os.OpenFile("./xxx.txt", os.O_CREATE|os.O_WRONLY, 0666)
    if err != nil {
        return
    }
    defer file.Close()
    // 獲取writer對象
    writer := bufio.NewWriter(file)
    for i := 0; i < 10; i++ {
        writer.WriteString("hello\n")
    }
    // 刷新緩沖區(qū),強制寫出
    writer.Flush()
}
func re() {
    file, err := os.Open("./xxx.txt")
    if err != nil {
        return
    }
    defer file.Close()
    reader := bufio.NewReader(file)
    for {
        line, _, err := reader.ReadLine()
        if err == io.EOF {
            break
        }
        if err != nil {
            return
        }
        fmt.Println(string(line))
    }
}
func main() {
    re()
}

以上就是Go語言IO輸入輸出底層原理及文件操作API的詳細內(nèi)容,更多關(guān)于Go IO操作輸入輸出API的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 深入理解Go語言中的閉包

    深入理解Go語言中的閉包

    Go函數(shù)是可以閉包的。閉包是一個函數(shù)值,他來自函數(shù)體外部的變量引用。 下面這篇文章通過一個demo來進行深入的介紹了Go語言中閉包的相關(guān)資料,文中介紹的非常詳細,需要的朋友可以參考下。
    2017-03-03
  • 基于go+vue實現(xiàn)的golang每日新聞數(shù)據(jù)瀏覽與檢索平臺(推薦)

    基于go+vue實現(xiàn)的golang每日新聞數(shù)據(jù)瀏覽與檢索平臺(推薦)

    gonews是基于 go+vue 實現(xiàn)的golang每日新聞瀏覽與檢索平臺,本文通過實例代碼給大家講解,介紹的非常詳細,具有參考借鑒價值,需要的朋友參考下吧
    2018-01-01
  • GO語言框架快速集成日志模塊的操作方法

    GO語言框架快速集成日志模塊的操作方法

    zap是一個可以在go項目中進行快速,?結(jié)構(gòu)化且分級的日志記錄包,?git?star數(shù)高達16.3k,?Git?項目地址,?在各大公司項目中被廣泛使用,這篇文章主要介紹了GO語言框架中如何快速集成日志模塊,需要的朋友可以參考下
    2022-07-07
  • golang網(wǎng)絡(luò)通信超時設(shè)置方式

    golang網(wǎng)絡(luò)通信超時設(shè)置方式

    這篇文章主要介紹了golang網(wǎng)絡(luò)通信超時設(shè)置方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • go語言使用Chromedp實現(xiàn)二維碼登陸教程示例源碼

    go語言使用Chromedp實現(xiàn)二維碼登陸教程示例源碼

    這篇文章主要為大家介紹了go語言使用Chromedp實現(xiàn)二維碼登陸示例源碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-04-04
  • golang內(nèi)存對齊的概念及案例詳解

    golang內(nèi)存對齊的概念及案例詳解

    為保證程序順利高效的運行,編譯器會把各種類型的數(shù)據(jù)安排到合適的地址,并占用合適的長度,這就是內(nèi)存對齊。本文重點給大家介紹golang內(nèi)存對齊的概念及案例詳解,感興趣的朋友一起看看吧
    2022-02-02
  • Go語言如何利用Mutex保障數(shù)據(jù)讀寫正確

    Go語言如何利用Mutex保障數(shù)據(jù)讀寫正確

    這篇文章主要介紹了互斥鎖的實現(xiàn)機制,以及?Go?標準庫的互斥鎖?Mutex?的基本使用方法,文中的示例代碼講解詳細,需要的小伙伴可以參考一下
    2023-05-05
  • 詳解Go語言中如何通過Goroutine實現(xiàn)高并發(fā)

    詳解Go語言中如何通過Goroutine實現(xiàn)高并發(fā)

    在Go語言中,并發(fā)編程是一個核心且強大的特性,Go語言通過goroutine和channel等機制,使得并發(fā)編程變得更加簡單和直觀,本文給大家介紹了Go語言中如何通過Goroutine快速實現(xiàn)高并發(fā),感興趣的小伙伴跟著小編一起來看看吧
    2024-10-10
  • GO語言中的Map使用方法詳解

    GO語言中的Map使用方法詳解

    這篇文章主要給大家介紹了關(guān)于GO語言中Map使用方法的相關(guān)資料,在go語言中map是散列表的引用,map的類型是map[k]v,也就是常說的k-v鍵值對,需要的朋友可以參考下
    2023-08-08
  • goland 實現(xiàn)自動格式化代碼

    goland 實現(xiàn)自動格式化代碼

    這篇文章主要介紹了goland 實現(xiàn)自動格式化代碼的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04

最新評論

仁化县| 平武县| 大同市| 武威市| 庆城县| 新龙县| 永修县| 叶城县| 霸州市| 嘉兴市| 绥宁县| 施秉县| 三河市| 社会| 大关县| 微博| 通州市| 凉城县| 游戏| 津南区| 英吉沙县| 延长县| 梅州市| 镇江市| 峨眉山市| 石嘴山市| 蓝田县| 诸城市| 渭源县| 界首市| 理塘县| 山阴县| 台山市| 盐池县| 浦东新区| 亚东县| 兴和县| 永春县| 略阳县| 罗平县| 玛纳斯县|