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