Go Project
- 1. Logging & Observabilityβ Slog & Multiwriter
logger := slog.New(slog.NewJSONHandler(io.MultiWriter(os.Stdout, logFile), nil)) slog.SetDefault(logger)
β Log File RotationlogFile := &lumberjack.Logger{ Filename: "app.log", MaxSize: 10, // MB MaxBackups: 3, MaxAge: 30, // days Compress: true, }
2. Routing & API Frameworkβ Go Chir := chi.NewRouter() r.Use(middleware.Logger) r.Get("/users/{id}", getUserHandler)
3. Database & Query Handlingβ Postgresβ Raw Query (Instead of ORM like GORM)db.Exec("INSERT INTO users (name, email) VALUES ($1, $2)", name, email)
β Transaction Handlingtx, err := db.Begin() if err != nil { return err } defer tx.Rollback() _, err = tx.Exec("UPDATE users SET balance = balance - $1 WHERE id = $2", amount, userID) if err != nil { return err } return tx.Commit()
4. Configuration Managementβ Environment-Based Config5. Dependency Injection (DI)β Wire atau Fx6. Error Handling yang Konsistenβ Sentinel Errors & Wrapping7. Context Managementβ Timeout & Deadline8. Security & Best Practicesβ Input Validation & Hashingβ Rate Limiting & Secrets Management9. Efficient Goroutine & Worker Pool Managementβ Worker Pool & sync.Pool10. Graceful Shutdownβ Handling SIGINT/SIGTERM11. Modul & Package Organizationβ Domain-Driven Design (DDD) & Separation of Concerns12. CI/CD & Deploymentβ GitHub Actions / GitLab CI
Last updated