Интерфейс io.Seeker
Интерфейс io.Seeker предназначен для объектов,
поддерживающих произвольный доступ к данным. Он содержит
единственный метод Seek, который позволяет
изменить текущую позицию в потоке данных. В первый параметр
передается смещение (offset) в байтах, во второй параметр
передается константа, определяющая точку отсчета:
io.SeekStart (от начала файла),
io.SeekCurrent (от текущей позиции) или
io.SeekEnd (от конца файла). Метод возвращает
новую абсолютную позицию и ошибку, если она возникла.
Синтаксис
Seek(offset int64, whence int) (int64, error)
Пример
Давайте создадим файл и переместим указатель на 10 байт от начала файла:
package main
import (
"fmt"
"io"
"os"
)
func main() {
file, err := os.Open("example.txt")
if err != nil {
fmt.Println(err)
return
}
defer file.Close()
pos, err := file.Seek(10, io.SeekStart)
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("New position: %d\n", pos)
}
Результат выполнения кода:
"New position: 10"
Пример
Переместим указатель на 5 байт вперед от текущей позиции:
package main
import (
"fmt"
"io"
"os"
)
func main() {
file, err := os.Open("example.txt")
if err != nil {
fmt.Println(err)
return
}
defer file.Close()
_, err = file.Seek(10, io.SeekStart)
if err != nil {
fmt.Println(err)
return
}
pos, err := file.Seek(5, io.SeekCurrent)
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("Position after forward move: %d\n", pos)
}
Результат выполнения кода:
"Position after forward move: 15"
Пример
Переместим указатель на 20 байт от конца файла (отрицательное смещение):
package main
import (
"fmt"
"io"
"os"
)
func main() {
file, err := os.Open("example.txt")
if err != nil {
fmt.Println(err)
return
}
defer file.Close()
pos, err := file.Seek(-20, io.SeekEnd)
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("Position from end: %d\n", pos)
}
Результат выполнения кода:
"Position from end: 524"
Смотрите также
-
интерфейс
io.Reader,
предоставляющий методReadдля чтения данных -
интерфейс
io.Writer,
предоставляющий методWriteдля записи данных -
интерфейс
io.Closer,
предоставляющий методCloseдля закрытия ресурса -
функцию
io.SectionReader,
которая создаетReaderдля чтения секции данных