os.Open 讀取檔案和 vim 編輯的問題
寫了一個函式,用來讀取配置檔案。函式跑在 goroutine 裡面,一直不斷載入新的配置。發現一個問題:用 vim 編輯檔案之後,儲存不退出(w)的話,程式報錯: no such file or directory。編輯之後儲存退出(wq)則不會出現該問題。不知道儲存不退出的操作為什麼會使得 os.Open 無法找到檔案,有沒有大牛幫忙指點一下?謝謝~~~ 程式碼如下:
package main
import (
"encoding/json"
"fmt"
"os"
"time"
)
const subscriptionFile = "subscription.json"
type Subscription struct {
Id uint8 `json:"id"`
Name string `json:"name"`
Url []string `json:"url"`
}
func (sub Subscription) IsEqual(sub2 Subscription) bool {
if sub.Id == sub2.Id && sub.Name == sub2.Name {
if len(sub.Url) == len(sub2.Url) {
for i, url := range sub.Url {
if url != sub2.Url[i] {
return false
}
}
return true
} else {
return false
}
} else {
return false
}
}
// 從 json 檔案裡讀取配置
func loadSubscription() []Subscription {
file, err := os.Open(subscriptionFile)
if err != nil {
fmt.Println(err)
os.Exit(-1)
}
defer file.Close()
var subscriptions []Subscription
_ = json.NewDecoder(file).Decode(&subscriptions)
return subscriptions
}
var Subscriptions []Subscription
func init() {
// load subscription.json
Subscriptions = loadSubscription()
}
func checkSubscription() {
newSubscriptions := loadSubscription()
// check subscription.json has changed
if len(newSubscriptions) == len(Subscriptions) {
for i, sub := range newSubscriptions {
if !(sub.IsEqual(Subscriptions[i])) {
Subscriptions = newSubscriptions
return
}
}
} else {
Subscriptions = newSubscriptions
}
}
func main() {
wait := make(chan struct{}, 1)
go func() {
for {
checkSubscription()
}
}()
go func() {
for {
fmt.Println(Subscriptions)
time.Sleep(time.Second * 10)
}
}()
<-wait
}
更多原創文章乾貨分享,請關注公眾號
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- QDomDocument 讀取和編輯xml檔案XML
- Linux– 檔案編輯器 vi/vim(1)Linux
- 【易語言】編輯框讀取txt檔案
- Linux(CentOS7)使用vim編輯檔案LinuxCentOS
- vi和vim的編輯模式模式
- 【Django】檔案讀取時路徑問題Django
- Linux Vim編輯的的配置和使用Linux
- vim學習筆記——多檔案、多視窗編輯筆記
- Linux-vim文字編輯器-三種模式-vim裡的替換-vim檢視模式-對比檔案Linux模式
- 如何使用Python讀取文字檔案並回答問題?Python
- go學習之檔案讀取問題(需更新)Go
- 關於dataWithContentsOfFile 讀取大檔案的記憶體問題記憶體
- vim編輯器
- vim編輯器的使用
- csv檔案的寫入和讀取
- 隨處可編輯的編輯器之神VIM
- Java 專案讀取 resource 資原始檔路徑問題Java
- vim 編輯報錯導致無法正常退出和編輯
- vim 列編輯模式模式
- LINUX VIM編輯器Linux
- CentOS vim編輯器CentOS
- vi/vim編輯器
- word檔案怎樣取消只讀模式 把只讀檔案轉化為可編輯檔案模式
- Java中的獲取檔案的物理絕對路徑,和讀取檔案Java
- VIM編輯器的巨集操作
- rpm包的校驗和檔案讀取
- kodbox讀取alist檔案失敗,問題解決過程
- C#讀取文字檔案和寫文字檔案C#
- Go 專案配置檔案的定義和讀取Go
- 增強 Vim 編輯器,提高編輯效率
- 解決eclipse編輯jsp、js檔案時,經常出現卡死的問題EclipseJS
- JavaWeb中讀取【專案路徑下檔案】的路徑問題:this.getServletContext().getRealPath()JavaWebServletContext
- SpringBoot 解決打包釋出後讀取不到 json 檔案問題Spring BootJSON
- 如何讀取和寫入JSON檔案JSON
- python檔案建立、讀取和寫入Python
- 編輯器之神:VIM 的基本操作
- 03_vim編輯器的使用
- Fnt檔案編輯工具