您的位置:首页 > 编程语言 > Go语言

Go 常量、init、数组、类型转换与断言、Recover

2017-11-15 20:02 393 查看

一、常量

    Go中的常量仅仅就是—常量。它们是在编译时被创建,即使被定义为函数局部的也如此,并且只能是数字,字符(符文),字符串或者布尔类型。由于编译时的限制,定义它们的表达式必须为能被编译器求值的常量表达式。例如,1<<3是一个常量表达式,而math.Sin(math.Pi/4)不是,因为函数调用math.Sin需要在运行时才发生。

二、init

    每个源文件可以定义自己的不带参数的(niladic)init函数,来设置它所需的状态。(实际上每个文件可以有多个init函数。)init是在程序包中所有变量声明都被初始化,以及所有被导入的程序包中的变量初始化之后才被调用。

    除了用于无法通过声明来表示的初始化以外,init函数的一个常用法是在真正执行之前进行验证或者修复程序状态的正确性。

三、数组

    在Go和C中,数组的工作方式有几个重要的差别。在Go中:

数组是值。将一个数组赋值给另一个,会拷贝所有的元素。

特别是,如果你给函数传递一个数组,其将收到一个数组的拷贝,而不是它的指针。

数组的大小是其类型的一部分。类型[10]int和[20]int是不同的。

四、断言

str := value.(string)


    不过,如果该值不包含一个字符串,则程序会产生一个运行时错误。为了避免这样,可以使用“comma, ok”的习惯用法来安全地测试值是否为一个字符串:

str, ok := value.(string)
if ok {
fmt.Printf("string value is: %q\n", str)
} else {
fmt.Printf("value is not a string\n")
}


    如果类型断言失败,则str将依然存在,并且类型为字符串,不过其为零值,一个空字符串。

五、Recover

    对于一些隐式的运行时错误,如切片索引越界、类型断言错误等情形下,panic方法就会被调用,它将立刻中断当前函数的执行,并展开当前Goroutine的调用栈,依次执行之前注册的defer函数。当栈展开操作达到该Goroutine栈顶端时,程序将终止。但这时仍然可以使用Go的内建recover方法重新获得Goroutine的控制权,并将程序恢复到正常执行的状态。

    调用recover方法会终止栈展开操作并返回之前传递给panic方法的那个参数。由于在栈展开过程中,只有defer型函数会被执行,因此recover的调用必须置于defer函数内才有效。

本文整理自:https://www.kancloud.cn/kancloud/effective/72199

个人微信公众号:



作者:jiankunking 出处:http://blog.csdn.net/jiankunking
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  go init 数组 Recover 转换