GO中读文件的问题

utears 2013-08-17 03:28:09
最近一直对GO比较着迷,自己在读文件的时候也遇到了一些疑问:
1)不解的是GO中文件读入函数,例如
func (s *SectionReader) Read(p []byte) (n int, err error)

func (f *File) Read(b []byte) (n int, err error)
都是将内容存入[]byte中。可不可以直接读入string,int或者float呢?
2) 如何要对读入的内容处理,怎么把[]byte转化成一些基本类型啊?

楼主刚学GO不久,以前一直在C上玩的,刚到这里不太熟悉,百度一下也太多的相关内容,还请坛友解疑答惑哈~~如果楼主一时智障,还请坛友给打通任督二脉哈~~
...全文
66 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
svenwang 2013-08-18
  • 打赏
  • 举报
回复
引用 4 楼 utears 的回复:
[quote=引用 1 楼 svenwang 的回复:] 可以直接把[]byte转换成string: func readString(f *os.File) (string, error) { data, err := ioutil.ReadAll(f) if err != nil { return "", err } return string(data), nil } 可以通过encoding/binary来从一个文件中读出int只是要注意明确数据的大小和大端或小端的次序: func readInt(f *os.File) (int, error) { var n int32 if err := binary.Read(f, binary.LittleEndian, &n); err != nil { return 0, nil } return int(n), nil }
这么说就是GO中没有格式化输入输出的标准函数了吧~~[/quote] fmt包有Fprintf和Fscanf可以从一个文件中读取和写入格式化的数据,但都是基于文本而不是二进制的方式。 你可以用godoc查看具体的函数说明。
utears 2013-08-18
  • 打赏
  • 举报
回复
引用 1 楼 svenwang 的回复:
可以直接把[]byte转换成string: func readString(f *os.File) (string, error) { data, err := ioutil.ReadAll(f) if err != nil { return "", err } return string(data), nil } 可以通过encoding/binary来从一个文件中读出int只是要注意明确数据的大小和大端或小端的次序: func readInt(f *os.File) (int, error) { var n int32 if err := binary.Read(f, binary.LittleEndian, &n); err != nil { return 0, nil } return int(n), nil }
这么说就是GO中没有格式化输入输出的标准函数了吧~~
utears 2013-08-18
  • 打赏
  • 举报
回复
引用 5 楼 svenwang 的回复:
[quote=引用 4 楼 utears 的回复:] [quote=引用 1 楼 svenwang 的回复:] 可以直接把[]byte转换成string: func readString(f *os.File) (string, error) { data, err := ioutil.ReadAll(f) if err != nil { return "", err } return string(data), nil } 可以通过encoding/binary来从一个文件中读出int只是要注意明确数据的大小和大端或小端的次序: func readInt(f *os.File) (int, error) { var n int32 if err := binary.Read(f, binary.LittleEndian, &n); err != nil { return 0, nil } return int(n), nil }
这么说就是GO中没有格式化输入输出的标准函数了吧~~[/quote] fmt包有Fprintf和Fscanf可以从一个文件中读取和写入格式化的数据,但都是基于文本而不是二进制的方式。 你可以用godoc查看具体的函数说明。[/quote] 嗯嗯~~查看了下,恍然大悟~~谢谢了
svenwang 2013-08-17
  • 打赏
  • 举报
回复
有点小错误,修正一下:

func readInt(f *os.File) (int, error) {
var n int32
if err := binary.Read(f, binary.LittleEndian, &n); err != nil {
return 0, err
}
return int(n), nil
}
svenwang 2013-08-17
  • 打赏
  • 举报
回复
可以直接把[]byte转换成string: func readString(f *os.File) (string, error) { data, err := ioutil.ReadAll(f) if err != nil { return "", err } return string(data), nil } 可以通过encoding/binary来从一个文件中读出int只是要注意明确数据的大小和大端或小端的次序: func readInt(f *os.File) (int, error) { var n int32 if err := binary.Read(f, binary.LittleEndian, &n); err != nil { return 0, nil } return int(n), nil }

2,190

社区成员

发帖
与我相关
我的任务
社区描述
go语言学习与交流版
社区管理员
  • go语言社区
  • Freeman Z
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧