Ich weiß nicht wirklich, warum switch t := some.(type){}
funktioniert gut, aber wenn ich versuchte switch k := f.Kind(){}
oder so weiter.Golang-Schalter hat einen `used as value` Fehler?
.\mym.go:58: k := f.Kind() used as value
exit status 2
Ich weiß nicht wirklich, warum switch t := some.(type){}
funktioniert gut, aber wenn ich versuchte switch k := f.Kind(){}
oder so weiter.Golang-Schalter hat einen `used as value` Fehler?
.\mym.go:58: k := f.Kind() used as value
exit status 2
Ja, Sie haben Recht, es ist Syntaxfehler; Es sollte SimpleStmt oder sein. ExprSwitchStmt = "switch" [SimpleStmt ";" ] [Ausdruck] "{" {ExprCaseClause} "}".
siehe: https://golang.org/ref/spec#Switch_statements
In einem Ausdrucksschalter enthalten die Fälle Ausdrücke, die mit dem Wert des Schalterausdrucks verglichen werden. Und das wird funktionieren:
package main
import (
"fmt"
)
type Test struct {
kind int
}
func (s *Test) Kind() int {
return s.kind
}
func main() {
f := &Test{12}
//fmt.Println(k := f.Kind()) //syntax error: unexpected :=, expecting comma or)
switch k := f.Kind(); k {
case 12:
fmt.Println(k) //12
case 0:
fmt.Println("Bye!")
}
}