首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么写入已删除的文件不会在Go中返回错误?

在Go语言中,写入已删除的文件不会返回错误的原因是因为Go语言的文件操作是基于文件描述符(File Descriptor)的。文件描述符是操作系统内核为每个打开的文件分配的一个整数,用于标识该文件。当我们打开一个文件时,操作系统会为该文件分配一个文件描述符,并将其返回给应用程序。

在Go语言中,当我们打开一个文件并进行写入操作时,实际上是通过文件描述符来进行的。当我们删除一个文件时,操作系统会将该文件的目录项删除,但是文件描述符仍然存在,应用程序仍然可以通过文件描述符进行写入操作。这是因为文件描述符是由操作系统内核维护的,与文件的目录项无关。

因此,当我们在Go语言中写入已删除的文件时,操作系统会根据文件描述符进行写入操作,而不会检查文件是否存在。由于文件已经被删除,写入操作实际上是写入到了一个不存在的文件中。在这种情况下,操作系统不会返回错误,而是正常执行写入操作。

需要注意的是,尽管写入已删除的文件不会返回错误,但是读取已删除的文件时会返回错误。这是因为读取操作需要通过文件的目录项来找到文件的位置,而已删除的文件的目录项已经被删除,无法找到文件的位置,因此读取操作会返回错误。

总结起来,写入已删除的文件不会在Go语言中返回错误是因为文件操作是基于文件描述符进行的,而文件描述符与文件的目录项无关。但是需要注意的是,读取已删除的文件时会返回错误。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何在 Go 优雅处理和返回错误(1)——函数内部错误处理

在使用 Go 开发后台服务,对于错误处理,一直以来都有多种不同方案,本文探讨并提出一种从服务内到服务外错误传递、返回和回溯完整方案,还请读者们一起讨论。...这是一个语言级问题 函数/模块错误信息返回: 一个函数在操作错误之后,要怎么将这个错误信息优雅地返回,方便调用方(也要优雅地)处理。...首先本文就是第一篇:函数内部错误处理 ---- 高级语言错误处理机制   一个面向过程函数,在不同处理过程需要 handle 不同错误信息;一个面向对象函数,针对一个操作所返回不同类型错误...---   下一篇文章是《如何在 Go 优雅处理和返回错误(2)——函数/模块错误信息返回》,笔者详细整理了 Go 1.13 之后 error wrapping 功能,敬请期待~~ --- 本文章采用...原文标题:《如何在 Go 优雅处理和返回错误(1)——函数内部错误处理》 发布日期:2021-09-18 原文链接:https://cloud.tencent.com/developer/article

9.1K151
  • 【Flink教程-解决】在idea测试flink时候,提示读取文件时候错误,提示文件不存在解决方案

    在学习Flink时候,hello word程序-获取到文本单词出现频率。启动,报错。如下图: 提示信息是说,input/word.txt文件不存在。 存在啊。为什么会报这个错误呢?...我们跟着断点进去查看: 可以看到,查找文件目录为:E:\temp\kaigejavastudy\input\words.txt 而实际上凯哥words.txt文件是在:E:\temp\kaigejavastudy...idea默认文件路径是project路径,自己项目里面文件是module路径。...(ps:如果不是maven多模块,直接创建,就不会出现这个问题) 知道了问题原因:idea默认文件路径就是project路径。...那么我们就来修改 二:问题解决 1:将文件修改成绝对路径  2:修改idea默认路径为当前路径.idea上方工具类>run>edit Configuration>work directory更改当前默认路径

    2K20

    错误记录】Android 注解处理器报错 ( 非法文件开始 , 请删除文件或确保该文件位于正确类路径子目录。 )

    文章目录 一、报错信息 二、解决方案 一、报错信息 ---- Android APT , 使用 注解处理器 生成 Java 代码 , 报如下错误 ; 错误: 无法访问MainActivity_ViewBinder...错误文件: D:\002_Project\002_Android_Learn\APT\app\build\intermediates\javac\debug\classes\kim\hsl\apt...\MainActivity_ViewBinder.class 非法文件开始 请删除文件或确保该文件位于正确类路径子目录。...Android_Learn\APT\app\build\intermediates\javac\debug\classes\kim\hsl\apt\MainActivity_ViewBinder.class 目录已经存在了一个文件..., 之前使用 ButterKnife 时生成文件 ; 根据 完整 包名 + 类名 生成文件 , 使用是 createClassFile API , 生成字节码文件 , 这里用法错误 ; // 根据

    95620

    package runtime

    但依靠终止器去刷新内存I/O缓冲如bufio.Writer是错误,因为缓冲不会在程序退出时被刷新。 如果*x大小为0字节,不保证终止器会执行。 一个程序会有单独一个go程顺序执行所有的终止器。...func Stack func Stack(buf []byte, all bool) int Stack将调用其go调用栈踪迹格式化后写入到buf返回写入字节数。...若all为true,函数会在写入当前go踪迹信息后,将其它所有go调用栈踪迹都格式化写入到buf。...函数返回值为调用栈标识符、文件名、该调用在文件行号。如果无法获得信息,ok会被设为false。...func Callers func Callers(skip int, pc []uintptr) int 函数把当前go程调用栈上调用栈标识符填入切片pc返回写入到pc项数。

    94320

    Go Changes--Russ Cox在GopherCon 2023演讲

    然后,你需要添加测试,以确保你所修复错误不会在以后重新引入,不会在六个月后由你重新引入,也不会由不熟悉代码新团队成员重新引入....你需要找出最重要错误,以便知道要更新到哪个修复版本....这张幻灯片显示了我们从 Go 删除内容列表,此前我们对早期版本删除内容发出了警告....Go 编译器不会在程序出现第一个错误时停止,它会继续前进,尝试查找并报告尽可能多不同错误. 但有时继续分析具有已知错误程序会 导致意外恐慌. 我们不想向用户展示这样崩溃....在幻灯片上,gopls 和其他工具正在向"每周文件"写入计数器. 每周一次,Go 工具链上传程序将从遥测服务器获取“上传配置”,其中列出了该周收集特定事件名称.

    22410

    听GPT 讲Prometheus源代码--tsdb

    processWALSamples:处理WAL样本。 loadWBL:加载或恢复WAL。 Error:返回给定错误WAL加载错误。 Cause:返回给定WAL加载错误根本原因。...mergedStringIter: 合并字符串迭代器。 DeletedIterator: 删除迭代器,用于获取删除时间序列。...ErrClosed:表示TSDB关闭,用于在关闭状态下操作进行错误处理。 Options:TSDB配置选项,包括存储目录、数据保留策略、块大小等。...该文件包含了多个结构体和函数,下面逐一介绍它们作用: ErrChunkDiskMapperClosed:表示ChunkDiskMapper关闭错误。...Add函数:将一个或多个错误添加到multiError结构体。 Err函数:返回multiError结构体第一个非nil错误

    32220

    区块链开发之Go语言—文件系统

    Go 文件描述符封装在 os.File 结构,通过 File.Fd() 可以获得底层文件描述符:fd。...它返回写入字节数和可能遇到任何错误。如果返回值 n!=len(b),本方法会返回一个非nil错误。 注意:Write 调用成功并不能保证数据已经写入磁盘,因为内核会缓存磁盘 I/O 操作。...fstat 则会返回由某个打开文件描述符(Go 则是当前打开文件 File)所指代文件相关信息。...注意,要删除文件,对文件本身无需有任何权限。 可执行权限:可访问目录文件。因此,有时也将对目录执行权限称为 search(搜索)权限。 Sticky 位 一般用于目录,起限制删除作用。...funcRemoveAll(pathstring)error RemoveAll 删除 path 指定文件,或目录及它包含任何下级对象。它会尝试删除所有东西,除非遇到错误返回

    1.3K80

    第九次课:Python文件操作

    若省略参数op,文件不存在则会报错,写文件操作也会报错; (2)“w”:打开并可写文件。若文件存在,则以前内容将被清除; (3)“a”:向文件追加文本。...向存在文件追加内容; (4)“b”:以二进制方式读取,提高安全性; (5)“r+”:以读写模式打开 (6)“w+”:以读写模式打开 (参见 w ) (7)“a+”:以读写模式打开 (参见 a )...,就算文件存在,Python也会先删除原有文件然后创建新文件,也即文件内容也随之删除!...如果提供size参数,size是表示读取内容总长,也就是说可能只读到文件一部分; (4)write(str):把str写到文件,write()并不会在str后加上一个换行符; (5)writelines...(seq):把seq内容全部写到文件(多行一次性写入),不会在每行后面加上任何东西; (6)close():关闭文件

    48620

    完全可复制、经过验证 Go 工具链

    删除了预编译包之后,Go 工具链仍然依赖于主机 C 工具链部分是使用 package net 构建二进制文件,特别是 go 命令。...User IDs(用户ID):我们发布供下载tar档案是从写入文件系统分发构建,并且使用tar.FileInfoHeader将用户和组ID从文件系统复制到tar文件,使运行构建用户成为相关输入...,打包工具在将文件写入存档时会复制VERSION文件时间,而不是复制本地文件修改时间。...,并剥离(从生成ELF二进制文件删除符号表)。...•Plan 9构建脚本(*.rc)已被删除,尽管Windows构建脚本(*.bat)仍然存在。•mksyscall.pl和其他七个未显示Perl脚本头部更改。

    34910

    一文搞懂Go语言内存模型

    Go 方法旨在使错误程序更可靠、更易于调试,同时仍然坚持认为竞争是错误,工具可以诊断和报告它们。内存模型以下Go内存模型正式定义严格遵循 Hans-J 提出方法。...w 不会在 r 之前发生任何其他写入 w'(到 x)之前发生。...内存位置 x 读取 r 持有不大于机器字值,必须观察到一些写入 w,使得 r 不会在 w 之前发生,并且没有写入 w',使 w 发生在 w' 之前,w' 发生在 r 之前。...对 a 写入在 c 上发送之前进行排序,在 c 上相应接收完成之前同步,在 print 之前进行排序。channel关闭在接收之前同步,该接收返回零值,因为channel关闭。...不成功调用根本没有同步效果。就内存模型而言,即使互斥锁解锁,l.TryLock(或 l.TryRLock)也可以认为能够返回 false。

    34110

    Go并发聚合请求利器——singleflight源码详解

    简介singlefilght ,在go标准库("golang.org/x/sync/singleflight")提供了可重复函数调用抑制机制。...(key, func() (interface{}, error) {// 另外其一个goroutine,等待一段时间后,删除key// 删除key后调用,会重新执行Do go func() {.../ Forget 用于通知 Group 删除某个 key 这样后面继续这个 key 调用时候就不会在阻塞等待了func (g *Group) Forget(key string){g.mu.Lock...函数调用完成,进行错误处理,区分系统错误or用户错误if e, ok := c.err....5.3 chan使用提示使用chan时,需要留意,数据能否被即时写入,会不会因为什么原因(主要是panic或Goexit)导致无法被写入,从而监听chan时被一直阻塞导致死锁。

    2.4K10

    听GPT 讲Alertmanager源代码--api

    WriteResponse函数用于将GetAlertsOK结构体实例编码并写入响应流返回一个错误类型,表示写入响应流时是否出现错误。...这些结构体和函数用于构建和返回获取接收器成功响应,包含接收器详细信息,并将其写入HTTP响应返回给客户端。...Must方法与Build方法类似,但如果构建URL时出现错误,则会引发panic。 String方法返回构建URL。 BuildFull方法与Build方法类似,但它将主机名添加到URL开头。...Must(uri string, err error):检查错误返回URL字符串和错误信息,如果有错误则会引发panic。 String():返回删除沉默请求URL字符串,等效于Build()。...Must(err error):如果有错误,抛出异常。用于检查在构建URL时是否出现错误。 String():返回构建URL字符串表示形式。

    30940

    Go语言入门——进阶语法篇(四)

    ,而且存在很大潜在危害,Go异常处理(或者说是错误处理)是一种非常简单直观方式。...Go语言引入了一个错误处理标准接口:error接口,并习惯性默认将错误作为最后一个返回值,当然,如果有的话。...接口可以提供更丰富错误信息,但有时候我们希望快速生成一个简单错误,而不是写个结构体,那么Go还提供了一种快捷创建错误方式,使用errors包 package main import ( "fmt...简单说,panic和recover组合,可以模拟实现Javatry...catch机制,将异常捕获,而不是继续向上传递。但这并不是Go语言所推崇用法。...if err == io.EOF { // io.EOF表示文件末尾 break } } } 小结 使用os.Create创建文件会覆盖掉存在文件 缓冲区默认大小为4096,可以使用

    50220

    Golang 语言标准库 os 包怎么操作目录和文件

    01 介绍 Golang 语言标准库 os 包提供独立于平台操作系统相关功能接口。其设计类似于 Unix,尽管错误处理类似于 Go,调用失败则返回 error 类型错误,而不是错误编号值。...例如 Open 或 Stat,如果返回 error,那么错误将在打印时包含失败文件名,并且错误类型为 *PathError,可以通过 *PathError 方法获取更多信息。...不通用功能在系统特定 syscall 包实现。 此外,os 包还有三个子包,分别是: os/exec 运行外部命令。 os/signal 操作传入信号。...func Remove(name string) error 删除给定名称文件或空目录。 func RemoveAll(path string) error 删除给定路径所有目录,包含子目录。...O_APPEND,WriteAt 返回错误

    78640

    文件文件异常

    未妥善关闭文件可能会导致数据丢失或受损。如果在程序过早地调用close(),会发现需要使用文件时它关闭,这会导致更多错误。...因为read()到达文件末尾时返回一个空字符串,而将这个空字符串显示出来时就是一个空行。要删除末尾空行,可在print语句中使用rstrip()。 ? 输出: ?...如果要写入文件不存在,函数open()将自动创建它。以写入('w')模式打开文件时要小心,如果指定文件已经存在,Python在返回文件对象前清空该文件。...要将数值数据存储到文本文件,必须先使用函数str()将其转换为字符串格式。 ? 输出: ? 2.写入多行 函数write()不会在写入文本末尾添加换行符,如果写入多行时没有指定换行符: ?...以附加模式打开文件时,Python不会在返回文件对象前清空文件,而写入文件行都将添加到文件末尾。如果指定文件不存在,Python将创建一个空文件。 ? 输出: ?

    5.2K20

    go进阶编程:Golang文件文件夹操作指南

    Golang文件文件夹操作指南在Go语言(Golang)文件文件操作是一个常见任务,无论是读取配置文件、处理日志文件,还是管理项目中资源文件,都离不开对文件系统访问。...本文将详细介绍如何在Golang中进行文件文件基本操作,包括创建、读取、写入删除以及遍历等。一、文件操作基础在Golang,os和io/ioutil包提供了丰富文件操作函数。...虽然io/ioutil包在Go 1.16及以后版本逐渐被os和io包新函数所取代,但了解它用法仍然有助于理解Go语言文件操作历史演变。1....写入文件写入文件内容可以使用os.WriteFile(Go 1.16+)或ioutil.WriteFile(废弃),或者通过创建文件并使用os.FileWrite方法。...四、总结通过本文介绍,我们了解了如何在Golang中进行文件文件基本操作。从读取文件内容、写入文件,到创建、删除以及遍历文件夹,我们掌握了Golang中文件操作核心技能。

    7410

    Go 语言中 gRPC 基础入门

    如果是 io.EOF,则消息流结束,服务器可以返回其 RouteSummary。如果它具有其他值,我们将返回“原样”错误,以便 gRPC 层将其转换为 RPC 状态。...但是,这次,当客户端仍在向其消息流写入消息时,我们通过方法返回值。...请注意,在 gRPC-Go ,RPC 在阻塞/同步模式下运行,这意味着 RPC 调用等待服务器响应,并且将返回响应或错误。...如果调用没有返回错误,那么我们可以从服务器第一个返回读取响应信息。...07 总结 本文开篇先介绍了为什么要使用 gRPC,接着简述了使用 gRPC 需要做准备工作,然后通过 gRPC 官方 Go 示例代码介绍了如何在 .proto 文件定义服务,如何使用 protoc

    1.5K20
    领券