Skip to content

floatdrop/demux

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 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

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy