use channel and goroutine