golang bad file descriptor问题的解决方法

 更新时间:2019-02-06 22:00:15   作者:佚名   我要评论(0)

发现问题
在golang中,对文件进行写操作时出现上面的错误。首先复现下这个问题。


package main

import (
"os"
"fmt"
)

func main() {
file, err := os

发现问题

在golang中,对文件进行写操作时出现上面的错误。首先复现下这个问题。

package main

import (
 "os"
 "fmt"
)

func main() {
 file, err := os.Open("a.txt")
 if err != nil {
  fmt.Println(err)
 }
 defer file.Close()

 content:=[]byte("Go is an open source programing language that makes it easy to build simple,reliable,and efficient software")
 _, err = file.Write(content)
 if err != nil {
  fmt.Println(err)
 }
}

此时运行就会出现错误write a.txt: bad file descriptor。这是什么原因呢?其实这和os.Open()函数有关,下面了解下Open()函数。

func Open(name string) (*File,error) {
 return OpenFile(name, O_RDONLY, 0)
}

可以看出来,Open函数打开文件的默认方式是只读,所以当你要对打开的文件进行写操作时,是不被允许的。OpenFile函数的第二个传入参数的值可以是:

参数名 含义
O_RDONLY 打开只读文件
O_WRONLY 打开只写文件
O_RDWR 打开既可以读取又可以写入文件
O_APPEND 写入文件时将数据追加到文件尾部
O_CREATE 如果文件不存在,则创建一个新的文件
O_EXCL 文件必须不存在,然后会创建一个新的文件
O_SYNC 打开同步I/0
O_TRUNC 文件打开时可以截断 

解决方法

现在知道原因,解决方法只要改变文件读取的方式就行。如下例:

package main

import (
 "os"
 "fmt"
)

func main() {
 file, err := os.OpenFile("a.txt", os.O_APPEND|os.O_WRONLY, os.ModeAppend)
 if err != nil {
  fmt.Println(err)
 }
 defer file.Close()

 content:=[]byte("Go is an open source programing language that makes it easy to build simple,reliable,and efficient software")
 _, err = file.Write(content)
 if err != nil {
  fmt.Println(err)
 }
}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

您可能感兴趣的文章:

  • GO语言标准错误处理机制error用法实例
  • Go语言中更优雅的错误处理
  • Golang报“import cycle not allowed”错误的2种解决方法
  • Go语言中错误处理实例分析
  • golang新手们容易犯的3个错误总结

相关文章

  • golang bad file descriptor问题的解决方法

    golang bad file descriptor问题的解决方法

    发现问题 在golang中,对文件进行写操作时出现上面的错误。首先复现下这个问题。 package main import ( "os" "fmt" ) func main() { file, err := os
    2019-02-06
  • golang bufio包中Write方法的深入讲解

    golang bufio包中Write方法的深入讲解

    前言 bufio包实现了带缓冲的I/O,它封装了io.Reader和io.Writer对象,然后创建了另外一种对象(Reader或Writer)实现了相同的接口,但是增加了缓冲功能。
    2019-02-06
  • java8新特性之Optional的深入解析

    java8新特性之Optional的深入解析

    前言 最近脑袋发热追着java8源码看的很起劲,还有了执念,罪过。 本文以jdk1.8.0_111源码为例 public final class Optional<T> {} Optional是一个为了解决
    2019-02-06
  • PHP simplexml_load_string()函数实例讲解

    PHP simplexml_load_string()函数实例讲解

    PHP simplexml_load_string() 函数 实例 转换形式良好的 XML 字符串为 SimpleXMLElement 对象,然后输出对象的键和元素: <&#63;php $note=<<<XML <note>
    2019-02-03
  • PHP addslashes()函数讲解

    PHP addslashes()函数讲解

    PHP addslashes() 函数 实例 在每个双引号(")前添加反斜杠: <&#63;php $str = addslashes('What does "yolo" mean&#63;'); echo($str); &#63;> 定义
    2019-02-03
  • PHP addcslashes()函数讲解

    PHP addcslashes()函数讲解

    PHP addcslashes() 函数 实例 在字符 "W" 前添加反斜杠: <&#63;php $str = addcslashes("Hello World!","W"); echo($str); &#63;> 定义和用法 addcsla
    2019-02-03
  • python生成每日报表数据(Excel)并邮件发送的实例

    python生成每日报表数据(Excel)并邮件发送的实例

    逻辑比较简单 ,直接上代码 定时发送直接使用了win服务器的定时任务来定时执行脚本 #coding:utf-8 from __future__ import division import pymssql,sys,d
    2019-02-03
  • 使用Python快速制作可视化报表的方法

    使用Python快速制作可视化报表的方法

    我们可以试用可视化包——Pyechart。 Echarts是百度开源的一个数据可视化JS库,主要用于数据可视化。 pyecharts是一个用于生成Echarts图标的类库。实际就是Ec
    2019-02-03
  • PHP count()函数讲解

    PHP count()函数讲解

    PHP count() 函数 实例 计算 car 节点的子节点个数: <&#63;php $xml=<<<XML <cars> <car name="Volvo"> <child/> <child/> <child/> <child/> </ca
    2019-02-03
  • PHP simplexml_import_dom()函数讲解

    PHP simplexml_import_dom()函数讲解

    PHP simplexml_import_dom() 函数 实例 获取 DOM 文档节点并转换为 SimpleXML 节点: <&#63;php $dom=new domDocument; $dom->loadXML("<note><to>Tove</
    2019-02-03

最新评论