One thing that immediately set off my radar (as a Go programmer) is the paintingLoop switch on type.
Yes, sometimes a switch on type is necessary. However, this is not one of those cases.
You want to have a Triangle and Line with a Draw() method and a "Drawable" interface... and then just call into it. The signature of the loop in question then is paintingLoop(ch chan Drawable).
An abuse of naming, but a Quit.Draw() could actually quit, for example. This is just offhand though.
In short, good article, but the Go examples are written with a Rust intuition. Which, I mean, fair enough; I started writing Go with a C++ intuition, with different questionable practices ;)