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
- 【易語言】編輯框讀取txt檔案
- Linux– 檔案編輯器 vi/vim(1)Linux
- 使用vim對被編輯檔案加密 (轉)加密
- 用vim安全編輯遠端檔案(轉)
- vi和vim的編輯模式模式
- Linux(CentOS7)使用vim編輯檔案LinuxCentOS
- java 讀取.txt檔案時,注意的問題Java
- 【Django】檔案讀取時路徑問題Django
- 檔案中隨機讀取行問題隨機
- vim學習筆記——多檔案、多視窗編輯筆記
- Java讀取文字檔案中文亂碼問題Java
- Linux Vim編輯的的配置和使用Linux
- vim編輯器
- go學習之檔案讀取問題(需更新)Go
- Linux-vim文字編輯器-三種模式-vim裡的替換-vim檢視模式-對比檔案Linux模式
- 關於websphere讀取war配置檔案出錯的問題Web
- vim 編輯報錯導致無法正常退出和編輯
- python讀取檔案——python讀取和儲存mat檔案Python
- csv檔案的寫入和讀取
- vim 列編輯模式模式
- Java 專案讀取 resource 資原始檔路徑問題Java
- 如何使用Python讀取文字檔案並回答問題?Python
- VIM編輯器的巨集操作
- Vim 編輯器的相容模式模式
- vim編輯器常用的命令
- 關於dataWithContentsOfFile 讀取大檔案的記憶體問題記憶體
- word檔案怎樣取消只讀模式 把只讀檔案轉化為可編輯檔案模式
- Java中的獲取檔案的物理絕對路徑,和讀取檔案Java
- IO流-檔案的寫入和讀取
- 3 個可以替代 Emacs 和 Vim 的文字編輯器Mac
- C#讀取文字檔案和寫文字檔案C#
- LINUX VIM編輯器Linux
- Go 專案配置檔案的定義和讀取Go
- 03_vim編輯器的使用
- 編輯器之神:VIM 的基本操作
- 『學了就忘』vim編輯器基礎 — 94、vim編輯器介紹
- 如何編輯PDF檔案