Jaki jest idiomatyczny sposób przesyłania wielu wartości zwracanych w Go?Idiomatyczny sposób na konwersję/typ asercji dla wielu wartości zwracanych w Go
Czy możesz to zrobić w pojedynczej linii, czy też musisz użyć zmiennych tymczasowych, takich jak w poniższym przykładzie?
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")
}
}
Nawiasem mówiąc, jest to nazywane casting
jeśli chodzi o interfejsy?
i := interface.(int)
W rzeczywistości nie jest to również rzutowanie. Nazywa się to konwersją. http://golang.org/ref/spec#Conversions –
Dzięki za odpowiedź na oba pytania. Zmieniłem tytuł, aby był bardziej adekwatny do pytania. – ANisus