脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|shell|

服务器之家 - 脚本之家 - Golang - Go语言中常见的文件操作分享

Go语言中常见的文件操作分享

2023-02-01 16:19孙琦Ray Golang

文件操作应该是应用程序里非常常见的一种操作,无论是哪种应用场景,几乎都离不开文件的基本操作。Go语言中提供了三个不同的包去处理文件,下午就来说说它们的具体使用

常用包

文件操作应该是应用程序里非常常见的一种操作,无论是哪种应用场景,几乎都离不开文件的基本操作。Go语言中提供了三个不同的包去处理文件

os

os包提供了处理文件的API接口,遵循Unix标准,平台无关,所有操作系统都可以使用。错误处理上是Go语言独有的,失败时,返回的是错误类型而非系统错误编号,对于调试很有帮助。os包中提供了创建、删除、打开、修改权限等功能。

与I/O操作相关包

io

  • I/O原语接口
  • 包装到了公共接口中,该接口抽象了功能

ioutil

I/O实用功能,从Go 1.6开始,可以直接通过io后os包访问相同的功能

bufio

  • 文件的缓冲I/O提供接口
  • 缓冲区实际是内存中的临时空间,用于存储数据并在该空间执行临时I/O操作,减少系统调用及磁盘I/O,适用于数据块传输场景,不适用于单个字符的I/O操作
  • 默认的操作都是无缓冲的

常用文件/目录操作

路径拼接

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package main
 
import (
    "fmt"
    "path"
)
 
func JoinPath() {
    dirs := []string{"/", "home", "ray", "workspace"}
    path := path.Join(dirs...)
    fmt.Printf("Path after join: %v\n", path)
}
 
func main() {
    JoinPath()
}

输出信息为

Path after join: /home/ray/workspace

更多功能请参考:https://pkg.go.dev/path/filepath#pkg-functions

创建文件(touch)

改代码执行后将生成一个为空的sample.txt文件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package main
 
import (
    "log"
    "os"
)
 
func CreateEmptyFile() {
    myFile, err := os.Create("sample.txt")
    if err != nil {
        log.Fatal("ERROR! ", err)
    }
    log.Println("Empty file created successfully. ", myFile)
    myFile.Close()
}
 
func main() {
    CreateEmptyFile()
}

获取文件信息

这里主要使用os.Stat函数

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package main
 
import (
    "fmt"
    "log"
    "os"
)
 
func FileInfo() {
    fileInfo, err := os.Stat("sample.txt")
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println("File Name:", fileInfo.Name())
    fmt.Println("Size ", fileInfo.Size(), " bytes")
    fmt.Println("Permissions:", fileInfo.Mode())
    fmt.Println("Last modified:", fileInfo.ModTime())
    fmt.Println("Is Directory: ", fileInfo.IsDir())
}
 
func main() {
    FileInfo()
}

读取文件内容

和其他语言类似,读取文件主要使用Open, Read等函数,文件处理最底层是基于原始字节的,在这个抽象之上,可以进一步构建更方便的接口。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package main
 
import (
    "log"
    "os"
)
 
func FileRead(filePath string) {
    oFile, err := os.Open(filePath)
    if err != nil {
        log.Fatal(err)
    }
    defer oFile.Close()
    buff := make([]byte, 100)
    for no, err := oFile.Read(buff); err == nil; no, err = oFile.Read(buff) {
        if no > 0 {
            os.Stdout.Write(buff[0:no])
        }
    }
}
 
func main() {
    FileRead("sample.txt")
}

写入文件内容

我们尝试使用一个文件拷贝的样例,来学习写入的方式,这里除了刚才使用的os包,还是用了io包,最终将显示一共拷贝了多少字节

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package main
 
import (
    "log"
    "io"
    "os"
)
 
func Copy(src, dest string) {
 
    srcFile, err := os.Open(src)
    if err != nil {
        log.Fatal(err)
    }
    defer srcFile.Close()
 
    destFile, err := os.Create(dest)
    if err != nil {
        log.Fatal(err)
    }
    defer destFile.Close()
 
    numBytes, err := io.Copy(destFile, srcFile)
    if err != nil {
        log.Fatal(err)
    }
    log.Printf("Successfully copied %d bytes", numBytes)
    err = destFile.Sync()
    if err != nil {
        log.Fatal(err)
    }
}
 
func main() {
    Copy("source.txt", "dest.txt")
}

到此这篇关于Go语言中常见的文件操作分享的文章就介绍到这了,更多相关Go语言文件操作内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/xiaoquqi/article/details/128791518

延伸 · 阅读

精彩推荐
  • GolangGo使用协程交替打印字符

    Go使用协程交替打印字符

    这篇文章主要介绍了Go使用协程交替打印字符,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    布史8182021-06-09
  • GolangGO语言标准错误处理机制error用法实例

    GO语言标准错误处理机制error用法实例

    这篇文章主要介绍了GO语言标准错误处理机制error用法,实例分析了错误处理机制的具体用法,具有一定的参考借鉴价值,需要的朋友可以参考下...

    shichen20147102020-04-11
  • Golang基于微服务框架go-micro开发gRPC应用程序

    基于微服务框架go-micro开发gRPC应用程序

    这篇文章介绍了基于微服务框架go-micro开发gRPC应用程序的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的...

    波斯马8252022-07-04
  • GolangKotlin编程基础语法编码规范

    Kotlin编程基础语法编码规范

    这篇文章主要为大家介绍了Kotlin编程条件控制示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...

    南巷羽5002022-08-20
  • GolangGo语言学习之指针的用法详解

    Go语言学习之指针的用法详解

    这篇文章主要为大家详细介绍了Go语言中指针的用法,文中的示例代码讲解详细,对我们学习Go语言有一定的帮助,需要的可以参考一下...

    隐姓埋名48697252022-09-27
  • Golanggo获取协程(goroutine)号的实例

    go获取协程(goroutine)号的实例

    这篇文章主要介绍了go获取协程(goroutine)号的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    逆月林9462021-03-02
  • Golanggo语言实现字符串base64编码的方法

    go语言实现字符串base64编码的方法

    这篇文章主要介绍了go语言实现字符串base64编码的方法,实例分析了Go语言操作字符串的技巧及base64编码的使用技巧,需要的朋友可以参考下 ...

    令狐不聪5302020-04-24
  • Golangzap接收gin框架默认的日志并配置日志归档示例

    zap接收gin框架默认的日志并配置日志归档示例

    本文介绍了在基于gin框架开发的项目中如何配置并使用zap来接收并记录gin框架默认的日志和如何配置日志归档。有需要的朋友可以借鉴参考下,希望能够有...

    Jeff的技术栈11842022-09-21