我的Go+语言初体验——使用Go+读写文件经验总结

CodecGuard 社区贡献者 2021-12-11 22:14:55

“我的Go+语言初体验” | 征文活动进行中......

 

目录

 

前言 

正文

读文件

os.ReadFile

io.ReadAtLeast

bufio.NewReader

写文件

os.WriteFile

File.Write

bufio.WriteString


前言 

Go+ 是一门融合工程开发的 Go、数据科学领域的 Python、编程教学领域的 Scratch,以 Python 之形结合 Go 之心,让工程师处理数据不需要学习新的开发语言,让初学者学习编程、开发作品的门槛更低的编程语言。

正文

读文件和写文件是所有编程语言必须支持的基础操作,同样,Go+ 也不例外。Go+ 提供了非常丰富的读文件和写文件的基础库。今天我们就来了解一下这部分内容。

读文件

首先,我们介绍一下 Go+ 读文件的一些常用方法。

os.ReadFile

os.ReadFile 方法是用来读取文件信息最常用的方法,原理是将文件的全部内容都读取到内存中,示例代码如下:

import (
    "bufio"
    "io"
    "os"
)
 
func check(e error) {
    if e != nil {
        panic(e)
    }
}
 
// 首先创建一个文件,并向其中写入内容
d1 := []byte("hello\nworld\n")
err := os.WriteFile("/tmp/f1", d1, 0644)
 
dat, err := os.ReadFile("/tmp/f1")
check(err)
print(string(dat))

执行结果:

hello
world

亲自试一试!

io.ReadAtLeast

io.ReadAtLeast 方法从文件中读取最少字节数到内存中,示例代码如下:

import (
    "bufio"
    "io"
    "os"
)
 
func check(e error) {
    if e != nil {
        panic(e)
    }
}
 
// 首先创建一个文件,并向其中写入内容
d1 := []byte("hello\nworld\n")
err := os.WriteFile("/tmp/f1", d1, 0644)
 
dat, err := os.ReadFile("/tmp/f1")
check(err)
print(string(dat))
 
f, err := os.Open("/tmp/f1")
check(err)
 
// 偏移6个字节
o3, err := f.Seek(6, 0)
check(err)
b3 := make([]byte, 2)
n3, err := io.ReadAtLeast(f, b3, 2)
check(err)
printf("%d bytes @ %d: %s\n", n3, o3, string(b3))

执行结果:

hello
world
2 bytes @ 6: wo

亲自试一试!

bufio.NewReader

bufio.NewReader 方法是一个缓冲读取器,该读取器对于少量数据的读取非常方便。示例代码如下:

import (
    "bufio"
    "io"
    "os"
)
 
func check(e error) {
    if e != nil {
        panic(e)
    }
}
 
// 首先创建一个文件,并向其中写入内容
d1 := []byte("hello\nworld\n")
err := os.WriteFile("/tmp/f1", d1, 0644)
 
dat, err := os.ReadFile("/tmp/f1")
check(err)
print(string(dat))
 
f, err := os.Open("/tmp/f1")
check(err)
 
r4 := bufio.NewReader(f)
b4, err := r4.Peek(5)
check(err)
printf("5 bytes: %s\n", string(b4))

执行结果:

hello
world
5 bytes: hello

亲自试一试!

写文件

os.WriteFile

首先,我们来看如何将字节数组写入文件,示例代码如下:

import (
    "bufio"
    "os"
)
func check(e error) {
    if e != nil {
        panic(e)
    }
}
 
d1 := []byte("hello\nworld\n")
err := os.WriteFile("/tmp/f1", d1, 0644)
check(err)

执行完毕后,没有触发 panic,说明程序执行成功啦。但是不够直观,我们把文件内容读一下再打印出来,进而佐证我们的推断,示例代码:

import (
    "bufio"
    "os"
)
func check(e error) {
    if e != nil {
        panic(e)
    }
}
 
d1 := []byte("hello\nworld\n")
err := os.WriteFile("/tmp/f1", d1, 0644)
check(err)
 
dat, err := os.ReadFile("/tmp/f1")
check(err)
print(string(dat))

执行结果:

hello
world

从执行结果可以知道我们的推断是正确的,程序没有问题。

亲自试一试!

File.Write

写文件还有一种思路,就是首先创建或者打开一个文件,再向其中写入内容信息,示例代码如下:

import (
    "bufio"
    "os"
)
func check(e error) {
    if e != nil {
        panic(e)
    }
}
 
f, err := os.Create("/tmp/f2")
check(err)
 
// 打开文件后,defer 关闭文件属于常规做法
defer f.Close()
 
d2 := []byte{1, 222, 66, 88, 10, 102}
n2, err := f.Write(d2)
check(err)
printf("wrote %d bytes\n", n2)
 
n3, err := f.WriteString("gop is go+\n")
check(err)
printf("wrote %d bytes\n", n3)
 
// 保证文件内容存入磁盘
f.Sync()

执行结果:

wrote 6 bytes
wrote 11 bytes

亲自试一试!

bufio.WriteString

bufio 包也提供了缓冲写卡器,可以用来写文件,示例代码如下:

import (
    "bufio"
    "os"
)
func check(e error) {
    if e != nil {
        panic(e)
    }
}
 
f, err := os.Create("/tmp/f1")
check(err)
 
// 打开文件后,defer 关闭文件属于常规做法
defer f.Close()
 
w := bufio.NewWriter(f)
n4, err := w.WriteString("use bufio package write data\n")
check(err)
printf("wrote %d bytes\n", n4)
 
// 保证缓存数据生效
w.Flush()

执行结果:

wrote 29 bytes

亲自试一试!
 

 

“我的Go+语言初体验” | 征文活动进行中......

...全文
1659 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
ζ小菜鸡 社区贡献者 2021-12-14
  • 打赏
  • 举报
回复

学习到了

Unity游戏开发框架系统是一个基于模块化架构和插件化设计的综合性游戏开发框架,专为Unity引擎环境下的游戏项目提供高效、可扩展的解决方案。该系统集成了资源加载、配置管理、数据加载、UI管理、日志管理、动画系统和特效系统等核心功能模块,旨在简化游戏开发流程,提升开发效率和代码质量。 在技术实现上,Unity游戏开发框架系统采用C#作为主要编程语言,结合Unity引擎的强大功能,实现了高性能的游戏逻辑处理。系统集成了uLua技术,支持热更新功能,使游戏能够在运行时动态加载和更新脚本,大大缩短了迭代周期。同时,系统通过TCP协议实现了网络通信模块,支持多人在线游戏的开发需求。在持续集成方面,系统与Jenkins工具集成,实现了自动化构建和部署流程,确保了项目的稳定性和可维护性。 架构设计上,Unity游戏开发框架系统采用了模块化架构、插件化架构和分层架构相结合的方式。模块化架构使得各个功能模块(如资源加载、UI管理等)能够独立开发和测试,降低了系统的耦合度。插件化架构允许开发者根据需要灵活添加或移除功能模块,增强了系统的可扩展性。分层架构则将系统分为表现层、业务逻辑层和数据访问层,提高了代码的可读性和可维护性。此外,系统广泛应用了单例模式、工厂模式和观察者模式等设计模式,确保了代码的复用性和系统的稳定性。 Unity游戏开发框架系统适用于多种游戏开发场景,包括但不限于角色扮演游戏(RPG)、动作游戏、策略游戏和休闲游戏等。无论是独立开发者还是大型游戏团队,都可以利用该系统快速搭建游戏原型,实现复杂的游戏功能。系统特别适合作为毕业设计项目,因为它涵盖了软件工程的核心概念,如架构设计、模块化开发和设计模式应用,能够帮助学生深入理解游戏开发的全流程。 作为毕 【版权说明】源码来源于网络,遵循原项目开源协议。付费内容为本人原创论文,包含技术分析和实现思路。仅供学习交流使用

1,091

社区成员

发帖
与我相关
我的任务
社区描述
Go+ 官方开发者社区。我们希望向广大的开发者和数据科学家介绍 Go+ 的定位和意义,并邀请更多开发者一起贡献代码、共建 Go+ 生态。 Go+ 官网:https://goplus.org/
其他 企业社区
社区管理员
  • Go+
  • 杨东杰
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

本社区为 Go+ 官方开发者社区。我们希望向广大的开发者和数据科学家介绍 Go+ 的定位和意义,并邀请更多开发者一起贡献代码、共建 Go+ 生态。

Go+ 官网:https://goplus.org/
GitHub地址:https://github.com/goplus/gop

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