Go seek方法

LiberHome發表於2022-05-06

seek方法

seek方法的目的是為了給下一個游標的讀資料或者寫資料設定偏移量的,他有2個引數,第一個是偏移多少個位元組,第二個引數是從哪裡開始偏移。

定義

type Seeker interface {
    Seek(offset int64, whence int) (int64, error)
}

具體怎麼使用呢?

舉個例子:
如果我有一個檔案test.txt,裡面的內容是hey it is liber,我想要從第五個字元i開始讀取裡面的資料,就可以這樣寫:

package main

import (
    "fmt"
    "io"
    "log"
    "os"
)

func main() {
    fileName := "/Users/liberhome/GolandProjects/awesomeProject/I-package/April28_Go_io/test.txt" //裡面的內容是hey it is liber
    file, err := os.OpenFile(fileName, os.O_RDWR, os.ModePerm)                                    //選擇OOpenFile, 模式選擇讀寫
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()
    //讀寫
    bs := []byte{0}         //首先建立一個切片, 不用搞太大 一個位元組就足夠了
    file.Read(bs)           //這個時候read,會預設讀取檔案第一個位元組h
    fmt.Println(string(bs)) //對了 插播一條Goland-mac的快捷鍵:shift+control(記住不是command)+R = 執行
    //接下來 演示一下seek的用法
    file.Seek(4, io.SeekStart) //從頭開始偏移4個字元
    file.Read(bs)              //這個時候read,會預設讀取檔案第5個位元組i
    fmt.Println(string(bs))
}

引數設定

file.Seek(4, io.SeekStart) //這裡的第二個引數 可以有以下選項

  • io.SeekStart : 去看定義就知道 其實他就是個常量0 代表的意思是相對於檔案開頭而言
  • io.SeekCurrent : 常量1, 相當於游標目前所處位置而言
  • io.SeekEnd: 常量2, 相對於檔案末尾而言
  • 當然了,如果知道0 1 2分別代表什麼,可以直接寫數字,不過還是建議用常量名字,可讀性更好

相關文章