【GO】文件读写:打开关闭+打开模式+文件权限+文件读取

简介: 【GO】文件读写:打开关闭+打开模式+文件权限+文件读取

屏幕快照 2022-05-18 下午8.19.30.png

package main
import (
  "fmt"
  "os"
  "time"
)
func main() {
  file, e := os.Open("D:/kaka.txt")
  if e != nil {
    fmt.Println("文件打开失败")
  } else {
    fmt.Println("文件打开成功")
  }
  defer func() {
    file.Close()
    fmt.Println("文件已关闭")
  }()
  fmt.Println("愉快滴欣赏avi艺术")
  time.Sleep(3 * time.Second)
}

注意点


在os.open时,如果你的操作系统时windows这个时候不要打开文件直接复制文件路径,会报一个文件目录的错误


The filename, directory name, or volume label syntax is incorrect.


在打开文件的路径必须自己手动输入,因为编码有问题


打开文件也必须关闭文件,所以在任何时候打开一个文件操作后使用延迟执行的defer来进行关闭文件


defer是延迟执行的关键词,在所有程序都执行完才会执行的代码


文件打开模式


  • 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_TRUNC int = syscall.O_TRUNC // 覆盖模式


文件权限


权限详解有什么问题可以看这篇文章,详细的说明了权限的问题。

这里简单的说一下 r w x 分别代表的是什么意思

r表示可读

w表示可写

x表示可执行


任何文件都有使用者,群组,other的概念。 权限所代表的是r = 4 w = 2 x = 1 这块的知识是在linux写过的,就不在继续讨论了。


文件读取

屏幕快照 2022-05-18 下午8.20.20.png

image.png

func main() {
  file, e := os.OpenFile("D:/kaka.txt", os.O_RDONLY, 0666)
  if e != nil {
    fmt.Println("文件打开失败:err", e)
    return
  } else {
    fmt.Println("文件打开成功")
  }
  // 打开时立刻挂起关闭程序
  defer func() {
    file.Close()
    fmt.Println("文件关闭成功")
  }()
  // 创建文件的读取器
  reader := bufio.NewReader(file)
  // 死循环读取
  for {
    // 以换行符为界,分批次读取数据,得到readString
    readString, e := reader.ReadString('\n')
    if e != nil {
      fmt.Println("文件读取失败;err", e)
      // 如果已到文件末尾,则直接结束
      if e == io.EOF {
        break
      }
    }
    fmt.Print(readString)
  }
  fmt.Println("读取结束")
}

屏幕快照 2022-05-18 下午8.20.49.png

func main() {
  bytes, err := ioutil.ReadFile("d:/kaka.txt")
  if err != nil {
    fmt.Println("读取失败,err=", err)
    return
  } else {
    contentStr := string(bytes)
    fmt.Println(contentStr)
  }
}
相关文章
|
2月前
|
Go API
一文搞懂Go读写Excel文件
一文搞懂Go读写Excel文件
52 0
|
3月前
|
安全 Go
Go语言并发新特性:单向通道的读写控制
Go语言并发新特性:单向通道的读写控制
42 0
|
5月前
|
Go 区块链
go 编译 自定义 图标 ico文件
go 编译 自定义 图标 ico文件
40 0
|
6月前
|
存储 Go
Go 语言开源项目使用的函数选项模式
Go 语言开源项目使用的函数选项模式
34 0
|
3月前
|
物联网 Go 网络性能优化
使用Go语言(Golang)可以实现MQTT协议的点对点(P2P)消息发送。MQTT协议本身支持多种消息收发模式
使用Go语言(Golang)可以实现MQTT协议的点对点(P2P)消息发送。MQTT协议本身支持多种消息收发模式【1月更文挑战第21天】【1月更文挑战第104篇】
100 1
|
23天前
|
存储 测试技术 Go
掌握Go语言:深入探究Go语言中的命令源码文件与参数处理技巧(3)
掌握Go语言:深入探究Go语言中的命令源码文件与参数处理技巧(3)
|
2月前
|
消息中间件 Go
Go语言高级并发编程技术:深入探索同步原语与复杂并发模式
【2月更文挑战第6天】在Go语言中,除了基础的goroutine和channel之外,还提供了丰富的同步原语和高级并发模式。本文将深入探讨Go语言中的sync包、atomic包以及更复杂的并发模式,如管道、消息队列和生产者消费者模型。通过理解这些高级并发编程技术,我们可以更好地构建高性能、可扩展的并发系统。
|
2月前
|
Shell Go
go 编辑yaml 文件
在Go语言中编辑YAML文件通常涉及以下步骤: 1. 读取YAML文件内容到字符串。 2. 使用YAML解析库(如`gopkg.in/yaml.v2`)将字符串解析为Go数据结构(如`map[string]interface{}`或自定义的结构体)。 3. 修改数据结构中的值以更新YAML内容。 4. 将修改后的数据结构编码回YAML格式的字符串。 5. 将字符串写回到YAML文件。 以下是一个简单的例子,展示了如何使用`gopkg.in/yaml.v2`库来编辑YAML文件: 首先,确保你已经安装了`gopkg.in/yaml.v2`包: ```bash go get gopkg.i
|
6月前
|
设计模式 Go
Go语言事件系统设计解析:发布-订阅模式实战
Go语言事件系统设计解析:发布-订阅模式实战
170 0
|
3月前
|
JSON 缓存 JavaScript
Go语言依赖管理的核心 - go.mod文件解析
Go语言依赖管理的核心 - go.mod文件解析
79 0