Go语言编程中文件处理方法

Go语言编程实践与网络应用开发 本文深入讲解了Go语言的多个编程实践案例,包括文件操作、并发控制、网络编程、模板使用和自定义随机数生成器。重点内容包括使用sync.RWMutex与sync.Mutex实现并发安全的账户余额管理、修改Go程序以支持多文件处理与多网页获取、开发RPC示例、构建自定义TCP服务器并统计客户端连接数,以及使用text/template进行数据渲染。 阅读详情

1.文件分类

  • 设备文件:屏幕(标准输出设备)、键盘(标准输入设备)
  • 磁盘文件:放在存储设备上的文件,1)文本文件;2)二进制文件

2.文件常见api

【1】文件的创建和打开

新建文件可以通过如下两个方法:
Func    Create(name  string) (file *File, err Error)
根据提供的文件名创建新的文件,返回一个文件对象,默认权限是0666的文件,返回的文件对象是可读写的。
Func   NewFile(fd  uintptr, name string) *File
根据文件描述创建相应的文件,返回一个文件对象

通过如下两种方法打开文件:
Func Open(name string) (file *File,err Error)
该方法打开一个名称为name的文件,但是是只读方式,内部实现其调用了OpenFile。
Func OpenFile(name string, flag int,perm uint32) (file *File, err Error)
打开名称为name的文件,flag是打开方式,只读、读写等,perm是权限

【2】写文件

Func (file *File) Write(b []byte) (n int, err Error)
写入byte类型的信息到文件
Func (file *File) WriteAt(b []byte, off int64) (n int, err Error)
在指定位置开始写入byte类型的信息
Func (file *File) WriteString(s  string) (ret int, err Error)
写入string信息到文件

【3】读文件

func (file *File) Read(b []byte) (n int, err Error)
读取数据到b中
Func (file *File) ReadAt(b []byte,off int64) (n int, err Error)
从off开始读取数据到b中

【4】删除文件

func  Remove(name string) Error

调用该函数就可以删除文件名称为name的文件

 

3.标准设备文件的使用

package main

import (
	"fmt"
	"os"
)

func main() {
	// os.Stdout.Close() 关闭标准输出文件,无法输出
	fmt.Println("are u ok?") //往标准输出设备(屏幕)写内容

	//标准设备文件(os.Stdout),默认已经打开,用户可以直接使用
	os.Stdout.WriteString("are u ok?\n")

	//os.Stdin.Close() 关闭标准输入,无法输入
	var a int
	fmt.Println("a = ")
	fmt.Scan(&a)
	fmt.Println("a = ", a)
}

4.文件的读写

package main

import (
	"fmt"
	"os"
)

func WriteFile(path string) {
	//打开文件
	f, err := os.Create(path)
	if err != nil {
		fmt.Println(err)
		return
	}
	//使用文件完毕,关闭文件
	defer f.Close()
	var buf string
	for i := 0; i < 10; i++ {
		//"i = 1\n",这个字符串存储在buf中
		buf = fmt.Sprintf("i = %d\n", i)
		_, err2 := f.WriteString(buf)
		if err2 != nil {
			fmt.Println(err)
		}
	}
}

func ReadFile(path string) {
	//打开文件
	f, err := os.Open(path)
	if err != nil {
		fmt.Println(err)
		return
	}

	//关闭文件
	defer f.Close()

	buf := make([]byte, 1024*2) //2k大小

	//n代表从文件读取内容的长度
	n, err1 := f.Read(buf)
	if err1 != nil && err1 != io.EOF { //文件出错,同时没有到文件结尾
		fmt.Println("err1 = ", err1)
		return
	}
	fmt.Println("buf = ", string(buf[:n]))
}

func main() {
	path := "./demo.txt"
	WriteFile(path)
	ReadFile(path)
}

输出:

5.借助bufio按行读取文件内容

 

package main

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

func ReadFile(path string) {
	//打开文件
	f, err := os.Open(path)
	if err != nil {
		fmt.Println(err)
		return
	}

	//关闭文件
	defer f.Close()

	//新建一个缓冲区,把内容放在缓冲区
	r := bufio.NewReader(f)

	for {
		//遇到\n结束读取,但是\n也读取进去
		buf, err := r.ReadBytes('\n')
		if err != nil {
			if err == io.EOF { //文件已经结束
				break
			}
			fmt.Println("err = ", err)
		}
		fmt.Printf("%s", string(buf))
	}
}

func main() {
	path := "./demo.txt"
	ReadFile(path)
}

输出:

6.案例:文件的拷贝

package main

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

func main() {
	list := os.Args //获取命令行参数
	if len(list) != 3 {
		fmt.Printf("usage: xxx srcFile  dstFile")
		return
	}

	srcFileName := list[1]
	dstFileName := list[2]
	if srcFileName == dstFileName {
		fmt.Println("源文件和目的文件名字不能相同")
		return
	}

	//只读方式打开源文件
	sF, err1 := os.Open(srcFileName)
	if err1 != nil {
		fmt.Println(err1)
		return
	}

	//创建目的文件
	dF, err2 := os.Create(dstFileName)
	if err2 != nil {
		fmt.Println(err2)
		return
	}

	//操作完毕,需要关闭文件
	defer sF.Close()
	defer dF.Close()

	//核心处理,从源文件读取内容,往目的文件写,读多少写多少
	buf := make([]byte, 4*1024)
	for {
		n, err := sF.Read(buf) //从源文件读取内容
		if err != nil {
			if err == io.EOF {
				break
			}
			fmt.Println("err = ", err)
		}
		//往目的文件写,读多少写多少
		dF.Write(buf[:n])
	}
}
package main

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

func main() {
	args := os.Args //获取命令行参数
	if len(args) != 3 {
		fmt.Printf("usage: xxx  srcFileName  dstFileName")
		return
	}

	srcFileName := args[1]
	dstFileName := args[2]

	//打开源文件
	sF, errS := os.Open(srcFileName)
	if errS != nil {
		fmt.Println(errS)
		return
	}

	//创建目的文件
	dF, errD := os.Create(dstFileName)
	if errD != nil {
		fmt.Println(errD)
		return
	}

	//关闭文件
	defer sF.Close()
	defer dF.Close()

	//进行文件内容拷贝
	r := bufio.NewReader(sF)

	for {
		buf, err := r.ReadBytes('\n')
		if err != nil {
			if err == io.EOF {
				break
			}
			fmt.Println(err)
		}
		dF.Write(buf)
	}
}

 

31、利用Go语言进行云环境网络编程 本文介绍了如何使用Go语言在云环境中进行网络编程,重点涵盖了Azure Functions的自定义处理程序配置、开发、本地测试与部署流程,并探讨了网络编程的基础知识、Go语言的优势、安全考虑及性能优化措施。通过详细的步骤和代码示例,帮助开发者快速构建高效的云网络应用。 阅读详情

相关推荐

Go语言控制台交互:输入与输出的实践指南

htmltable {th, td {th {pre {简介:本文深入探讨了Go语言处理控制台输入输出的方法,包括使用fmt包的PrintlnPrintf和Print函数进行信息输出,以及fmt.Scanfmt.Scanf和fmt.Scanln函数进行输入操作。同时,简要介绍了Go语言在文件读写方面的功能。掌握这些基础知识对于Go语言编程至关重要。

weixin_30674431的博客 966

golang linux清屏命令,如何清除Go中的终端屏幕?

小编典典注意: 运行命令以清除屏幕不是安全的方法。在这里也检查其他答案。您必须为每个不同的OS定义一个清晰的方法,像这样。当用户的操作系统不受支持时,它会慌乱package mainimport ("fmt""os""os/exec""runtime""time")var clear map[string]func() //create a map for storing clear funcsf...

weixin_39945531的博客 1821

Go:Go语言标准库深度解析

在Go语言中,标准库扮演着至关重要的角色。它提供了一系列预定义的包,涵盖了从基本的输入输出、网络编程、文本处理到并发控制等广泛的功能。标准库的高效性和稳定性,使得开发者无需从零开始编写基础功能,大大提高了开发效率和代码质量。

kkchenjj的博客 1128

[Golang·输入]Golang中标准输入读取文本的实现方式

fmt.Scan 一行一行的输入一个参数或一行输入全部参数(用空格隔开) var a, b int fmt.Scan(&a, &b) // 1 2 fmt.Printf("(a + b): %v\n", (a + b)) // 3 fmt.Scanln 只能一行输入全部参数(用空格隔开) 在这里插入代码片 fmt.Scanf 只能一行输入全部参数,需要用指定的格式化方式输入 此例即输入"1: ? 2: ?"(双引号里为输入,?为输入的参数值) var a, b int.

梦痕 1637

工业视觉开发者的福音:用C#玩转VisionMaster算子(非方案版完整教程)

本文为工业视觉开发者提供了一份完整的C#与VisionMaster算子二次开发教程,详细介绍了环境配置、算子调用原理、性能优化技巧及实战案例。通过模板匹配和二维码识别等实例,展示了如何高效集成VisionMaster算子到现有框架中,提升工业自动化视觉检测系统的灵活性和性能。

weixin_29280657的博客 270

拆解爆火AI图文日报!用扣子(Coze)工作流,10分钟实现自动化新闻早报

当用户提供一则新闻内容时,仔细分析新闻中的关键信息。提取新闻事件的核心要点,包括事件主体、发生时间、地点、主要情节等。用简洁的语言对新闻进行总结,控制在[X]字以内(可根据实际需求设定字数限制)。若用户提供多条新闻,对比各新闻之间的异同点。从事件类型、影响范围、发展趋势等方面进行分析。综合总结多条新闻的整体情况,以有条理的方式呈现给用户。

一身都是月 2426

Go中bufio.ReadString和bufio.Read返回EOF区别

package main import ( "bufio" "fmt" "io" "os" ) // 带缓冲的读入 func main() { file, err := os.Open("1.txt") if err != nil { fmt.Println("文件打开失败" + err.Error()) return } defer func() { file.Close() fmt.Println("文件关闭") }() // 创建带缓冲的读取器 read.

jadeshu的博客 5868

lidar360 V8.0 & lidar360MLS V8.0雷达点云数据处理软件

机载林业 — 基于机载激光雷达点云数据提取一系列森林结构参数(如:高度分位数、叶面积指数、郁闭度等),分割单木并提取单木参数(包括树的位置、树高、胸径、枝下高、冠幅等属性),利用软件的多种回归分析功能可以结合地面调查数据反演森林生物量、蓄积量等功能参数。还可以生成等高线、山体阴影、坡度、坡向、粗糙度等多种产品。分类 — LiDAR360提供多种分类功能,包括地面点分类、模型关键点分类、选择区域地面点分类、机器学习模型分类(可高效地分离建筑、植被、路灯等通用类别)、深度学习模型分类、自定义深度学习分类等。

2403_83796253的博客 5150

Go语言文件处理实战指南

Go语言提供了强大的文件处理能力,通过标准库实现了从基础到高级的完整I/O操作体系。本文系统介绍了文件创建、读写、目录操作等核心功能,重点讲解了高效处理大文件、并发控制、性能优化等关键技术。文章还涵盖了错误处理、日志记录、配置文件解析等实际应用场景,并总结了使用缓冲区、资源管理、原子操作等最佳实践。这些内容帮助开发者全面掌握Go语言中高效可靠的文件处理技术,适用于构建各种文件密集型应用。

weixin_46060074的博客 851

大数据工程中的多模态数据处理技术

模态”(Modality)指的是数据的表现形式文本(Text):新闻、评论、文案等;图像(Image):照片、截图、医学影像等;音频(Audio):语音、音乐、环境声音等;视频(Video):短视频、监控视频、电影等(本质是图像+音频的组合);数值/结构化数据(Numerical/Structured):用户年龄、商品价格、传感器数据等;时间序列(Time Series):股票价格、物流轨迹、心率数据等。多模态数据(Multimodal Data)是指包含两种或以上模态的数据集。

AI云原生与云计算技术学院 1270

SAP PCE 到底有没有 AI 能力:从标准功能、Joule、ABAP 扩展到项目落地的完整解读

摘要:SAP S/4HANA Cloud Private Edition(PCE)已深度集成AI能力,主要体现在三个方面:1)标准业务流程中的AI辅助功能(如财务分录生成、维修单据处理);2)通过Joule提供的自然语言交互入口,支持业务导航和部分事务处理;3)开发者可通过ABAP AI SDK与BTP平台集成实现扩展。PCE不是独立AI平台,企业级自定义AI需结合SAP BTP实现。AI能力已深度融入财务、制造等业务场景,但关键业务仍需人工审核。(149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 330

Go 语言文件处理

Go 语言的文件处理功能强大且易用,标准库提供了从基础到高级的所有功能。通过os和ioutil包,开发者可以轻松实现文件的创建、读取、写入、删除以及目录管理。同时,Go 还支持压缩、归档等高级操作,适用于各种场景。操作函数示例说明创建文件创建或清空文件读取文件读取整个文件内容写入文件快速写入字节切片删除文件删除指定文件重命名文件重命名或移动文件获取信息获取文件元数据修改权限改变文件权限创建目录创建单级目录参考资源。

likuoelie的博客 1099

【FF-A】第二章 Introduction

Armv8.4 架构引入了在安全状态下的虚拟化扩展。Arm® SMMU v3.2 架构[1]为安全流添加了对第2阶段翻译的支持,以补充在 Armv8.4 处理器状态下的安全 EL2 翻译制度。这些架构特性使得在安全状态下,彼此不信任的软件组件能够相互隔离。关于在安全状态下引入虚拟化扩展以及固件框架目标的更多理念可在名为《在安全世界使用虚拟化进行隔离》的白皮书[3]中找到。软件组件只能访问物理地址空间和系统资源的区域,例如 GIC 中对其正确运行必要的中断。

baron-周贺贺-代码改变世界ctw 528

【亲测免费】 Go语言系统库(golang.org/x/sys)教程

`golang.org/x/sys` 是一个Go语言的第三方库,它提供了操作系统特定功能的接口。这个库包含了如文件描述符操作、信号处理、Windows上的API调用以及Unix系统的系统调用等。这个库的目标是帮助开发者更方便地在各种操作系统上编写系统级别的程序。 ## 2. 项目快速启动 ### 安装库 首先,确保你的Go环境已经设置好,然后你可以使用下面的命令来导入并安装`golang.or...

gitblog_00289的博客 1626

Host是如何与EC通信的

EC中有三个寄存器,分别为状态寄存器EC_SC、命令寄存器EC_SC和数据寄存器EC_DATA。而状态寄存器和命令寄存器同属于一个寄存器,这几个寄存器遵循着ACPI EC规范。host可以根据ACPI协议规范来与EC进行通信。 以下是个寄存器的详细介绍。 EC状态寄存器(EC_SC(R)),该寄存器是一个只读寄存器,它反映了此时EC接口的状态。下图为该寄存器表。 EC状态寄存器表中各位的具体含义: OBF(Output Buffer is Full),该状态位置1...

qq_30135687的博客 3694

Qt | QPalette 类(调色版)

Qt | QPalette 类(调色版)

Qt历险记,专注Qt技术,三年医疗设备研发经验,1年机器视觉研发经验,半年柔性传感研发经验。 775

Go 语言简介、编程规范与零散知识点

规范的语法:不需要符号表来解析。垃圾回收:独有垃圾回收机制。无头文件。明确的依赖。无循环依赖。常量只能是数字。int 和 int32 是两种类型。字母大小写设置可见性。任何类型都有方法。没有子类型继承。包级别初始化以及明确的初始化顺序。文件被编译到一个包里。没有数值类型转换。接口隐式实现。嵌入:不会提升到超类。方法按照函数声明。方法即函数。接口只有方法。方法通过名字匹配。没有构造函数和析构函数。postincrement(如 ++i)是状态。

woshihlf的博客 1071

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

golang 逐行写文件_如何在Go中逐行处理文件?

golang 逐行写文件In the Go programming language, How to process a file line by line? 在Go 编程语言中,如何逐行处理文件? An equivalent piece of Bash code could be 一段等效的Bash代码可能是 while read line ; do echo $line done ...

cuma2369的博客 1729

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Golang

Go语言是一门新型的静态类型的编程语言。使用Go语言不仅可以访问底层操作系统,还提供了强大的网络编程和并发编程支持。Go语言的用途多,可以进行网络编程,系统编程,并发编程和分布式编程等。Go语言的特性:① 语法简单 ② 工程结构简单 ③ 有垃圾回收机制 ④ 可以进行快速编译 ⑤ 拥有功能完善,质量可靠的标准库Go使用编译器编译代码。编译器将源代码编译成二进制(或字节码)格式,在编译代码时,编译器检查错误,优化性能并输出可在不同平台上运行的二进制文件。

ychhaha的博客 1913

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Go语言的文件操作

Go语言的文件操作功能强大,易于上手。在本篇文章中,我们详细探讨了文件的创建、打开、读取、写入、删除、重命名及目录操作的基本用法。这些操作构成了文件处理的核心,帮助开发者在实际项目中有效管理文件和数据。文件操作是大多数应用程序不可或缺的一部分,掌握Go语言的文件操作不仅可以提升你的编程能力,还能够帮助你在开发中更高效地管理数据。希望本文能够帮助你深入理解和掌握Go语言的文件操作功能。

2501_90291238的博客 957

Go语言编程笔记17:Web Service

Go语言编程笔记17:Web Service 图源:wallpapercave.com 通过一系列文章,我介绍了如何用Go语言构建一个Web应用,准确的说是一个网站。事实上并非所有的Web应用都是以网站的形式存在,其中相当一部分是Web Service,相比前者,后者的应用范围更广泛,它的前端可能是纯Js编写的网站前端,也可能是移动APP,甚至是另一个Web应用。 所以这篇文章将介绍如何构建一个Web Service。 这里的Web Service概念和Apache之类的有所不同,它指那些通过API方式

梦幻天空 2339

Go 系统编程(三)

在本章中,我们谈到了许多内容,包括处理日志文件,处理 Unix 文件权限,用户和组,创建正则表达式以及处理文本文件。在下一章中,我们将讨论 Unix 信号,它允许您以异步方式与运行中的程序进行通信。此外,我们将告诉您如何在 Go 中绘图。f在本章中,我们讨论了许多有趣和方便的主题,包括信号处理和在 Go 中创建图形图像。此外,我们还教会了您如何在 Go 程序中添加对 Unix 管道的支持。在下一章中,我们将讨论 Go 最独特的特性,即 goroutines。

龙哥盟 870

postman 设置请求编码_Go 语言 Web 编程系列——获取用户请求数据(下)

1、表单数据编码类型默认情况下,POST 表单编码类型属性 enctype 值是 application/x-www-form-urlencoded,其含义是将表单请求数据编码为 URL 参数,该属性用于指定提交表单时生成请求的请求头 Content-Type 的值。还是以之前的在线论坛项目为例,在登录页面,点击「登录」按钮,通过 F12 查看对 authenticate 端点的网络请求明细:表单...

weixin_32009121的博客 738

Go最新最新golang语言面试题总结(一)_golang面试题(3),2024Golang大厂面试真题

/打印奇数for i := 0;i

2401_84931568的博客 482

Go语言网络游戏服务器模块化编程

介绍Go语言网络游戏服务器的如何进行模块化编辑,减少耦合性!

witton的专栏 683

Go语言并发编程:开启高效编程新时代

本文深入探讨了Go语言并发编程的核心概念与实战应用。首先介绍了goroutine轻量级线程、channel通信机制、select多路复用和context任务控制等核心特性。随后通过并发文件处理、分布式任务调度和高并发Web服务器三个典型场景,展示了Go并发编程的实践技巧。文章还重点分析了避免死锁、处理竞态条件和优化内存管理等关键注意事项,提出了统一加锁顺序、原子操作、合理设置GC参数等解决方案。最后展望了Go语言在云计算、大数据等领域的高并发应用前景,鼓励开发者积极实践,充分发挥Go语言在并发处理方面的优势

大雨淅淅的博客 886
上一篇: Go语言编程之json格式的编码和解码
下一篇: Go语言并发编程
random_w
博客等级 码龄9年 130粉丝 168原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值