package kafkaclient import ( "context" "encoding/json" "fmt" "sync" "github.com/segmentio/kafka-go" ) func Consume[T any](r *kafka.Reader, ch chan<- T, ctx context.Context, wg *sync.WaitGroup) { defer wg.Done() for { select { case <-ctx.Done(): fmt.Println("consumer closed") return default: msg, err := r.ReadMessage(ctx) if err != nil { fmt.Println("error reading message:", err) continue } var data T if err := json.Unmarshal(msg.Value, &data); err != nil { fmt.Println("error decoding:", err) continue } ch <- data } } }