记录golang使用os包读取文件中的一次错误

golang中文件读取不止os一种方法,还可以使用io/ioutil包中的方法
os读取文件的步骤很简单,使用os.openFile(path string,openType int,perm FileMode)获取文件对象,然后使用os.Read(bts []byte)读取即可,具体可官方文档golang/os
操作本身很简单,之所以专门记录一下是因为:对于会c之类有指针操作语言的程序员而言,会经常注意指针位置,而对于常年写java代码的程序员而言,会经常忽视指针这个东西,而这玩意至关重要,所以专门讲这次失误记录下来

package useOs

import(
	"os"
)

func ReadFile(sour string)string{
	// 获取文件对象
	fl,_:= os.OpenFile(sour,os.O_RDONLY,0777)
	/*
	移动文件指针,根据指针偏移量获取文件内容的长度
	第二个参数表示指正定位的位置:0表示将指针定位到文件开头,1表示当前位置,2表示定位带文件末
	第一个参数表示相对于定位位置的偏移量
	这段代码本身没有什么问题,问题在于他造成的结果:文件指针在此次操作后移动到了文件末尾
	*/
	ret,_:=fl.Seek(0,os.SEEK_END)
	
	// 创建一个切片作为接受数据的容器
	cont := make([]byte,ret)
	
	// 重点!!!将文件指针移回文件开头!!!一定要移动,否则会读取内容为空或抛出EOF错误
	fl.Seek(0,os.SEEK_SET)
	
	// 读取内容,将内容装载至容器
	fl.Read(cont)
	
	// 返回结果
	return string(cont)
}

ps:一开始这段代码完全跑不通,一直搞不清楚什么原因,直到定位到Seek方法才灵光一闪指针位置错了,网上资料很少提及这块内容,可能是觉得指针操作是常识了吧,怎么说呢,坑人~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值