Go to Learn Go之Gob

简介: Go to Learn Go之Gob

概述

在上一节的内容中,我们介绍了Go的反射,包括:reflect.TypeOf、reflect.ValueOf、reflect.Value等。在本节中,我们将介绍Go的文件操作。在Go语言中,文件是一个抽象的概念,表示的是一段连续的字节序列。文件操作主要包括:文件的创建、读取、写入、删除,以及目录的创建、删除、文件遍历等。Go语言提供了许多内置的函数和包,使得文件操作变得非常简单和高效。

读取文件

要读取文件,需要先打开文件。打开文件可以使用os.Open()函数,该函数返回一个*os.File类型的文件对象,表示已经打开的文件。要读取一个文件的内容,可以使用os包或bufio包提供的函数。

在下面的示例代码中,我们首先使用os.Open()函数打开了文件test.txt。然后,我们使用bufio.NewScanner函数创建了一个Scanner对象scanner,并逐行读取文件。如果文件读取时发生了错误,可通过scanner.Err()函数获取错误信息。

package main

import "os"
import "fmt"
import "bufio"

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

    defer file.Close()

    // 逐行读取文件
    scanner := bufio.NewScanner(file)
    for scanner.Scan() {
        line := scanner.Text()
        // 处理每一行数据
        fmt.Println("line data: ", line)
    }

    if err := scanner.Err(); err != nil {
        // 处理读取错误
        fmt.Println("Read failed: ", err)
    }
}

写入文件

要写入文件,可以使用os包提供的Create()函数创建一个新文件,并使用Write()函数或WriteString()函数写入数据。

在下面的示例代码中,我们首先使用os.Create()函数创建了文件test.txt。然后,我们使用WriteString()函数写入了字符串"Hello, World"。最后,我们通过defer语句关闭了文件,释放了系统资源。

package main

import "os"
import "fmt"

func main() {
    // 创建文件
    file, err := os.Create("test.txt")
    if err != nil {
        fmt.Println("Create failed: ", err)
        return
    }

    defer file.Close()

    text := "Hello, World"
    // 向文件中写入字符串
    _, err = file.WriteString(text)
    if err != nil {
        fmt.Println("Write failed: ", err)
    }
}

在进行文件读写操作时,需要注意以下几点:

1、打开文件后,一定要记得关闭文件,以释放资源,可以使用defer语句来确保在函数结束时关闭文件。

2、在读取或写入文件时,需要检查是否有错误发生,并进行适当的错误处理。

删除文件

要删除一个文件,可以使用os.Remove()函数。

package main

import "os"
import "fmt"

func main() {
    err := os.Remove("test.txt")  
    if err != nil {
        fmt.Println("Remove failed:", err)
    } else {
        fmt.Println("Remove success")
    }
}

目录操作

目录的操作包括:创建目录、删除目录、判断目录是否存在等。

在下面的示例代码中,我们首先使用os.Mkdir()函数创建了一个名为test的新目录。第一个参数是目录的路径,第二个参数是目录的权限模式(0755表示拥有者具有读、写和执行权限,而组和其他用户具有读和执行权限)。接下来,我们通过os.Stat()函数判断目录是否存在。如果存在,则调用os.Remove()函数删除刚刚创建的目录。

package main

import "os"
import "fmt"

func main() {
    // 创建目录
    err := os.Mkdir("test", 0755)
    if err != nil {
        fmt.Println("Mkdir failed:", err)
        return
    } else {
        fmt.Println("Mkdir success")
    }

    // 判断目录是否存在
    _ , err2 := os.Stat("test")
    if err2 == nil {
        // 删除目录
        err = os.Remove("test")
        if err != nil {
            fmt.Println("Remove failed:", err)
        } else {
            fmt.Println("Remove success")
        }
    } else {
        fmt.Println("Path not exist")
    }
}

遍历目录下文件

在Go语言中,可以使用os包中的Readdir函数来读取目录的内容。Readdir函数返回一个[]os.DirEntry类型的切片,其中包含了目录中所有文件和子目录的信息。

在下面的示例代码中,我们使用os.Open函数打开名为doc的目录,并使用Readdir函数列出其中的所有文件。然后,通过遍历files切片,可以打印出每个文件的名称。注意:在使用Readdir函数时,传入-1作为参数将返回所有的文件,包括隐藏文件。

package main

import "os"
import "fmt"

func main() {
    // 打开目录
    dir, err := os.Open("doc")
    if err != nil {
        fmt.Println("Open failed:", err)
        return
    }

    defer dir.Close()

    // 读取目录
    files, err := dir.Readdir(-1)
    if err != nil {
        fmt.Println("Readdir failed:", err)
    } else {
        // 遍历目录下文件
        for _, file := range files {
            fmt.Println(file.Name())
        }
    }
}
相关文章
|
3月前
|
Go
Go to Learn Go之命令行参数
Go to Learn Go之命令行参数
36 8
|
3月前
|
Serverless Go
Go to Learn Go之时间日期
Go to Learn Go之时间日期
45 8
|
3月前
|
Go
Go to Learn Go之文件操作
Go to Learn Go之文件操作
31 8
|
3月前
|
Go
Go to Learn Go之反射
Go to Learn Go之反射
44 8
|
3月前
|
存储 安全 Go
Go to Learn Go之并发
Go to Learn Go之并发
32 8
|
3月前
|
存储 Go
Go to Learn Go之类型转换
Go to Learn Go之类型转换
45 7
|
Go
golang - gob与rpc
  今天和大家聊聊golang中怎么使用rpc,rpc数据传输会涉及到gob编码,所以先讲讲gob,别担心,就算你完全没有接触过gob与rpc,只要知道rpc的中文是远程过程调用,剩下的我都能给你讲明白(带你入门不包你精通)! 一、数据结构编码之gob   gob全称为:Go binary   Golang自带的一个数据结构序列化编码/解码工具,也就是说gob可以讲go中的一个数据结构序列化成某种东西,还能反序列化!序列化成啥我们后面来看,不管是变成一个字符串,变成二进制流,变成啥先不管,反正作用就是序列化。
2102 0
|
13天前
|
存储 Go 索引
go语言中数组和切片
go语言中数组和切片
25 7
|
12天前
|
Go 开发工具
百炼-千问模型通过openai接口构建assistant 等 go语言
由于阿里百炼平台通义千问大模型没有完善的go语言兼容openapi示例,并且官方答复assistant是不兼容openapi sdk的。 实际使用中发现是能够支持的,所以自己写了一个demo test示例,给大家做一个参考。
|
13天前
|
程序员 Go
go语言中结构体(Struct)
go语言中结构体(Struct)
88 71