title: Wait result of multiple goroutines
body: <p>I am searching a way to execute asynchronously two functions in go which returns different results and errors, wait for them to finish and print both results. Also if one of function returned error I do not want to wait for another function, and just print the error.
  For example, I have this functions:</p>
  
  <pre><code>func methodInt(error bool) (int, error) {
      &lt;-time.NewTimer(time.Millisecond * 100).C
      if error {
          return 0, errors.New("Some error")
      } else {
          return 1, nil
      }
  }
  
  func methodString(error bool) (string, error) {
      &lt;-time.NewTimer(time.Millisecond * 120).C
      if error {
          return "", errors.New("Some error")
      } else {
          return "Some result", nil
      }
  }
  </code></pre>
  
  <p>Here <a href="https://play.golang.org/p/-8StYapmlg" rel="noreferrer">https://play.golang.org/p/-8StYapmlg</a> is how I implemented it, but it has too much code I think. It can be simplified by using interface{} but I don't want to go this way. I want something simpler as, for example, can be implemented in C# with async/await. Probably there is some library that simplifies such operation.</p>
  
  <p>UPDATE: Thank for your responses! It is awesome how fast I got help! I like the usage of WaitGroup. It obviously makes the code more robust to changes, so I easily can add another async method without changing exact count of methods in the end. However, there is still so much code in comparison to same in C#. I know that in go I don't need to explicitly mark methods as async, making them actually to return tasks, but methods call looks much more simple, for example, consider this link <a href="https://stackoverflow.com/questions/25009437/running-multiple-async-tasks-and-waiting-for-them-all-to-complete">actually catching exception is also needed</a>
  By the way, I found that in my task I actually don't need to know returning type of the functions I want to run async because it will be anyway marshaled to json, and now I just call multiple services in the endpoint layer of go-kit.</p>