Collection of small packages.
Use stackerr.Errorf("%w", err) everywhere, and then log.Printf("%+v", err) for helpful error stack trace.
When using slog package, the trace is simplified to a single-line.
Use %w verb to wrap existing errors:
return stackerr.Errorf("parsing file: %w", io.EOF)
// elsewhere, print with slog or log:
slog.Error("reading file", "err", err)
log.Printf("reading file: %+v")
println(fmt.Sprintf("%+v", err))Use var to swap with fmt.Errorf making refactoring easy.
var Errorf = stackerr.Errorf
var Errorf = fmt.Errorf
// elsewhere:
return Errorf("%w", err)Cancellable Channel Context superchan
import (
"context"
"os"
"syscall"
"github.com/aerth/mostly/superchan"
)
var (
mainctx = superchan.NewMain(newmainctx,
syscall.SIGINT, syscall.SIGHUP, syscall.SIGTERM).(*superchan.Superchan[os.Signal])
_ context.CancelCauseFunc = mainctx.Cancel
_ context.Context = mainctx
_ context.Context = mainctx.Context // to pass only the ctx not a canceller
)encoding, twist arrays ([]string -> []MyString -> []string)
// example, turn strings to *url.URL
var urls []*url.URL
var err error
urls, err = ncode.TwistParsePtr([]string{"https://google.com", "https://myspace.com"}, url.Parse)
var envs []string
envs, err = ncode.TwistParse([]string{"XDG_CONFIG_HOME", "HOME"}, os.Getenv)tiny ai client for llm and embeddings
Works with llama.cpp and ollama, using /v1/chat/completions endpoint. The Default function loads a new client from environment (LLM_MODEL, LLM_HOST, LLM_API_KEY)
package main
import (
"context"
"github.com/aerth/mostly/mllm"
)
func main() {
ctx := context.TODO()
_, err := mllm.Default().Generate(ctx, "[some system prompt]", "[some prompt]", false)
if err != nil {
println(err.Error())
}
}a cancellable, signal handling, httpserver+context combo for all kinds of web server programs
package main
import (
"fmt"
"net/http"
"time"
"github.com/aerth/mostly/httpserver"
)
func main() {
srv := httpserver.NewDefault()
go func() {
time.Sleep(time.Second * 10)
srv.Cancel(fmt.Errorf("insert more coin"))
}()
srv.HandleFunc("GET /{$}", func(w http.ResponseWriter, r *http.Request) {
_, _ = fmt.Fprintf(w, "Hello!\n")
})
err := srv.ListenAndServeAll(":80", ":443", "cert.pem", "key.pem")
println("the error is:", err.Error())
}InverseBoolVar (eg: --no-foo to set foo to false)
import "github.com/aerth/mostly/flagpkg"
// example:
cfg.ComplatePage = true
flagpkg.InverseBoolVar(&cfg.CompletePage, "no-complete", cfg.CompletePage, "dont make whole html page")For FilterCopy and FilterInPlace
// filter evens and odds different ways.
// notice the Backing has two [7,9] after filters.FilterInPlace.
nums := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
evenCopy := filters.FilterCopy(nums, func(n int) bool {
return n%2 == 0
})
fmt.Println("Original:", nums)
fmt.Println("Copy:", evenCopy)
oddInPlace := filters.FilterInPlace(nums, func(n int) bool {
return n%2 != 0
})
fmt.Println("InPlace:", oddInPlace)
fmt.Println("Backing:", nums)
// Output:
// Original: [1 2 3 4 5 6 7 8 9 10]
// Copy: [2 4 6 8 10]
// InPlace: [1 3 5 7 9]
// Backing: [1 3 5 7 9 6 7 8 9 10]import (
"log"
"github.com/aerth/mostly/journalwriter"
)
func foo() {
log.SetOutput(journalwriter.GetJournalOrStderr(journalwriter.PriInfo))
log.Printf("hello systemd journal")
_ = journalwriter.Send(msg, journalwriter.PriInfo, map[string]string{
"SYSLOG_IDENTIFIER": "mostly", // instead of program_invocation_short_name(3)
})
}