返回顶部
首页 > 资讯 > 后端开发 > GO >Go语言读取文件的四种方式
  • 958
分享到

Go语言读取文件的四种方式

Go读取文件 2023-05-15 11:05:53 958人浏览 八月长安
摘要

目录前言整个文件读取按行读取逐个单词读取以数据块的形式读取文件二进制读取总结前言 这篇文章将讨论如何在 golang 中读取文件。我们将使用以下包来处理这些文件。 os 包提供了一个

前言

这篇文章将讨论如何在 golang 中读取文件。我们将使用以下包来处理这些文件。

  • os 包提供了一个独立于平台的接口来执行操作级操作。
  • ioutil 软件包提供了易于使用的实用程序函数来处理文件,而无需了解太多内部实现。
  • bufio 包实现了缓冲 IO,这有助于我们提高输入和输出操作的性能和吞吐量。
  • log 包实现一个简单的日志记录包。我们将在整个程序中使用它。我们将在程序中使用日志包的 Fatal() 函数。

整个文件读取

我们可以很容易地一次性读取整个文件并将其存储在一个变量中。但请记住,我们不应该对大文件这样做。我们将使用ioutil.ReadFile() 函数来读取文件并将文件的内容存储在一个变量中。

首先,让我们在我们程序所在的同一目录下存储一个文件。因此,我们的文件夹结构将是下面这样的。

___ 
| 
|_ _ _ _ iloveGo.txt | 
|_ _ _ _ main.go

我们在 main.go 函数中写入如下的内容:

package main

import (
	"fmt"
	"io/ioutil"
	"log"
)

func main() {

	content, err := ioutil.ReadFile("ilovego.txt")

	if err != nil {
		log.Fatal(err)
	}

	fmt.Println(string(content))
}

但首先,让我们讨论一下 ReadFile() 函数的情况:

  • 定义:方法声明 func ReadFile(filename string) ([]byte, error)
  • 功能:读取路径被传入函数参数的文件,并返回文件的内容。在内部使用 os.ReadFile(fileName) 方法
  • 返回:在一个字节数组中返回文件的内容和错误。一个成功的调用将返回 err == nil

内部 ReadFile 函数实现如下:

func ReadFile(filename string) ([]byte, error) {
    return os.ReadFile(filename)
}

现在,让我们回到我们的程序:

  • ioutil.ReadFile("readthisfile.txt") 返回一个 byteArray 和一个 err。我们将byteArray 存储在 "content "变量中,错误存储在 " err "变量中。
  • 然后我们放置了一个 if 条件,如果 err 值不为 nil,我们将使用 log.Fatal() 函数打印错误 err 。记住,Fatal() 函数等同于 Print() 函数,然后调用 os.Exit(1)
  • 最后,我们将使用 fmt.Println() 函数打印文件的内容。 我们不能简单地打印 content 变量,因为它是一个字节数组,我们需要将它转换为字符串: string(content)

然后新建一个 ilovego.txt 文件,写入如下内容:

I Love Golang,
This is One of the Best Languages on the World!

最后,执行上述代码,可以看到如下输出:

$ go run main.go
I Love Golang, 
This is One of the Best Languages on the World!

按行读取

Scanner 扫描器提供了一个方便的接口来读取数据,比如一个由新行分隔的文本行组成的文件。它通过标记来读取数据;Split 函数定义了标记。默认情况下,该函数将数据分成几行,并剥离了行端。

package main

import (
	"fmt"
	// "io/ioutil"
	"bufio"
	"log"
	"os"
)

func main() {

	// opening the file using Open function
	f, err := os.Open("ilovego.txt")

	if err != nil {
		log.Fatal(err)
	}

	defer f.Close()

	// create a scanner for the file
	scanner := bufio.NewScanner(f)

	// loop through the scanner until it return fasle
	for scanner.Scan() {

		fmt.Println(scanner.Text())
	}

	if err := scanner.Err(); err != nil {
		log.Fatal(err)
	}
}

  • os.Open() 打开参数中传递的文件。如果在打开文件时遇到任何错误,它将返回同样的错误。否则,错误将是 nil。
  • 然后,我们使用扫描器来读取文件,并逐行扫描,直到文件内容结束。
  • 最后,我们要关闭该文件。

执行程序,结果如下:

逐个单词读取

我们还可以通过逐个单词来读取文件:

package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {

	f, err := os.Open("ilovego.txt")

	if err != nil {
		fmt.Println(err)
	}

	defer f.Close()

	scanner := bufio.NewScanner(f)
	scanner.Split(bufio.ScanWords)

	for scanner.Scan() {

		fmt.Println(scanner.Text())
	}

	if err := scanner.Err(); err != nil {
		fmt.Println(err)
	}
}

运行代码:

$ go run main.go
I
Love
Golang,
This
is
One
of
the
Best
Languages
on
the
World!

以数据块的形式读取文件

一次性读取整个文件似乎是一种简单的方法,但有时我们需要从内存管理的角度使我们的程序得到一些优化。Golang 提供了一种分块读取文件的方法,而不是整个或甚至逐行读取。因为如果一行的大小太大,逐行读取也可能是低效的。

package main

import (
	"bufio"
	"fmt"
	"io"
	"log"
	"os"
)

func main() {

	f, err := os.Open("ilovego.txt")

	if err != nil {
		log.Fatal(err)
	}

	defer f.Close()

	reader := bufio.NewReader(f)
	buf := make([]byte, 16)

	for {
                // reading a file upto buffer
		n, err := reader.Read(buf)

		if err != nil {

			if err != io.EOF {

				log.Fatal(err)
			}

			break
		}

		fmt.Print(string(buf[0:n]))
	}

	fmt.Println()
}

二进制读取

hex 包实现了十六进制的编码和解码。

package main

import (
	"bufio"
	"encoding/hex"
	"fmt"
	"io"
	"log"
	"os"
)

func main() {

	f, err := os.Open("sid.jpg")

	if err != nil {
		log.Fatal(err)
	}

	defer f.Close()

	reader := bufio.NewReader(f)
	buf := make([]byte, 256)

	for {
		_, err := reader.Read(buf)

		if err != nil {
			if err != io.EOF {
				fmt.Println(err)
			}
			break
		}

		fmt.Printf("%s", hex.Dump(buf))
	}
}

总结

本文介绍了 Go 语言读取文件的几种方式,ioutil.ReadFile 函数将整个文件读成一个字符串。这个函数很方便,但不应该用于非常大的文件。

到此这篇关于Go语言读取文件的四种方式的文章就介绍到这了,更多相关Go 读取文件内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: Go语言读取文件的四种方式

本文链接: https://lsjlt.com/news/208905.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Go语言读取文件的四种方式
    目录前言整个文件读取按行读取逐个单词读取以数据块的形式读取文件二进制读取总结前言 这篇文章将讨论如何在 Golang 中读取文件。我们将使用以下包来处理这些文件。 os 包提供了一个...
    99+
    2023-05-15
    Go 读取文件
  • Go语言读取文本文件的三种方式总结
    目录1 逐行读取文本文件2 逐个单词读取文本文件测试代码3 逐个字符读取文本文件总结工作中时不时需要读取文本,文本文件是最常见的文件类型。 本文将从逐行、逐个单词和逐个字符三个方法读...
    99+
    2023-01-12
    Go语言读取文本文件 Go语言读取文件 Go读取文本文件
  • C++读取文件的四种方式总结
    C++可以根据不同的目的来选取文件的读取方式,目前为止学习了C++中的四种文件读取方式。 C++文件读取的一般步骤: 1、包含头文件 #include<fstream> ...
    99+
    2023-05-15
    C++实现文件读取方式 C++文件读取 C++文件
  • Go语言读取YAML配置文件的两种方式分享
    目录前言yaml.v3 包读取 yaml 文件viper 包读取 yaml 文件小结前言 在日常开发中,YAML 格式的文件基本上被默认为是配置文件,其内容因为缩进带来的层级感看起来...
    99+
    2022-12-19
    Go读取YAML 配置文件 Go读取YAML Go YAML
  • Go语言读取文件的方式有哪些
    这篇文章主要介绍了Go语言读取文件的方式有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Go语言读取文件的方式有哪些文章都会有所收获,下面我们一起来看看吧。整个文件读取我们可以很容易地一次性读取整个文件并将...
    99+
    2023-07-06
  • Go语言实现读取文件的方式总结
    目录前言整个文件读取按行读取逐个单词读取以数据块的形式读取文件二进制读取总结前言 这篇文章将讨论如何在 Golang 中读取文件。我们将使用以下包来处理这些文件。 os 包提供了一个...
    99+
    2023-05-14
    Go语言读取文件方式 Go语言读取文件 Go语言 文件
  • Python读取文件的四种方式的实例详解
    目录学生数量特别少的情况停车场空间不够时怎么办?怎么加快执行效率?怎么加快处理速度?结语故事背景:最近在处理Wikipedia的数据时发现由于数据量过大,之前的文件读取和数据处理方法...
    99+
    2024-04-02
  • Node.js读取文件的三种方式
    本篇内容介绍了“Node.js读取文件的三种方式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!学习 Nod...
    99+
    2024-04-02
  • java 读取文件的几种方式
    在 Java 中有几种常用的方式来读取文件: 使用 FileInputStream 类以字节的方式读取文件。 使用 BufferedReader 在字符输入流上包装一个缓冲区,以行为单位读取文件。 使用 Scanner 类以分隔符为标志...
    99+
    2023-09-02
    java servlet 开发语言
  • Python读取文件的多种方式
    在Python编程中,读取文件是非常常见的操作。Python提供了多种读取文件的方式,本文将介绍其中的几种方式。 1. 使用open函数读取文件 使用Python内置函数open()可以打开一个文件,并返回一个文件对象。在文件对象上可以调用...
    99+
    2023-09-02
    python pandas 数据分析
  • Java读取文件的几种方式
    1. 使用流读取文件 public static void stream() { String fileName = "D:\\test.txt"; final String CHARSET_NAME = "UTF-8"; ...
    99+
    2023-09-09
    java 开发语言 servlet 前端
  • Excel文件读取的两种方式
    1、Pandas库的读取操作 from pandas import read_excel dr=read_excel(filename,header) dr#dataframe数据 dw=DataFrams(data=dict,colum...
    99+
    2023-01-31
    两种 方式 文件
  • Go语言如何实现读取文件
    这篇文章主要介绍“Go语言如何实现读取文件”,在日常操作中,相信很多人在Go语言如何实现读取文件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Go语言如何实现读取文件”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-07-05
  • java— 读取JSON文件的多种方式
    大部分内容参考自: https://blog.csdn.net/csdn_halon/article/details/120287992 在开发过程中有时会遇到需要读取本地.json文件的需求,通常会自己写Reader代码去读,但是...
    99+
    2023-09-01
    java json Powered by 金山文档
  • java 读取json文件的2种方式
    1 背景介绍 研发过程中,经常会涉及到读取配置文件等重复步骤,也行是.conf文件,也许是.json文件,但不管如何他们最终都需要进入到jave的inputStream里面。下面以读取.json文件为例 2 FileInputStream读...
    99+
    2023-08-18
    java json linux
  • go按行读取文件的三种实现方式汇总
    目录1. 使用ioutil读取文本2. 使用bufio.Reader的ReadLine读取3.使用bufio.Scanner读取总结1. 使用ioutil读取文本 // 全...
    99+
    2024-04-02
  • Go语言如何读取YAML配置文件
    今天小编给大家分享一下Go语言如何读取YAML配置文件的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。yaml.v3 包yam...
    99+
    2023-07-04
  • Go语言怎么使用buffer读取文件
    这篇文章主要讲解了“Go语言怎么使用buffer读取文件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Go语言怎么使用buffer读取文件”吧!buffer 是缓冲器的意思,Go语言要实现缓...
    99+
    2023-07-05
  • Go语言读取txt文档的操作方法
    读取文件是所有编程语言中最常见的操作之一。本教程我们将了解如何使用 Go 读取txt文档。 文档内容每行是一个文件名信息,含有空格区分不同项;ioutil.ReadFile返回的是[...
    99+
    2024-04-02
  • GO语言ini配置文件的读取的操作
    iniconf 博主前两天在写一个小的go语言项目,想找一个读取ini格式配置和的三方库,在网上找了一圈感觉都不是很好用, 使用起来非常的奇怪,于是自己写了一版,还有两个接口没...
    99+
    2022-06-07
    ini GO
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作