For what it's worth, my SPDY library uses Go's channels to perform interleaving with priority. It has one channel per priority, and uses a separate Goroutine to perform sending. This sending goroutine checks for any frames in the priority 0 channel, then checks priority 1, and so on until all channels have been checked. If it finds a frame in any channel, that frame is sent and the process begins again. If no frames are found in any channel, then all channels are listened to, so the next frame put in any channel will be sent, irrespective of priority, since it will be the only available frame.
This means that frames of higher priority will always be sent before frames of lower priority, but that frames are otherwise sent as soon as possible, in the order in which they're placed in an output channel. Since the sending goroutine is unaware of streams, interleaving will occur naturally.
I apologise for the poor description, but I thought it might be useful to explain how my library performs the interleaving.