go-template/internal/greeter/greeter.go
2026-03-05 21:52:10 +01:00

49 lines
1.2 KiB
Go

// Package greeter is a minimal example domain package.
// It demonstrates how to:
// - define an interface (mockable via mockery)
// - inject dependencies (logger) through a constructor
// - use the logger.WithField pattern
//
// Replace this package with your own domain logic.
package greeter
import (
"fmt"
"github.com/your-org/go-template/internal/logger"
)
//go:generate mockery --name=Greeter
// Greeter produces a greeting for a given name.
// The interface is what other packages should depend on — never the concrete type.
type Greeter interface {
Greet(name string) (string, error)
}
// Service is the concrete implementation.
type Service struct {
log *logger.Logger
}
// New creates a Greeter service with the provided logger.
func New(log *logger.Logger) *Service {
return &Service{log: log}
}
// Greet returns a personalised greeting and logs the interaction.
func (s *Service) Greet(name string) (string, error) {
if name == "" {
return "", fmt.Errorf("greeter: name must not be empty")
}
msg := fmt.Sprintf("Hello, %s!", name)
s.log.
WithField("component", "greeter").
WithField("name", name).
Info("greeting generated")
return msg, nil
}