Golang bytes.Reader.Seek() function example

package bytes

Seek sets the offset for the next Read or Write to offset, interpreted according to whence: 0 means relative to the origin of the file, 1 means relative to the current offset, and 2 means relative to the end. Seek returns the new offset and an error, if any.

Seeking to a negative offset is an error. Seeking to any positive offset is legal, but the behavior of subsequent I/O operations on the underlying object is implementation-dependent.

Golang bytes.Reader.Seek() function usage example

 package main

 import (
 "bytes"
 "fmt"
 )

 var str = []byte("abcdef")


 func seekorigin() {
 fmt.Println("Origin:")
 b := bytes.NewReader(str)
 fmt.Println(b.Seek(1, 0)) //0 means relative to the origin of the file
 c, _ := b.ReadByte()
 fmt.Println(string(c))
 }

 func seekcurrent() {
 fmt.Println("Current:")
 b := bytes.NewReader(str)
 b.ReadByte() // read next byte
 b.ReadByte() // read another byte
 fmt.Println(b.Seek(1, 1)) // 1 means relative to the current offset
 c, _ := b.ReadByte()
 fmt.Println(string(c))
 }

 func seekend() {
 fmt.Println("End:")
 b := bytes.NewReader(str)
 fmt.Println(b.Seek(-2, 2)) //2 means relative to the end
 c, _ := b.ReadByte()
 fmt.Println(string(c))
 }

 func main() {
 seekorigin()
 seekcurrent()
 seekend()
 }

Output :

Origin:

1 <nil>

b

Current:

3 <nil>

d

End:

4 <nil>

e

Reference :

http://golang.org/pkg/bytes/#Reader.Seek

Advertisement