Go seek方法

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分别代表什么,可以直接写数字,不过还是建议用常量名字,可读性更好

你可能感兴趣的:(golang)