2016-04-18 4 views
0

DBの代わりにファイルを使用してプロトタイプを作成して実行しようとしています。私は、(1)既存のコンテンツをファイルから地図に読み込み、(2)地図にコンテンツを追加するJSON POST、(3)終了時にファイルに書き込むというプログラムがあります。Goでioutil.ReadFileから整列する内容のファイルがあるかどうかを確認する方法

まず、ファイルが作成されていません。それから私は空のファイルを作成しました。それは書かれていない。 ファイルを読み込み、既存のコンテンツがあるかどうかを確認しようとしています。既存のコンテンツがない場合は、空白のマップを作成します。既存のコンテンツがある場合は、新しいマップに非マーシャルします。

func writeDB() { 
    eventDBJSON, err := json.Marshal(eventDB) 
    if err != nil { 
     panic(err) 
    } 

    err2 := ioutil.WriteFile("/Users/sarah/go/dat.txt", eventDBJSON, 0777) 
    if err2 != nil { 
     panic(err2) 
    } 
} 

func main() { 

    dat, err := ioutil.ReadFile("/Users/sarah/go/dat.txt") 
    if err != nil { 
     panic(err) 
    } 
    if dat == nil { 
     eventDB = DB{ 
      events: map[string]event{}, 
     } 
    } else { 
     if err2 := json.Unmarshal(dat, &eventDB); err2 != nil { 
      panic(err2) 
     } 
    } 

    router := httprouter.New() 
    router.POST("/join", JoinEvent) 
    router.POST("/create", CreateEvent) 

    log.Fatal(http.ListenAndServe(":8080", router)) 

    defer writeDB() 

} 

答えて

0

あなたが得るために(*os.File).Stat()を使用することができ、ファイルのサイズ

file, err := os.Open(filepath) 
    if err != nil { 
     // handle error 
    } 

    fi, err := file.Stat() 
    if err != nil { 
     // handle error 
    } 

    s := fi.Size() 
1

サーバーが今までdefer writeDB()に到達するための方法はありませんが含まれていFileInfo

http.ListenAndServeブロックを返します。何かが返された場合は、その時点でアプリケーションを終了するlog.Fatalというブロックがあります。

あなたはなど、SIGKILL、パワーの機械損失を取得し、アプリが終了することができ、すべての方法を傍受することはできません

私はあなたが実際には、いくつかのコードを記述し、サーバーをバウンス、

を繰り返したいと仮定しています

その場合、Ctrl-Cで十分です。

ファイルをCtrl-Cに書きたい場合は、signalパッケージをご覧ください。

また、関数の最後の行を延期することは、実際には目的がありません。つまり、延期とは基本的には「最後に行う」という意味です。

関連する問題