如何使用golang读取文件-创新互联

这篇文章将为大家详细讲解有关如何使用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读取文件就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


分享名称:如何使用golang读取文件-创新互联
本文链接:http://myzitong.com/article/ehgcs.html