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

网友投稿 1017 2022-10-16

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

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

一、常量

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

二、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://kancloud-/kancloud/effective/72199​​

作者:jiankunking​

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:《Effective Go》--Maps
下一篇:Arno- NFV 开发框架
相关文章

 发表评论

暂时没有评论,来抢沙发吧~