Go 常量、init、数组、类型转换与断言、Recover
来源:互联网 发布:天蝎座为什么被黑 知乎 编辑:程序博客网 时间:2024/06/07 18:38
一、常量
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
- Go语言 类型转换和断言
- Go-类型断言
- go类型断言
- GO类型断言
- Go语言学习笔记 --- 常量、变量、批量定义与声明、数据类型、类型别名、类型转换
- 常量与类型转换学习
- GO断言来转换数据类型
- go 类型、变量、常量
- golang 断言 + 类型转换
- Swift常量与变量、类型转换
- Go语言 类型断言性能测试
- go语言的类型断言(Type Assertion)
- go 类型转换
- Go语言类型转换
- Go类型转换 实现
- golang: 类型转换和类型断言
- golang: 类型转换和类型断言
- V4L2 Video overlay, Video output, Video output overlay的区别
- 逆波兰表达式 中缀表达式 后缀表达式
- 再聊线程池
- 11.15 包装类 String方法
- 动态链接库基础-隐式链接与显式链接
- Go 常量、init、数组、类型转换与断言、Recover
- 4.编程打印一个二维数组中所有元素的和,并打印最大值,最小值(以及它们所在的行号和列号)
- 存储过程报错1172
- 自定义 LayoutManager 实现弧形以及滑动放大效果 RecyclerView
- js基础笔记
- Java CCF 命令行选项
- cf600E
- enum的用法
- 欢迎使用CSDN-markdown编辑器