Go advanced concurrency patterns: part 1