记录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方法才灵光一闪指针位置错了,网上资料很少提及这块内容,可能是觉得指针操作是常识了吧,怎么说呢,坑人~

猜你喜欢

转载自blog.csdn.net/DDKii/article/details/86480057