golang bad file descriptor問題的解決方法
發(fā)現(xiàn)問題
在golang中,對(duì)文件進(jìn)行寫操作時(shí)出現(xiàn)上面的錯(cuò)誤。首先復(fù)現(xiàn)下這個(gè)問題。
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)
}
}
此時(shí)運(yùn)行就會(huì)出現(xiàn)錯(cuò)誤write a.txt: bad file descriptor。這是什么原因呢?其實(shí)這和os.Open()函數(shù)有關(guān),下面了解下Open()函數(shù)。
func Open(name string) (*File,error) {
return OpenFile(name, O_RDONLY, 0)
}
可以看出來,Open函數(shù)打開文件的默認(rèn)方式是只讀,所以當(dāng)你要對(duì)打開的文件進(jìn)行寫操作時(shí),是不被允許的。OpenFile函數(shù)的第二個(gè)傳入?yún)?shù)的值可以是:
參數(shù)名 含義
O_RDONLY 打開只讀文件
O_WRONLY 打開只寫文件
O_RDWR 打開既可以讀取又可以寫入文件
O_APPEND 寫入文件時(shí)將數(shù)據(jù)追加到文件尾部
O_CREATE 如果文件不存在,則創(chuàng)建一個(gè)新的文件
O_EXCL 文件必須不存在,然后會(huì)創(chuàng)建一個(gè)新的文件
O_SYNC 打開同步I/0
O_TRUNC 文件打開時(shí)可以截?cái)?nbsp;
解決方法
現(xiàn)在知道原因,解決方法只要改變文件讀取的方式就行。如下例:
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)
}
}
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
golang操作elasticsearch的實(shí)現(xiàn)
這篇文章主要介紹了golang操作elasticsearch,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
Go中g(shù)in框架的*gin.Context參數(shù)常見實(shí)用方法
*gin.Context是處理HTTP請(qǐng)求的核心,ctx代表"context"(上下文),它包含了處理請(qǐng)求所需的所有信息和方法,例如請(qǐng)求數(shù)據(jù)、響應(yīng)構(gòu)建器、路由參數(shù)等,這篇文章主要介紹了Go中g(shù)in框架的*gin.Context參數(shù)常見實(shí)用方法,需要的朋友可以參考下2024-07-07
golang用melody搭建輕量的websocket服務(wù)的示例代碼
在Go中,可以使用gin和melody庫(kù)來搭建一個(gè)輕量級(jí)的WebSocket服務(wù),gin是一個(gè)流行的Web框架,而melody是一個(gè)用于處理WebSocket的庫(kù),本文給大家演示如何使用gin和melody搭建WebSocket服務(wù),感興趣的朋友一起看看吧2023-10-10
基于Go+WebSocket實(shí)現(xiàn)實(shí)時(shí)通信功能
在互聯(lián)網(wǎng)應(yīng)用程序中,實(shí)時(shí)通信是一種非常重要的功能,WebSocket 是一種基于 TCP 的協(xié)議,它允許客戶端和服務(wù)器之間進(jìn)行雙向通信,本文將介紹如何使用 Golang 創(chuàng)建單獨(dú)的 WebSocket 會(huì)話,以實(shí)現(xiàn)實(shí)時(shí)通信功能,需要的朋友可以參考下2023-10-10
golang?gorm學(xué)習(xí)之如何指定數(shù)據(jù)表
在sql中首先要指定是從哪張表中查詢,所以這篇文章小編就來帶大家一起看一下gorm是如何根據(jù)model來自動(dòng)解析表名的,感興趣的小伙伴可以了解下2023-08-08
使用golang如何優(yōu)雅的關(guān)機(jī)或重啟操作示例
這篇文章主要為大家介紹了使用golang如何優(yōu)雅的關(guān)機(jī)或重啟操作示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-04-04
goframe重寫FastAdmin后端實(shí)現(xiàn)實(shí)例詳解
這篇文章主要為大家介紹了goframe重寫FastAdmin后端實(shí)現(xiàn)實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12
Golang實(shí)現(xiàn)字符串倒序的幾種解決方案
給定一個(gè)字符串,按單詞將該字符串逆序是我們大家在開發(fā)中可能會(huì)遇到的一個(gè)需求,所以下面這篇文章主要給大家介紹了關(guān)于Golang如何實(shí)現(xiàn)字符串倒序的幾種解決方案,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。2017-10-10

