title: Idiomatic way to do conversion/type assertion on multiple return values in Go
body: <p>What is the idiomatic way to cast multiple return values in Go?</p>
  
  <p>Can you do it in a single line, or do you need to use temporary variables such as I've done in my example below?</p>
  
  <pre><code>package main
  
  import "fmt"
  
  func oneRet() interface{} {
      return "Hello"
  }
  
  func twoRet() (interface{}, error) {
      return "Hejsan", nil
  }
  
  func main() {
      // With one return value, you can simply do this
      str1 := oneRet().(string)
      fmt.Println("String 1: " + str1)
  
      // It is not as easy with two return values
      //str2, err := twoRet().(string) // Not possible
      // Do I really have to use a temp variable instead?
      temp, err := twoRet()
      str2 := temp.(string)
      fmt.Println("String 2: " + str2 )
  
  
      if err != nil {
          panic("unreachable")
      }   
  }
  </code></pre>
  
  <p>By the way, is it called <code>casting</code> when it comes to interfaces?</p>
  
  <pre><code>i := interface.(int)
  </code></pre>