一文搞懂Golang文件操作增删改查功能(基础篇)

前言

目前,Golang 可以认为是服务器开发语言发展的趋势之一,特别是在流媒体服务器开发中,已经占有一席之地。很多音视频技术服务提供商也大多使用 Golang 语言去做自己的后台服务开发,业内貌似已经达成了某种共识。今天我们不聊特别深奥的机制和内容,就来聊一聊 Golang 对于文件的基本操作。

正文

开始之前,讲一个非常有意思的小桥段。最开始接触 Golang 这种语言的时候,我总感觉它和 Google 单词比较像,所以一度怀疑二者有什么联系。后来一查才发现,二者确实有联系,晕… …因为 Golang 语言就是 Google 公司推出的。这种推广模式,让我想起了“旺仔牛奶”和“旺子牛奶”。

好了,言归正传,说到文件操作,应该是任何一种语言的基本操作了。那么,Golang 是如何操作文件的呢?

使用 Golang 操作文件时,我们可以理解成对数据库的基础操作——增、删、改、查,它们分别对应创建文件、删除文件、修改文件内容、查询文件内容和信息。

今天我们介绍的主要内容,根据下面的流程图进行展开。

接下来,我们就分别从这四个维度介绍 Golang 是如何操作文件的。

创建文件

首先,我们来创建一个文件 test.txt。在 Golang 中,我们可以使用 os 包来完成文件的创建,其中有专门的文件创建方法——Create()。注意,我们需要提前导入依赖包,具体使用方式可以参考下面的代码。

代码实例:

package main

import (
	"fmt"
	"os"
)
func main() {
   	fmt.Println("开始创建一个文本文件test.txt")
	if _, err := os.Create("test.txt"); err == nil {
		fmt.Println("文件创建成功。。。")
	} else {
		fmt.Println("文件创建失败。。。")
	}
}

代码执行结果如下:

开始创建一个文本文件test.txt
文件创建成功。。。

通过结果,我们可以看到,我们已经成功创建了一个名为 test.txt 的文本文件。是不是非常简单?好,那我们看下一步。

修改文件

接下来,我们在上边的代码基础上继续完善,实现对文件的修改。我们知道新创建的 test.txt 的文本文件的内容肯定是空的,里边什么信息都没有,我们现在写一些内容进去。

其实,写入内容到文件中也非常简单。通过我们创建文件时,返回的 File 对象,我们可以利用它自带的 Write() 方法把需要的内容写入到文件中。下面一样,我们通过一段代码来了解这个过程。

代码实例:

package main

import (
	"fmt"
	"os"
)
func main() {
   	fmt.Println("开始创建一个文本文件test.txt")
	if f, err := os.Create("test.txt"); err == nil {
		fmt.Println("文件创建成功。。。")
		// 将要写入文本的内容
		_, err=f.Write([]byte("大家好,我是刘振,CSDN博客专家,音视频领域研发博主,主页地址:https://liuzhen.blog.csdn.net/,欢迎骚扰!!!"))
		if err == nil {
			fmt.Println("文件写入内容成功。。。")
		}
	} else {
		fmt.Println("文件创建失败!")
	}
}

代码执行结果:

开始创建一个文本文件test.txt
文件创建成功。。。
文件写入内容成功。。。

通过执行结果,我们知道我们把相应的信息(大家好,我是刘振,CSDN博客专家,音视频领域研发博主,主页地址:https://liuzhen.blog.csdn.net/,欢迎骚扰!!!)写入到 test.txt 文件中了。但是我们还是怀疑文件 test.txt 中的信息是不是真的就是我们想要的内容。(鲁迅曾经说过:程序员还是严谨一些比较好,不然实际工作中会吃亏的

查询文件

上面的执行结果是说明相应的内容写入到了文件中,但是不够直观。接下来,我们查询一下文件的内容,进一步确认文件中写入了相应的内容。

这个过程也属于常规操作,但是我们需要用到一个工具包——io/ioutil,这是一个和文件读写相关的工具集,当我们操作文件时非常推荐使用它。今天,我们就熟悉一下它的使用。读取文件内容的话,我们主要使用它的 ReadFile() 方法。下面我们通过代码了解一下吧。

代码实例:

package main

import (
	"fmt"
	"os"
	"io/ioutil"
)
func main() {
   	fmt.Println("开始创建一个文本文件test.txt")
	if f, err := os.Create("test.txt"); err == nil {
		fmt.Println("文件创建成功。。。")
		// 将要写入文本的内容
		_, err=f.Write([]byte("大家好,我是刘振,CSDN博客专家,音视频领域研发博主,主页地址:https://liuzhen.blog.csdn.net/,欢迎骚扰!!!"))
		if err == nil {
			fmt.Println("文件写入内容成功。。。")
		}
		bytes, err := ioutil.ReadFile("test.txt")
        if err == nil {
			fmt.Println("test.txt文件的内容:",string(bytes))
		} else {
			fmt.Println(err)
		}
	} else {
		fmt.Println("文件创建失败!")
	}
}

代码执行结果:

开始创建一个文本文件test.txt
文件创建成功。。。
文件写入内容成功。。。
test.txt文件的内容: 大家好,我是刘振,CSDN博客专家,音视频领域研发博主,主页地址:https://liuzhen.blog.csdn.net/,欢迎骚扰!!!

结果证明,上一步确实修改了文件的内容,把我们想要的内容输入到了文本文件中。同时,通过上面的代码也实现了查询文件内容的功能。

其实,我们除了查看文件包含的内容外,还可以查看文件的一些基本信息,比如名称、大小、创建时间等。下面来看看我们都可以获取哪些文件基本信息吧。

上代码:

package main

import (
	"fmt"
	"os"
	"io/ioutil"
)
func main() {
   	fmt.Println("开始创建一个文本文件test.txt")
	if f, err := os.Create("test.txt"); err == nil {
		fmt.Println("文件创建成功。。。")
		// 将要写入文本的内容
		_, err=f.Write([]byte("大家好,我是刘振,CSDN博客专家,音视频领域研发博主,主页地址:https://liuzhen.blog.csdn.net/,欢迎骚扰!!!"))
		if err == nil {
			fmt.Println("文件写入内容成功。。。")
		}
		bytes, err := ioutil.ReadFile("test.txt")
        if err == nil {
			fmt.Println("test.txt文件的内容:",string(bytes))
		} else {
			fmt.Println(err)
		}
		// 查询文件基本信息
		fileinfo, err := os.Stat("test.txt")
		if err == nil {
			fmt.Println("文件名称:", fileinfo.Name())
			fmt.Println("文件大小:", fileinfo.Size())
			fmt.Println("文件权限:", fileinfo.Mode())
			fmt.Println("文件修改时间:", fileinfo.ModTime())
			fmt.Println("是否为文件夹:", fileinfo.IsDir())
		} else {
			fmt.Println("获取文件信息失败!")
		}
	} else {
		fmt.Println("文件创建失败!")
	}
}

代码执行结果:

开始创建一个文本文件test.txt
文件创建成功。。。
文件写入内容成功。。。
test.txt文件的内容: 大家好,我是刘振,CSDN博客专家,音视频领域研发博主,主页地址:https://liuzhen.blog.csdn.net/,欢迎骚扰!!!
文件名称: test.txt
文件大小: 145
文件权限: -rw-r--r--
文件修改时间: 2021-04-15 08:51:38.777811891 +0000 UTC
是否为文件夹: false

嗯,不错,新创建的 test.txt 文本文件大小是145字节,注意:修改时间返回的是0区时间,中国在东八区,还需要加8才是我们当地的时间。

目前为止,我们已经实现了对文件的“增”、“改”、“查”操作,接下来就看“删”操作吧。

删除文件

这个相对就简单多了,直接利用 os 包的 Remove() 方法,好了,看代码吧。

代码实例:

package main

import (
	"fmt"
	"os"
	"io/ioutil"
)
func main() {
   	fmt.Println("开始创建一个文本文件test.txt")
	if f, err := os.Create("test.txt"); err == nil {
		fmt.Println("文件创建成功。。。")
		// 将要写入文本的内容
		_, err=f.Write([]byte("大家好,我是刘振,CSDN博客专家,音视频领域研发博主,主页地址:https://liuzhen.blog.csdn.net/,欢迎骚扰!!!"))
		if err == nil {
			fmt.Println("文件写入内容成功。。。")
		}
		bytes, err := ioutil.ReadFile("test.txt")
        if err == nil {
			fmt.Println("test.txt文件的内容:",string(bytes))
		} else {
			fmt.Println(err)
		}
		err = os.Remove("test.txt")
		if err == nil {
			fmt.Println("文件删除成功。。。")
		} else {
			fmt.Println("文件删除失败!")
		}
	} else {
		fmt.Println("文件创建失败!")
	}
}

代码执行结果:

开始创建一个文本文件test.txt
文件创建成功。。。
文件写入内容成功。。。
test.txt文件的内容: 大家好,我是刘振,CSDN博客专家,音视频领域研发博主,主页地址:https://liuzhen.blog.csdn.net/,欢迎骚扰!!!
文件删除成功。。。

根据执行结果,我们确实把文本文件 test.txt 删除了。本着严谨的态度,我们不妨再进一步验证一下。增加文件是否存在的校验逻辑进去,看看代码执行结果。

好了,说干就干!

实例代码:

package main

import (
	"fmt"
	"os"
	"io/ioutil"
)
func main() {
   	fmt.Println("开始创建一个文本文件test.txt")
	if f, err := os.Create("test.txt"); err == nil {
		fmt.Println("文件创建成功。。。")
		// 将要写入文本的内容
		_, err=f.Write([]byte("大家好,我是刘振,CSDN博客专家,音视频领域研发博主,主页地址:https://liuzhen.blog.csdn.net/,欢迎骚扰!!!"))
		if err == nil {
			fmt.Println("文件写入内容成功。。。")
		}
		bytes, err := ioutil.ReadFile("test.txt")
        if err == nil {
			fmt.Println("test.txt文件的内容:",string(bytes))
		} else {
			fmt.Println(err)
		}
		err = os.Remove("test.txt")
		if err == nil {
			fmt.Println("文件删除成功。。。")
		} else {
			fmt.Println("文件删除失败!")
		}
		fileInfo, e := os.Stat("test.txt")
		if fileInfo != nil && e == nil {
			fmt.Println("我检查了,文件还存在")
		} else if os.IsNotExist(e) {
			fmt.Println("我检查了,文件确实删除了")
		}
	} else {
		fmt.Println("文件创建失败!")
	}
}

代码执行结果:

开始创建一个文本文件test.txt
文件创建成功。。。
文件写入内容成功。。。
test.txt文件的内容: 大家好,我是刘振,CSDN博客专家,音视频领域研发博主,主页地址:https://liuzhen.blog.csdn.net/,欢迎骚扰!!!
文件删除成功。。。
我检查了,文件确实删除了

嗯嗯,看到 “我检查了,文件确实删除了” 这里,我就放心了。想必,大家也都安心了。

结尾

不错,到目前为止,我们已经实现了 Golang 对文件的“增”、“删”、“改”、“查”,对文件的常规操作也基本掌握了。本人是一个流媒体服务器后端开发,吃饭的语言是C++、Go和Node.js,了解更多音视频和流媒体知识,欢迎关注我,谢谢。

到此这篇关于一文搞懂Golang文件操作增删改查功能(基础篇)的文章就介绍到这了,更多相关go增删改查内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Go语言文件操作的方法

    本文实例讲述了Go语言文件操作的方法.分享给大家供大家参考.具体如下: 关闭文件: 复制代码 代码如下: func (file *File) Close() os.Error {     if file == nil {         return os.EINVAL     }     e := syscall.Close(file.fd)     file.fd = -1 // so it can't be closed again     if e != 0 {         retu

  • java连接mongoDB并进行增删改查操作实例详解

    本文实例讲述了java连接mongoDB并进行增删改查操作.分享给大家供大家参考,具体如下: 1.安装 MongoDB JDBC驱动程序 在java中使用mongoDB之前,首先需要拥有java连接mongoDB的第三方驱动包(jar包) 1)maven项目可通过在pom.xml中添加依赖 <dependencies> <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-ja

  • Python+Django+MySQL实现基于Web版的增删改查的示例代码

    前言 本篇使用Python Web框架Django连接和操作MySQL数据库学生信息管理系统(SMS),主要包含对学生信息增删改查功能,旨在快速入门Python Web,少走弯路.效果演示在项目实战最后一节,文章结尾有整个项目的源码地址. 开发环境 开发工具:Pycharm 2020.1 开发语言:Python 3.8.0 Web框架:Django 3.0.6 数据库:MySQL5.7 操作系统:Windows 10 项目实战 1. 创建项目 File->New Project->Django

  • Django-Model数据库操作(增删改查、连表结构)详解

    一.数据库操作 1.创建model表 基本结构 from django.db import models class userinfo(models.Model): #如果没有models.AutoField,默认会创建一个id的自增列 name = models.CharField(max_length=30) email = models.EmailField() memo = models.TextField() 更多字段: 1.models.AutoField 自增列= int(11)

  • nodejs操作mongodb的增删改查功能实例

    本文实例讲述了nodejs操作mongodb的增删改查功能.分享给大家供大家参考,具体如下: 安装相关模块 如果使用这个的话,你需要先自己安装一下他需要的模块,在根目录输入 npm install mongodb --save 进行模块安装,安装成功以后就可以进行以下的步骤. 文件的引入 以下是我书写的相关代码,放到你可以引用的相关目录,本人放到了express的根目录 function Mongo(options) { this.settings = { url: 'mongodb://loc

  • Django中ORM表的创建和增删改查方法示例

    前言 Django作为重量级的Python web框架,在做项目时肯定少不了与数据库打交道,编程人员对数据库的语法简单的还行,但过多的数据库语句不是编程人员的重点对象.因此用ORM来操作数据库相当快捷.今天来介绍一下用ORM操作数据库. 一.创建Django项目 可以使用pycharme专业版直接快速创建.如果不是专业版也可以使用命令进行创建.下面列出命令行创建方式: django-admin startproject orm_test 这时会在当前目录创建文件夹名为orm_test,接下来进入

  • PHP操作MongoDB实现增删改查功能【附php7操作MongoDB方法】

    本文实例讲述了PHP操作MongoDB实现增删改查功能.分享给大家供大家参考,具体如下: MongoDB的PHP驱动提供了一些核心类来操作MongoDB,总的来说MongoDB命令行中有的功能,它都可以实现,而且参数的格式基本相似.PHP7以前的版本和PHP7之后的版本对MongoDB的操作有所不同,本文主要以PHP7以前版本为例讲解PHP对MongoDB的各种操作,最后再简单说明一下PHP7以后版本对MongoDB的操作. 一.数据插入 //insert() //参数1:一个数组或对象 //参

  • 一文搞懂Golang文件操作增删改查功能(基础篇)

    前言 目前,Golang 可以认为是服务器开发语言发展的趋势之一,特别是在流媒体服务器开发中,已经占有一席之地.很多音视频技术服务提供商也大多使用 Golang 语言去做自己的后台服务开发,业内貌似已经达成了某种共识.今天我们不聊特别深奥的机制和内容,就来聊一聊 Golang 对于文件的基本操作. 正文 开始之前,讲一个非常有意思的小桥段.最开始接触 Golang 这种语言的时候,我总感觉它和 Google 单词比较像,所以一度怀疑二者有什么联系.后来一查才发现,二者确实有联系,晕- -因为 G

  • 一文搞懂Golang中iota的用法和原理

    目录 前言 iota的使用 iota在const关键字出现时将被重置为0 按行计数 所有注释行和空行全部忽略 跳值占位 多个iota 一行多个iota 首行插队 中间插队 没有表达式的常量定义复用上一行的表达式 实现原理 iota定义 const 前言 我们知道iota是go语言的常量计数器,只能在常量的const表达式中使用,在const关键字出现的时将被重置为0,const中每新增一行常量声明iota值自增1(iota可以理解为const语句块中的行索引),使用iota可以简化常量的定义,但

  • 一文搞懂Go语言操作Redis的方法

    目录 前言 安装依赖包 连接redis redis连接池 总结 前言 Redis是一个开源的内存数据库,在项目开发中redis的使用也比较频繁,本文介绍了Go语言中go-redis库的基本使用.感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助. 安装依赖包 Go语言中使用第三方库go-redis go-redis支持连接哨兵及集群模式的Redis. 使用以下命令下载并安装: go get -u github.com/go-redis/redis/v8 连接redis 新建go文件,在项目中引入

  • 一文搞懂Golang中的内存逃逸

    目录 前言 什么是内存逃逸 查看对象是否发生逃逸 内存逃逸分析的意义 怎么避免内存逃逸 小结 前言 我们都知道go语言中内存管理工作都是由Go在底层完成的,这样我们可以不用过多的关注底层的内存问题,有更多的精力去关注业务逻辑, 但掌握内存的管理,理解内存分配机制,可以让你写出更高效的代码,本文主要总结一下 Golang内存逃逸分析,需要的朋友可以参考以下内容,希望对大家有帮助. 什么是内存逃逸 在了解什么是内存逃逸之前,我们先来了解两个概念,栈内存和堆内存. 堆内存(Heap):一般来讲是人为手

  • java使用DOM4J对XML文件进行增删改查操作

    本文实例为大家分享了java使用DOM4J对XML文件进行增删改查操作的具体代码,供大家参考,具体内容如下 源代码: DOM4j.java package com.zc.homeWork19; import java.io.FileWriter; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.dom4j.Document; import org.dom4j.Elem

  • 一文搞懂Python中pandas透视表pivot_table功能详解

    目录 一.概述 1.1 什么是透视表? 1.2 为什么要使用pivot_table? 二.如何使用pivot_table 2.1 读取数据 2.2Index 2.3Values 2.4Aggfunc 2.5Columns 一文看懂pandas的透视表pivot_table 一.概述 1.1 什么是透视表? 透视表是一种可以对数据动态排布并且分类汇总的表格格式.或许大多数人都在Excel使用过数据透视表,也体会到它的强大功能,而在pandas中它被称作pivot_table. 1.2 为什么要使用

  • 一文搞懂Python中pandas透视表pivot_table功能

    目录 一.概述 1.1 什么是透视表? 1.2 为什么要使用pivot_table? 二.如何使用pivot_table 2.1 读取数据 2.2Index 2.3Values 2.4Aggfunc 2.5Columns 一文看懂pandas的透视表pivot_table 一.概述 1.1 什么是透视表? 透视表是一种可以对数据动态排布并且分类汇总的表格格式.或许大多数人都在Excel使用过数据透视表,也体会到它的强大功能,而在pandas中它被称作pivot_table. 1.2 为什么要使用

  • php对xml文件的增删改查操作实现方法分析

    本文实例讲述了php对xml文件的增删改查操作实现方法.分享给大家供大家参考,具体如下: xml源文件 <?xml version="1.0" encoding="utf-8"?> <root> <endTime>2016-08-01</endTime> <content>文件内容</content> </root> $file='callBoard.xml'; 查询xml: $do

  • C#实现XML文档的增删改查功能示例

    本文实例讲述了C#实现XML文档的增删改查功能.分享给大家供大家参考,具体如下: 1. 创建实例XML文件(Books.xml) <?xml version="1.0" encoding="iso-8859-1"?> <bookstore> <book id="1" category="COOKING"> <title lang="en">Everyday I

随机推荐