Use map for entries and slice for toc instead of iterating over slice with Entries every time
This commit is contained in:
parent
daaddbb56b
commit
97e4cbb158
2 changed files with 13 additions and 33 deletions
42
database.go
42
database.go
|
@ -7,47 +7,27 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Entry struct {
|
|
||||||
Name string // from filename
|
|
||||||
Content string // from content
|
|
||||||
}
|
|
||||||
|
|
||||||
type Database struct {
|
type Database struct {
|
||||||
Entries []Entry
|
Keys []string
|
||||||
}
|
Entries map[string]string
|
||||||
|
|
||||||
func (db *Database) TOC() []string {
|
|
||||||
var names []string
|
|
||||||
for _, e := range db.Entries {
|
|
||||||
names = append(names, e.Name)
|
|
||||||
}
|
|
||||||
return names
|
|
||||||
}
|
|
||||||
|
|
||||||
func (db *Database) Entry(name string) string {
|
|
||||||
// returns empty string if not found
|
|
||||||
result := ""
|
|
||||||
for _, e := range db.Entries {
|
|
||||||
if e.Name == name {
|
|
||||||
result = e.Content
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func BuildDB(directory string) Database {
|
func BuildDB(directory string) Database {
|
||||||
logger := log.Default()
|
logger := log.Default()
|
||||||
logger.Println("Building database")
|
logger.Println("Building database")
|
||||||
var entries []Entry
|
// keys, entries
|
||||||
|
var keys []string
|
||||||
|
entries := map[string]string{}
|
||||||
// get files in directory and read them
|
// get files in directory and read them
|
||||||
directory = strings.TrimRight(directory, "/") // we don't need that last / -> if '/' is used as directory, you are dumb.
|
directory = strings.TrimRight(directory, "/") // we don't need that last / -> if '/' is used as directory, you are dumb.
|
||||||
entriesDirFs := os.DirFS(directory)
|
entriesDirFs := os.DirFS(directory)
|
||||||
files, err := fs.Glob(entriesDirFs, "*")
|
keys, err := fs.Glob(entriesDirFs, "*")
|
||||||
if err != nil { logger.Panicln(err) }
|
if err != nil { logger.Panicln(err) }
|
||||||
for _, f := range files {
|
for _, k := range keys {
|
||||||
contentB, err := os.ReadFile(directory + "/" + f)
|
contentB, err := os.ReadFile(directory + "/" + k)
|
||||||
if err != nil { logger.Panicln(err) }
|
if err != nil { logger.Panicln(err) }
|
||||||
entries = append(entries, Entry{Name: f, Content: string(contentB)})
|
entries[k] = string(contentB)
|
||||||
}
|
}
|
||||||
return Database{Entries: entries}
|
// create bleve index
|
||||||
|
return Database{Keys: keys, Entries: entries}
|
||||||
}
|
}
|
||||||
|
|
4
main.go
4
main.go
|
@ -37,11 +37,11 @@ func handleApplication(w http.ResponseWriter, req *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
// load entry
|
// load entry
|
||||||
entry = db.Entry(entryName)
|
entry = db.Entries[entryName]
|
||||||
}
|
}
|
||||||
err = appTemplate.ExecuteTemplate(
|
err = appTemplate.ExecuteTemplate(
|
||||||
w, "app",
|
w, "app",
|
||||||
TemplateData{TOC: db.TOC(), Entry: entry, Title: MainTitle, EntryTitle: entryName})
|
TemplateData{TOC: db.Keys, Entry: entry, Title: MainTitle, EntryTitle: entryName})
|
||||||
if err != nil { logger.Println(err) }
|
if err != nil { logger.Println(err) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Reference in a new issue