Seit ich begonnen habe mit Go eigene Projekte zu entwickeln, stoße ich immer wieder auf dieselben Probleme. Daher speichere ich hier eine Liste der Tools, für die ich (meistens nach gründlicher Recherche) entschieden habe.
HTTP Router
- ShiftPath
// ShiftPath splits off the first component of p, which will be cleaned of // relative components before processing. head will never contain a slash and // tail will always be a rooted path without trailing slash. func ShiftPath(p string) (head, tail string) { p = path.Clean("/" + p) i := strings.Index(p[1:], "/") + 1 if i <= 0 { return p[1:], "/" } return p[1:i], p[i:] }
- Chi
Logging
- Zap
logger, _ := zap.NewProduction() defer logger.Sync() logger.Info("failed to fetch URL", // Structured context as strongly typed Field values. zap.String("url", url), zap.Int("attempt", 3), zap.Duration("backoff", time.Second), )
Static File Embedding
- vfsgen
- SPA Utility
type spaFileSystem struct { root http.FileSystem } func (fs *spaFileSystem) Open(name string) (http.File, error) { f, err := fs.root.Open(name) if os.IsNotExist(err) { return fs.root.Open("index.html") } return f, err } fs := http.FileServer(&spaFileSystem{http.Dir("static")}) http.Handle("/", fs)