Tutorial 25
Write some static content.
Example
// Copyright (c) 2025 worldiety GmbH
//
// This file is part of the NAGO Low-Code Platform.
// Licensed under the terms specified in the LICENSE file.
//
// SPDX-License-Identifier: Custom-License
package main
import (
"bytes"
"go.wdy.de/nago/application"
"go.wdy.de/nago/pkg/blob"
"go.wdy.de/nago/pkg/std"
"go.wdy.de/nago/presentation/core"
"go.wdy.de/nago/presentation/ui"
"go.wdy.de/nago/web/vuejs"
)
func main() {
application.Configure(func(cfg *application.Configurator) {
cfg.SetApplicationID("de.worldiety.tutorial")
cfg.Serve(vuejs.Dist())
// EntityStore is only for small files upto a few kilobytes.
// This store saves everything within a single file using etcd bbolt fork.
// Transactions are supported.
//
// In this example, the database file is ~/.de.worldiety.tutorial/bbolt/bolt.db
dbstore := std.Must(cfg.EntityStore("small-blobs"))
// quickly write some bytes using a transaction with a single write.
if _, err := blob.Write(dbstore, "my key", bytes.NewBufferString("I'm a fine blob")); err != nil {
panic(err)
}
// read them out
var buf1 bytes.Buffer
if ok, err := blob.Read(dbstore, "my key", &buf1); err != nil || !ok {
panic(err)
}
// FileStore is for large blobs, from hundreds of kilobytes to gigabytes.
// It stores each blobs as a single file directly in the local filesystem.
// There is no transaction support at all, however some tricks like atomic rename are used to
// lower the risk of damaged files.
//
// In this example, the files land in ~/.de.worldiety.tutorial/files/my-large-blobs
fstore := std.Must(cfg.FileStore("my-large-blobs"))
// quickly write some bytes
if _, err := blob.Write(fstore, "my key", bytes.NewBufferString("I'm a good blob")); err != nil {
panic(err)
}
// read them out
var buf2 bytes.Buffer
if ok, err := blob.Read(fstore, "my key", &buf2); err != nil || !ok {
panic(err)
}
cfg.RootView(".", func(wnd core.Window) core.View {
return ui.Text(buf1.String() + " & " + buf2.String())
})
}).Run()
}
Info
More static content.