Golang之如何读取文件内容

 更新时间:2023年06月12日 10:03:06   作者:mrtwenty  
这篇文章主要介绍了Golang之如何读取文件内容问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

Golang读取文件内容

可以一次性读取,也可以按行读取,也可以按字节读取,一般小文件直接一次性读取,当文件内容太大,内存不足,建议逐行读取处理。

package main
import (
	"bufio"
	"fmt"
	"io"
	"io/ioutil"
	"os"
)
func main() {
	//1、一次性读取文件内容,还有一个 ReadAll的函数,也能读取
	data, err := ioutil.ReadFile("./util/file.go")
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(string(data))
	//2、逐行读取
	file, err := os.Open("./util/file.go")   //打开
	if err != nil { fmt.Println(err); return  }
	defer file.Close() //关闭
	line := bufio.NewReader(file)
	for {
		content, _, err := line.ReadLine()
		if err == io.EOF { break }
		fmt.Println(string(content))
	}
	//3、按照字节数读取
	file,err= os.Open("./util/file.go")
	if err!=nil{ fmt.Println(err); return }
	defer file.Close()
	//读取数据
	bs := make([] byte,4)
	for {
		_, err = file.Read(bs)
		if err == io.EOF { break}
		fmt.Print(string(bs))
	}
}

Golang读取文件、图片字节流

读取图片的字节流

package main
import (
	"io/ioutil"
	"log"
	"net/http"
	"os"
)
func main() {
	// 这里以图片为例子,excel,world也是可以的
	url := "https://file.hytwfy.top/jxb.jpg"
	resByte, err := getRemote(url)
	if err != nil {
		log.Println(err)
	}
	// resByte 就是要上传到服务器的字节流
}
func getRemote(url string) ([]byte, error) {
	res, err := http.Get(url)
	if err != nil {
		// 如果有错误返回错误内容
		return nil, err
	}
	// 使用完成后要关闭,不然会占用内存
	defer res.Body.Close()
	// 读取字节流
	bytes, err := ioutil.ReadAll(res.Body)
	if err != nil {
		return nil, err
	}
	return bytes, err
}
// 获得资源,从本地
// 这里以图片为例子,excel,world也是可以的
func getLocal(url string) ([]byte, error) {
	fp, err := os.OpenFile(url, os.O_CREATE|os.O_APPEND, 6) // 读写方式打开
	if err != nil {
		// 如果有错误返回错误内容
		return nil, err
	}
	defer fp.Close()
	bytes, err := ioutil.ReadAll(fp)
	if err != nil {
		return nil, err
	}
	return bytes, err
}

如果要对处理进行处理,可以新建一个字节流进行处理

// 新建空间字节流
newByte := new(bytes.Buffer)
/*
	文件操作
	xxx
*/
// 读取写入的内容
reader := bytes.NewReader(newByte.Bytes())

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • go中值传递和指针传递的使用

    go中值传递和指针传递的使用

    在Go语言中,使用&和*可以分别取得变量的地址和值,解引用未初始化或为nil的指针会引发空指针异常,正确的做法是先进行nil检查,此外,nil在Go中用于多种类型的空值表示,值传递和指针传递各有适用场景,通常小型数据结构优先考虑值传递以减少解引用开销
    2024-10-10
  • Golang Goroutine的使用

    Golang Goroutine的使用

    这篇文章主要介绍了Golang Goroutine的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • golang读取yaml配置文件的示例代码

    golang读取yaml配置文件的示例代码

    在项目开发中,经常需要把一些配置文件常量提取到统一配置文件进行维护,go项目在开发中常常把需要维护的常量或者配置提取到yaml文件,所以本文主要来为大家介绍一下golang如何读取yaml配置文件吧
    2023-11-11
  • Golang使用pprof和trace进行诊断和修复性能问题

    Golang使用pprof和trace进行诊断和修复性能问题

    在 Go 中,开发人员可以使用强大的内置工具来帮助诊断和修复性能问题,其中两个工具是 pprof 和 trace 包,下面就跟随小编一起来了解下如何使用pprof和trace进行诊断和修复性能问题吧
    2024-01-01
  • go语言使用Casbin实现角色的权限控制

    go语言使用Casbin实现角色的权限控制

    Casbin是用于Golang项目的功能强大且高效的开源访问控制库。本文主要介绍了go语言使用Casbin实现角色的权限控制,感兴趣的可以了解下
    2021-06-06
  • 浅析Go项目中的依赖包管理与Go Module常规操作

    浅析Go项目中的依赖包管理与Go Module常规操作

    这篇文章主要为大家详细介绍了Go项目中的依赖包管理与Go Module常规操作,文中的示例代码讲解详细,对我们深入了解Go语言有一定的帮助,需要的可以跟随小编一起学习一下
    2023-10-10
  • 一文详解Go语言中的Option设计模式

    一文详解Go语言中的Option设计模式

    这篇文章主要为大家详细介绍了Go语言中Option设计模式的相关知识,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的可以了解一下
    2023-05-05
  • Goland项目使用gomod配置的详细步骤

    Goland项目使用gomod配置的详细步骤

    Goland是一个用于Go语言开发的IDE,Goland的项目结构与Go语言的项目结构相似,下面这篇文章主要给大家介绍了关于Goland项目使用gomod配置的详细步骤,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-04-04
  • Golang爬虫框架colly使用浅析

    Golang爬虫框架colly使用浅析

    这篇文章主要介绍了Golang爬虫框架colly的使用,colly是Go实现的比较有名的一款爬虫框架,而且Go在高并发和分布式场景的优势也正是爬虫技术所需要的,感兴趣想要详细了解可以参考下文
    2023-05-05
  • 浅谈go-restful框架的使用和实现

    浅谈go-restful框架的使用和实现

    这篇文章主要介绍了浅谈go-restful框架的使用和实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03

最新评论