diff --git a/dict/.gitignore b/dict/.gitignore index 30e4d8d..18e00d2 100644 --- a/dict/.gitignore +++ b/dict/.gitignore @@ -1 +1,2 @@ -JMdict.xml \ No newline at end of file +JMdict.xml +dict.bin \ No newline at end of file diff --git a/dict/main.go b/dict/main.go index b234102..073ab2e 100644 --- a/dict/main.go +++ b/dict/main.go @@ -1,6 +1,7 @@ package main import ( + "encoding/gob" "encoding/json" "fmt" "log" @@ -16,6 +17,21 @@ import ( var dict map[string]Entry func LoadDict() error { + // Loading from binary + const binaryFile = "dict.bin" + file, err := os.Open(binaryFile) + if err != nil { + if !os.IsNotExist(err) { + return err + } + } else { + defer file.Close() + decoder := gob.NewDecoder(file) + err = decoder.Decode(&dict) + return err + } + + // Loading from JMdict const jmdictFile = "JMdict.xml" reader, err := os.Open(jmdictFile) if err != nil { @@ -30,6 +46,19 @@ func LoadDict() error { entry := ParseEntry(&jmdictEntry) dict[entry.Kanji] = entry } + + // Encoding to binary + file, err = os.Create(binaryFile) + if err != nil { + return err + } + defer file.Close() + encoder := gob.NewEncoder(file) + err = encoder.Encode(&dict) + if err != nil { + return err + } + return nil }