asp 茶叶网站模板/广告公司推广
在本教程中,我们将学习如何使用 Go 将数据写入文件。我们还将学习如何同时写入文件。
本教程有以下部分
- 将字符串写入文件
- 将字节写入文件
- 逐行将数据写入文件
- 附加到文件
- 同时写入文件
由于 Playground 不支持文件操作,请在本地系统中运行本教程的所有程序。
将字符串写入文件
最常见的文件写入操作之一是将字符串写入文件。这很简单。它由以下步骤组成。
- 创建文件
- 将字符串写入文件
让我们立即开始讨论代码。
package mainimport ("fmt""os"
)func main() {f, err := os.Create("test.txt")if err != nil {fmt.Println(err)return}l, err := f.WriteString("Hello World")if err != nil {fmt.Println(err)f.Close()return}fmt.Println(l, "bytes written successfully")err = f.Close()if err != nil {fmt.Println(err)return}
}
上面程序第 9 行中的函数创建了一个名为 test.txt 的文件。如果具有该名称的文件已存在,则 create 函数将截断该文件。此函数返回 File 描述符。https://pkg.go.dev/os#File)。
在第 14 行,我们使用 方法将字符串Hello World写入文件WriteString
。此方法返回写入的字节数和错误(如果有)。
最后,我们关闭第 1 行的文件。21.
上面的程序会打印
11 bytes written successfully
您可以找到在执行该程序的目录中创建的名为test.txt的文件。如果使用任何文本编辑器打开该文件,您可以发现它包含文本Hello World。
将字节写入文件
将字节写入文件与将字符串写入文件非常相似。我们将使用 Write 方法将字节写入文件。以下程序将字节切片写入文件。
package mainimport ("fmt""os"
)func main() {f, err := os.Create("/home/naveen/bytes")if err != nil {fmt.Println(err)return}d2 := []byte{104, 101, 108, 108, 111, 32, 98, 121, 116, 101, 115}n2, err := f.Write(d2)if err != nil {fmt.Println(err)f.Close()return}fmt.Println(n2, "bytes written successfully")err = f.Close()if err != nil {fmt.Println(err)return}
}
在上面的程序中,在第 15 行中,我们使用 Write 方法将字节切片写入目录中命名的文件。您可以将此目录更改为其他目录。其余程序是不言自明的。该程序将打印并创建一个名为 .打开文件,您可以看到它包含文本
逐行将字符串写入文件
另一种常见的文件操作是需要将字符串逐行写入文件。在本节中,我们将编写一个程序来创建包含以下内容的文件。
Welcome to the world of Go.
Go is a compiled language.
It is easy to learn Go.
让我们立即开始讨论代码。
package mainimport ("fmt""os"
)func main() {f, err := os.Create("lines")if err != nil {fmt.Println(err)f.Close()return}d := []string{"Welcome to the world of Go1.", "Go is a compiled language.", "It is easy to learn Go."}for _, v := range d {fmt.Fprintln(f, v)if err != nil {fmt.Println(err)return}}err = f.Close()if err != nil {fmt.Println(err)return}fmt.Println("file written successfully")
}
在上面程序的第 9 行中,我们创建了一个名为 lines 的新文件。在第 17 行中,我们使用 for range 循环遍历数组,并使用 Fprintln 函数将行写入文件。Fprintln 函数将 a 作为参数并附加一个新行,这正是我们想要的。运行此程序将打印,并在当前目录中创建一个文件。该文件的内容如下
Welcome to the world of Go1.
Go is a compiled language.
It is easy to learn Go.
追加到文件
在本节中,我们将在上一节中创建的文件后再附加一行。我们将在文件后面附加一行文件处理很容易。
文件必须以追加和只写模式打开。这些标志作为参数传递给 Open 函数。在追加模式下打开文件后,我们将新行添加到文件中。
package mainimport ("fmt""os"
)func main() {f, err := os.OpenFile("lines", os.O_APPEND|os.O_WRONLY, 0644)if err != nil {fmt.Println(err)return}newLine := "File handling is easy."_, err = fmt.Fprintln(f, newLine)if err != nil {fmt.Println(err)f.Close()return}err = f.Close()if err != nil {fmt.Println(err)return}fmt.Println("file appended successfully")
}
在上面程序的第 9 行中,我们以追加和只写模式打开文件。文件打开成功后,我们在第 15 行的文件中添加一个新行。该程序将打印 .运行此程序后,文件的内容将是
Welcome to the world of Go1.
Go is a compiled language.
It is easy to learn Go.
File handling is easy.
并发写入文件
当多个goroutine同时写入文件时,我们最终会遇到竞争条件。因此,必须使用通道来协调对文件的并发写入。
我们将编写一个创建 100 个 goroutine 的程序。每个 goroutine 都会同时生成一个随机数,总共生成一百个随机数。这些随机数将被写入文件中。我们将使用以下方法解决竞争条件问题。
- 创建一个用于读取和写入生成的随机数的通道。
- 创建 100 个生产者 goroutine。每个 goroutine 都会生成一个随机数,并将该随机数写入通道。
- 创建一个消费者 goroutine,将从通道读取数据并将生成的随机数写入文件。因此,我们只有一个 goroutine 同时写入文件,从而避免竞争条件
- 完成后关闭文件。
让我们produce
首先编写生成随机数的函数。
func produce(data chan int, wg *sync.WaitGroup) {n := rand.Intn(999)data <- nwg.Done()
}
上面的函数生成一个随机数并将其写入通道data
,然后调用Done
等待组以通知其任务已完成。
现在让我们转到写入文件的函数。
func consume(data chan int, done chan bool) {f, err := os.Create("concurrent")if err != nil {fmt.Println(err)return}for d := range data {_, err = fmt.Fprintln(f, d)if err != nil {fmt.Println(err)f.Close()done <- falsereturn}}err = f.Close()if err != nil {fmt.Println(err)done <- falsereturn}done <- true
}
该consume
函数创建一个名为concurrent
. 然后它从通道读取随机数data
并写入文件。一旦它读取并写入了所有随机数,它就会写入true
通道done
以通知它已完成其任务。
让我们编写main
函数并完成这个程序。我在下面提供了整个程序。
package mainimport ("fmt""math/rand""os""sync"
)func produce(data chan int, wg *sync.WaitGroup) {n := rand.Intn(999)data <- nwg.Done()
}func consume(data chan int, done chan bool) {f, err := os.Create("concurrent")if err != nil {fmt.Println(err)return}for d := range data {_, err = fmt.Fprintln(f, d)if err != nil {fmt.Println(err)f.Close()done <- falsereturn}}err = f.Close()if err != nil {fmt.Println(err)done <- falsereturn}done <- true
}func main() {data := make(chan int)done := make(chan bool)wg := sync.WaitGroup{}for i := 0; i < 100; i++ {wg.Add(1)go produce(data, &wg)}go consume(data, done)go func() {wg.Wait()close(data)}()d := <-doneif d {fmt.Println("File written successfully")} else {fmt.Println("File writing failed")}
}
main 函数在第 41 行创建通道,从中读取和写入随机数。第 42 行中的通道被 goroutine 用来通知它已完成其任务。第 43 行中的等待组用于等待所有 100 个 goroutines 完成随机数的生成。
第 44 行中的循环创建了 100 个 goroutine。第 49 行中的 goroutine 调用要求等待组等待所有 100 个 goroutine 完成创建随机数。之后,它关闭通道。一旦通道关闭并且 goroutine 将所有生成的随机数写入文件,它就会写入第 37 行中的通道,并且主 goroutine 被解锁并打印。
现在您可以在任何文本编辑器中并发打开文件并查看生成的 100 个随机数:)
本教程到此结束。希望您喜欢阅读。祝你有美好的一天。
相关文章:

使用 Go 写入文件
在本教程中,我们将学习如何使用 Go 将数据写入文件。我们还将学习如何同时写入文件。 本教程有以下部分 将字符串写入文件将字节写入文件逐行将数据写入文件附加到文件同时写入文件 由于 Playground 不支持文件操作,请在本地系统中运行本教程的所有程…...

调用DeleteLocalRef的正确姿势
做安卓jni相关开发的总会在涉及到jni变量释放时怀疑人生,what? where? when? who? why? how? how much? 最近碰到一个比较奇怪的问题,有一个jni方法的耗时在随着调用次数的增加而上涨,但是没有明显的内存泄漏,经过我缜密分…...

抖音小店从0到1起店流程,实操经验分享!
我是电商珠珠 很多人在开店之后,并不知道怎么做。往往会有人跑来问我说,开店之后怎么做啊,流程方面我还不是很熟悉啊等等。 这份起店流程备好了,将来对你有用。 第一步,店铺基础设置 在店铺开好之后,不…...

MySQL权限
权限 MySQL 允许客户端用户连接到服务器并访问服务器管理数据,MySQL 用户权限系统的主要功能是对给定主机连接的用户进行身份验证,并将该用户与数据库的权限相关联。 在 MySQL8 之前,授权表使用 MyISAM 并且是非事务性的,在 MyS…...

Nginx服务器安装证书并启用SSL(acme.sh)
前提 您已购置vps服务器,例如阿里云全球站ecs、AWS EC2、Azure VM、GCP Compute等安全组已开启80、443端口,且访问源设置为0.0.0.0/0域名已设置A记录指向当前操作服务器,若您使用aws ec2,有公有 IPv4 DNS,可供使用 安…...

c++实现观察者模式
前言 我觉得这是最有意思的模式,其中一个动,另外的自动跟着动。发布-订阅,我觉得很巧妙。 代码 头文件 #pragma once #include<vector> #include<string> #include<iostream>// 抽象观察者 class Aobserver { public:v…...

C 语言左移位操作在kernel驱动子系统中的特殊用途
文章目录 前言一、C语言左移位操作介绍1. 左移位二、左移位操作在kernel 驱动子系统中的应用1. 左移位操作在 V4L2, Media 子系统中的应用实例2.左移位操作在 DRM 子系统中的应用实例2.1 左移位操作在struct drm_crtc 中的应用2.2 左移位操作在struct drm_encoder 中的应用总结…...

kafka3.6.0集群部署
环境准备 机器环境 系统主机名IP地址centos7.9kafka01192.168.200.51centos7.9kafka02192.168.200.52centos7.9kafka03192.168.200.53 所需软件 jdk-8u171-linux-x64.tar.gzapache-zookeeper-3.8.3-bin.tar.gz https://dlcdn.apache.org/zookeeper/zookeeper-3.8.3/apache-zook…...

JAVA客户端使用账号密码调用influxdb2报错:{“code“:“unauthorized“,“message“:“Unauthorized“}
问题:JAVA客户端访问influxdb2报错 说明:当前influxdb版本:2.6.1 使用依赖: <dependency><groupId>org.influxdb</groupId><artifactId>influxdb-java</artifactId><version>2.10</vers…...

Mysql查询今天到期、n天即将到期、还有n天过期相关sql
超级治愈的一段话 其实你已经很幸福了,吃饱穿暖,没病没灾,隔三岔五还能吃顿好的,偶尔还能睡到自然醒,肥嘟嘟的一身福气。人这一辈子,要是能够逃过天灾,躲过战乱,不遇歹人,不生大病,就已经是非常幸运了,要是还能家庭和谐,收人稳定,三五知己,那更是天大的福泽。 -…...

【漏洞复现】Apache Log4j Server 反序列化命令执行漏洞(CVE-2017-5645)
感谢互联网提供分享知识与智慧,在法治的社会里,请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞扫描3、漏洞验证 1.5、深度利用1、反弹Shell 说明内容漏洞编号CVE-2017-5645漏洞名称Log4j Server …...

【江协科技-用0.96寸OLED播放知名艺人打篮球视频】
Python进行视频图像处理,通过串口发送给stm32,stm32接收数据,刷新OLED进行显示。 步骤: 1.按照接线图连接好硬件 2.把Keil工程的代码下载到STM32中 3.运行Python代码,通过串口把处理后的数据发送给STM32进行显示 …...

CATIA环境编辑器用不了时创建项目快捷方式
CATIA环境编辑器用不了时创建项目快捷方式 一、参考适用情况示例二、 解决步骤(一) 先正确放置winb_64部署包(二) 添加环境文件(三) 修改加入的环境文件(四) 复制本机CATIA快捷方式后重命名(五) 修改快捷方式目标的值 一、参考适用情况示例 二、 解决步骤 (一) 先正确放置winb…...

java泛型的深入 泛型还可以在很多地方进行定义 泛型类 泛型方法 泛型接口 泛型的继承和通配符 泛型类练习
文章目录 泛型的深入泛型还可以在很多地方进行定义泛型类泛型方法泛型接口 泛型的继承和通配符泛型类练习总结 泛型的深入 public static void main(String[] args) {//在没有泛型的时候怎么存储数据ArrayList listnew ArrayList();list.add(1);list.add("abc");//遍…...

持续交付的好处
在软件领域,持续交付就是这样一种开发实践,它为所有利益相关者带来好处:开发、运营、测试人员和业务团队。持续交付适用于每个由软件驱动的组织;很难想象企业不使用软件。 它使人们受益,并需要人们做出改变才能更好地…...

APP开发:用途与未来前景|软件定制开发|网站小程序建设
APP开发:用途与未来前景|软件定制开发|网站小程序建设 APP开发已成为现代科技趋势的一部分,无论是日常生活还是商业领域,都有它的身影。通过开发APP,我们可以将想法、功能和内容转化为直观、易用的移动设备应用程序,满…...

图论——并查集
参考内容: 图论——并查集(详细版) 并查集(Disjoint-set)是一种精巧的树形数据结构,它主要用于处理一些不相交集合的合并及查询问题。一些常见用途,比如求联通子图、求最小生成树的 Kruskal 算法和求最近公共祖先&…...

计算机毕业设计java+vue+springboot的论坛信息网站
项目介绍 本论文系统地描绘了整个网上论坛管理系统的设计与实现,主要实现的功能有以下几点:管理员;首页、个人中心、用户管理、公告管理、公告类型管理、热门帖子管理、帖子分类管理、留言板管理、论坛新天地、我的收藏管理、系统管理&#…...

.net core添加SQL日志输出
GreDbContext : Microsoft.EntityFrameworkCore.DbContext 下添加 public static readonly ILoggerFactory MyLoggerFactory LoggerFactory.Create(builder > { builder.AddConsole(); }); protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder…...

虚幻5.1 常见的效果关闭方式
常见的虚幻效果关闭方式 1.Bloom ProjectSettings->Rendering->Default Settings->Bloom PostProcessVolume->Lens->Bloom 2.Ambient Occlusion/Screen Space Ambient Occlusion(SSAO) ProjectSettings->Rendering->Default Settings->Ambient Occl…...

每日一题 --- 力扣318----最大单词长度乘积
这道题时间复杂度我感觉设置的不是很好,应该最好是有一个1000变成10000就行。 因为我在做这道题的时候被误导了,以为双重循环暴力判断一下也能过,因为1000*1000 *26的时间复杂度没有到1亿,那么我刚开始认为是能过的,结…...

掌动智能性能压力测试优势有哪些
企业通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。本文将介绍性能压力测试的价值及主要优势! 一、性能压力测试的价值 1、评估系统能力:有助于参数的基准测试,可以度量系统的响应时间;还有助于检查系统是否可…...

虚拟机没有桥接模式--物理机WiFi不见了--注册表修复
我们知道虚拟机有三种模式: vmnet0 桥接模式;vmnet1 仅主机模式;vmnet8 NAT模式 我自己以前一直用的NAT模式,今天突然要用到桥接模式,发现无法切换... 我下面这个是后面弄好了的,最开始是没有显示桥接模式…...

【Python】批量下载素材酷视频资源
【需求】 做视频精彩需要用到梗图视频等,但是素材酷上面的视频没有搜索功能,每次用起来还要去下载也很麻烦,下载只能一个一个下载也很麻烦,下要搞一个能够批量下载的功能,然后把下载的资源全部放进万兴喵影编辑器的云空间,这样就可以做到随做随查随用了。 【效果】 目…...

QuantLib学习笔记——一个简单的价值估算案例
⭐️ 前言 QuantLib很强大,它实现了很多金融工具及其价值估算方法,从最简单的折现模型,到利用BSM模型对期权进行定价,覆盖面相当齐全。本文以一个简单的净现值估算案例,开启笔者金融工具估值的旅程。 开上豪车&#…...

智能语音和自然语言处理技术
一、定义 智能语音和自然语言处理技术是指通过计算机技术实现人机交互的一种技术。它可以让计算机和人类之间进行自然而流畅的交流,从而实现更高效、更便捷、更智能的信息交流和处理。 智能语音和自然语言处理技术主要包括语音识别、语音合成、自然语言理解、自然…...

【Sql】sql server数据库提示:执行Transact-SQL语句或批处理时发生了异常。 无法打开数据库msdb,错误:926。
【问题描述】 打开sql server2008r2数据库的时候, 系统提示执行Transact-SQL语句或批处理时发生了异常。 无法打开数据库msdb,错误:926。 【概念理解】 首先MSDB数据库是的作用: 用于给SQL Server代理提供必要的信息来运行调度警…...

Day 5 登录页及路由 (三) 基于axios的API调用
系列文章目录 本系列记录一下通过Abp搭建后端,VueElement UI Plus搭建前端,实现一个小型项目的过程。 Day 1 Vue 页面框架Day 2 Abp框架下,MySQL数据迁移时,添加表和字段注释Day 3 登录页以及路由 (一)Day 4 登录页以…...

雷神学习---视音频数据处理入门:RGB、YUV像素数据处理
原文地址:https://blog.csdn.net/leixiaohua1020/article/details/50534150 从代码可以看出,如果想把YUV格式像素数据变成灰度图像,只需要将U、V分量设置成128即可。 这是因为U、V是图像中的经过偏置处理的色度分量。色度分…...

Asp.Net Core服务端处理请求过来的压缩格式
之前是直接传没有经过压缩的文件字节,有时文件过大的话,可能占宽带就多,宽带流量都是钱。后来有个想法,在客户端把文件进行压缩,把压缩的文件流发给服务端进行解压。 1,先修改项目中Startup.cs文件中Confi…...