【Golang】Go语言那些返回值数量变化的语句?
2017-05-10 本文已影响7人
qishuai
package main
import (
"fmt"
"math"
)
func main() {
var a interface{}
a = "I am OK"
a = 23.87
//第一种情况
//类型断言
b,ok := a.(string)
if ok {
fmt.Println(b)
}
//--------------
r,err := a.(float64)
if err {
fmt.Println(math.Pi * r * r)
}
//第二种情况
//map取值
m := map[string]int{
"math" : 95,
"langue" : 90,
"english" : 89,
}
result := m["langue"]
fmt.Println(result)
//-------------
var exit bool
result, exit = m["english"]
if exit {
fmt.Println(result)
}
//第三种情况slice/map
s := []string{"hello", "world", "golang"}
for k := range s{
fmt.Print(k)
}
//output: 012 为索引值
var m map[string]int = map[string]int{
"golang": 1,
"c++": 2,
"python": 3,
}
for k := range m{
fmt.Println(k)
}
//output:golang
}
对于类型断言的补充说明:
-
如果类型断言出错(就是判断失败的情况),第二个返回值一定要显式申明或者忽略,否则编译器会抛出exit status 2,并终止编译,例如:
b,ok := a.(string) //如果类型判断错误,则b为相应判断类型的零值,而ok为bool类型的false b,_ := a.(float64)
-
而在类型断言成功的话,第二个返回值可以不用接受,程序正常运行
也就是说,如果这个断言不成功的话,还没有第二个接收者,那么就会panic。 如果断言失败,第二个接收者被抛弃,也就是_,那么程序不会panic