Skip to content

floatdrop/demux

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

demux

CI Go Report Card Go Reference License: MIT

demux is a lightweight Go package that provides flexible and generic demultiplexing (fan-out) utilities for channels. It allows you to route items from a single input channel to multiple output channels based on dynamic or static keys.

Features

  • Dynamic Demuxing: Automatically spawn goroutines for each unique key, with dedicated channels.
  • Static Demuxing: Route messages to pre-defined channels based on their keys.
  • Generic: Uses Go generics for maximum flexibility.

Installation

go get github.com/floatdrop/demux

Usage

Dynamic Demuxing

Dynamic demuxes messages from an input channel to a dynamically created set of output channels, one per key. Each unique key launches a dedicated goroutine running consumeFunc.

demux.Dynamic(input, func(msg MyType) string {
    return msg.UserID // or any key
}, func(key string, ch <-chan MyType) {
    for msg := range ch { // start consuming messages with same UserID
        fmt.Printf("Consumer for %s got: %+v\n", key, msg)
    }
})

Static Demuxing

Static demuxes messages based on a key and routes them to pre-defined channels in a map.

channels := map[string]chan MyType{
    "alpha": make(chan MyType),
    "beta":  make(chan MyType),
}

go demux.Static(input, func(msg MyType) string {
    return msg.Group
}, channels)

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

This project is licensed under the MIT License - see the LICENSE file for details.

About

Static and dynamic demultiplexer

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages