今天看beego的源代码的时候看到这么一段code
func ParseBool(val interface{}) (value bool, err error) { if val != nil { switch v := val.(type) { case bool: return v, nil case string: switch v { case "1", "t", "T", "true", "TRUE", "True", "YES", "yes", "Yes", "Y", "y", "ON", "on", "On": return true, nil case "0", "f", "F", "false", "FALSE", "False", "NO", "no", "No", "N", "n", "OFF", "off", "Off": return false, nil } case int8, int32, int64: strV := fmt.Sprintf("%s", v) if strV == "1" { return true, nil } else if strV == "0" { return false, nil } case float64: if v == 1 { return true, nil } else if v == 0 { return false, nil } } return false, fmt.Errorf("parsing %q: invalid syntax", val) } return false, fmt.Errorf("parsing <nil>: invalid syntax") }后来自己有点疑惑。这个interface type 能不能单单的赋值给一个变量然后拿出来用呢
package main import ( "fmt" ) func main() { // test.Run() test(1) } func test(val interface{}) { if val != nil { v := val.(type) fmt.Println(v) } }
直接给报错了。 大概的意思说 如果使用这个 .(type) 必须放到switch 里面。
看来我的go路还很长。慢慢玩