Go基础08:文件操作、命令行参数和JSON处理

本文介绍了Go语言中的文件操作,包括文件的打开、关闭、读写及应用实例,同时也讲解了如何处理命令行参数。此外,文章详细阐述了JSON序列化和反序列化,提供结构体标签定制key的示例。
摘要由CSDN通过智能技术生成

概述

文件,对我们并不陌生,文件是数据源(保存数据的地方)的一种,比如大家经常使用的 word 文档,txt 文件,excel 文件…都是文件。文件最主要的作用就是保存数据,它既可以保存一张图片,也可以保持视频,声音…

输入流和输出流

文件在程序中是以流的形式来操作的。

  • 流:数据在数据源(文件)和程序(内存)之间经历的路径。
  • 输入流:数据从数据源(文件)到程序(内存)的路径。
  • 输出流:数据从程序(内存)到数据源(文件)的路径。

File 结构体

os.File 封装所有文件相关操作,File 是一个结构体。File 代表一个打开的文件对象。

type File struct {
   
    // 内含隐藏或非导出字段
}

打开文件

func Open(name string) (file *File, err error)

Open打开一个文件用于读取。如果操作成功,返回的文件对象的方法可用于读取数据;对应的文件描述符具有O_RDONLY模式。如果出错,错误底层类型是*PathError。

关闭文件

func (f *File) Close() error

Close关闭文件f,使文件不能用于读写。它返回可能出现的错误。

读取文件

方式一:使用带缓冲区的方式

相关方法和函数:os.Open(),file.Close(),bufio.NewReader(),reader.ReadString()

package main

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

func main() {
   
	// 打开文件
	file, err := os.Open("D:/test.txt")
	if err != nil {
   
		fmt.Println("打开文件失败,err=", err)
		return
	}

	// 当函数退出时,要及时的关闭 file 句柄,否则会有内存泄漏
	defer file.Close()

	// 创建一个 *Reader 是带缓冲的
	reader := bufio.NewReader(file)

	// 循环的读取文件的内容
	for {
   
		// 读到一个换行就结束
		str, err := reader.ReadSlice('\n')

		// 输出内容
		fmt.Print(string(str))

		// io.EOF 表示文件的末尾
		if err == io.EOF {
   
			break
		}
	}

	fmt.Println("文件读取结束")
}

方式二:使用一次性读取的方式(这种方式适用于文件不大的情况)

相关方法和函数:ioutil.ReadFile()

package main

import (
	"fmt"
	"io/ioutil"
)

func main() {
   
	// 这里没有显式的Open文件,因此也不需要显示的Close文件
	// 因为文件的Open和Close被封装到 ReadFile 函数内部
	content, err := ioutil.ReadFile("D:/test.txt")
	if err != nil {
   
		fmt.Println("打开文件失败,err=", err)
		return
	}

	fmt.Println(string(content))
}

写入文件

func OpenFile(name string, flag int, perm FileMode) (file *File, err error)

OpenFile是一个更一般性的文件打开函数,大多数调用者都应用Open或Create代替本函数。它会使用指定的选项(如O_RDONLY等)、指定的模式(如0666等)打开指定名称的文件。如果操作成功,返回的文件对象可用于I/O。如果出错,错误底层类型是*PathError。

第二个参数:文件打开模式(可以组合)

const (
	O_RDONLY int = syscall.O_RDONLY // 只读模式打开文件
	O_WRONLY int = syscall.O_WRONLY // 只写模式打开文件
	O_RDWR   int = syscall.O_RDWR   // 读写模式打开文件
	O_APPEND int = syscall.O_APPEND // 写操作时将数据附加到文件尾部
	O_CREATE int = syscall.O_CREAT  // 如果不存在将创建一个新文件
	O_EXCL   int = syscall.O_EXCL   // 和O_CREATE配合使用,文件必须不存在
	O_SYNC   int = syscall.O_SYNC   // 打开文件用于同步I/O
	O_TRUNC  int = syscall.O_TRUNC  // 如果可能,打开时清空文件
)

应用实例:创建一个新文件,写入内容 5 句 "hello,world!"

package main

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

func main() {
   
	filePath := "D:/abc.txt"
    // os.O_CREATE 如果不存在将创建一个新文件
	file, err := os.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值