今天看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路还很长。慢慢玩