go 语言file Seek( )函数用法
原文: https://studygolang.com/articles/2271
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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()方法,用于关闭数据流。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
2015-04-22 javascript的事件冒泡,阻止事件冒泡和事件委托, 事件委托是事件冒泡的一个应用。