go 語言file Seek( )函數用法


 

原文: https://studygolang.com/articles/2271

 

package main

import (
  "fmt"
  "strings"
  "log"
)

func main() {

  reader := strings.NewReader("Go語言學習園地")
  reader.Seek(2, 0)
  r, _, _ := reader.ReadRune()
  fmt.Printf("%c\n", r)
  str := "Go語言學習園地"
  log.Println([]byte(str))
}

  --------------------

 

讀者是否發現,其實ReaderFrom和WriterTo接口的方法接收的參數是io.Reader和io.Writer類型。根據io.Reader和io.Writer接口的講解,對該接口的使用應該可以很好的掌握。

這里只提供簡單的一個示例代碼:將一段文本輸出到標准輸出

reader := bytes.NewReader([]byte("Go語言學習園地"))
reader.WriteTo(os.Stdout)

通過io.ReaderFrom和io.WriterTo的學習,我們知道,如果這樣的需求,可以考慮使用這兩個接口:“一次性從某個地方讀或寫到某個地方去。”

## Seeker接口 ##

接口定義如下:

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


官方文檔中關於該接口方法的說明:

> Seek 設置下一次 Read 或 Write 的偏移量為 offset,它的解釋取決於 whence: 0 表示相對於文件的起始處,1 表示相對於當前的偏移,而 2 表示相對於其結尾處。 Seek 返回新的偏移量和一個錯誤,如果有的話。


也就是說,Seek方法用於設置偏移量的,這樣可以從某個特定位置開始操作數據流。聽起來和ReaderAt/WriteAt接口有些類似,不過Seeker接口更靈活,可以更好的控制讀寫數據流的位置。

簡單的示例代碼:獲取倒數第二個字符(需要考慮UTF-8編碼,這里的代碼只是一個示例

-------------

**小貼士**

whence的值,在os包中定義了相應的常量,應該使用這些常量

const (
SEEK_SET int = 0 // seek relative to the origin of the file
SEEK_CUR int = 1 // seek relative to the current offset
SEEK_END int = 2 // seek relative to the end
)

## Closer接口 ##

接口定義如下:

type Closer interface {
	Close() error
}


該接口比較簡單,只有一個Close()方法,用於關閉數據流。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM