温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何使用golang读取文件

发布时间:2021-05-19 16:41:09 来源:亿速云 阅读:193 作者:Leah 栏目:编程语言

这篇文章将为大家详细讲解有关如何使用golang读取文件,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

一次性加载到内存中

// * 整个文件读到内存,适用于文件较小的情况 //每次读取固定字节 //问题容易出现乱码,因为中文和中文符号不占一个字符 func readAllIntoMemory(filename string) (content []byte, err error) {  fp, err := os.Open(filename) // 获取文件指针  if err != nil {  return nil, err  }  defer fp.Close()  fileInfo, err := fp.Stat()  if err != nil {  return nil, err  }  buffer := make([]byte, fileInfo.Size())  _, err = fp.Read(buffer) // 文件内容读取到buffer中  if err != nil {  return nil, err  }  return buffer, nil }

一次性加载到内存中适用于小文件。 如果文件太大, 内存紧张的情况下, 可以借助缓冲, 分多次读取。

分块读取

// * 一块一块地读取, 即给一个缓冲, 分多次读到缓冲中 //按字节读取,将整个文件读取到缓冲区buffer func readByBlock(filename string) (content []byte, err error) {  fp, err := os.Open(filename) // 获取文件指针  if err != nil {  return nil, err  }  defer fp.Close()  const bufferSize = 64 // 缓冲大小, 每次读取64个字节  buffer := make([]byte, bufferSize)  for {  // 注意这里要取bytesRead, 否则有问题  bytesRead, err := fp.Read(buffer) // 文件内容读取到buffer中  content = append(content, buffer[:bytesRead]...)  if err != nil {   if err == io.EOF {   err = nil   break   } else {   return nil, err   }  }  }  return }

有时我们也需要按行处理

按行读

// 逐行读取, 一行是一个[]byte, 多行就是[][]byte func readByLine(filename string) (lines [][]byte, err error) {  fp, err := os.Open(filename) // 获取文件指针  if err != nil {  return nil, err  }  defer fp.Close()  bufReader := bufio.NewReader(fp)  for {  line, _, err := bufReader.ReadLine() // 按行读  if err != nil {   if err == io.EOF {   err = nil   break   }  } else {   lines = append(lines, line)  }  }  return }

使用ioutil读取文件的所有内容

func test1() {  bytes,err := ioutil.ReadFile("filetoread.txt")  if err != nil {  log.Fatal(err)  }  fmt.Println("total bytes read:",len(bytes))  fmt.Println("string read:",string(bytes)) }

什么是golang

golang 是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言,其语法与 C语言相近,但并不包括如枚举、异常处理、继承、泛型、断言、虚函数等功能。

关于如何使用golang读取文件就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI