added channel-buffering
added channels
added goroutine
added interfaces