Ok, I think I see what you mean.<p>Well, I think unfortunately my sketchy code examples maybe did not cover the idea in enough detail.<p>What I&#x27;m doing in practice is to create different struct types for each type of process I use, which all are of a &quot;base interface&quot; called &quot;process&quot; (mainly for the Run() method, so that the pipeline component can call it).<p>An example of this in action is shown in this code example on the Go playground: <a href="http:&#x2F;&#x2F;play.golang.org&#x2F;p&#x2F;voUfPGQulf" rel="nofollow">http:&#x2F;&#x2F;play.golang.org&#x2F;p&#x2F;voUfPGQulf</a><p>The typing of channels for each process struct type should now enforce what components can be connected together (you will not be able to assign a &quot;string chan&quot; to a &quot;[]byte chan&quot; field, for example).<p>Did this answer the question, or do you see further problems here?