飞沐网站建设公司北京,深圳网站建设定制开发,wordpress php7主题,财务管理软件1.go语言触发异常的场景有哪些
运行时错误 1.空指针解引用#xff1a;尝试访问一个未初始化的指针指向的内存#xff0c;会导致程序崩溃并触发异常。 2.数组越界访问#xff1a;试图访问数组中不存在的索引#xff0c;比如数组长度为5#xff0c;却尝试访问索引为10的元素…1.go语言触发异常的场景有哪些
运行时错误 1.空指针解引用尝试访问一个未初始化的指针指向的内存会导致程序崩溃并触发异常。 2.数组越界访问试图访问数组中不存在的索引比如数组长度为5却尝试访问索引为10的元素。 3.除零错误在执行除法运算时如果除数为零会触发异常。 4.类型断言错误在进行类型断言时如果断言的类型与实际类型不匹配会触发异常。 程序逻辑错误 5.违反逻辑的分支当程序到达了逻辑上不可能到达的分支时可以调用panic函数来触发异常。 6.非法类型转换尝试将一个类型转换为不兼容的类型会导致程序崩溃并触发异常。 资源相关错误 7.文件或网络资源无法访问在尝试打开文件或建立网络连接时如果资源不可用或无法访问可能会触发异常。 8.内存不足当程序需要分配的内存超过了系统可用内存时可能会触发异常。 并发编程中的错误 9.数据竞争在并发编程中多个goroutine同时访问和修改共享资源而没有适当的同步机制可能会导致数据竞争从而触发异常。 10死锁当两个或多个goroutine互相等待对方释放资源时会导致死锁程序无法继续执行可能触发异常。 其他错误 11.函数执行失败某些函数执行失败时可能会返回一个错误值而不是触发异常。但有些函数可能会在特定情况下触发异常比如系统调用失败等。 12.第三方库或框架的错误使用第三方库或框架时可能会遇到一些未处理的错误情况导致异常触发。
2.闭包是匿名函数的一种形式它能够访问其定义时作用域中的变量。闭包的主要应用场景包括延迟执行、函数工厂、封装状态、回调函数、资源管理等。
package mainimport fmt// 定义一个返回闭包的函数
func createClosure(x int) func(int) int {// 定义匿名函数并返回return func(y int) int {return x y}
}func main() {// 创建闭包adder : createClosure(5)// 调用闭包result : adder(3) // 输出: 8fmt.Println(result)
}
包的主要应用场景
延迟执行闭包可以保存状态并在后续调用中使用适合需要延迟执行的场景。函数工厂根据输入参数生成具有特定行为的函数。封装状态通过闭包封装变量避免外部直接访问增强封装性。回调函数在异步操作中作为回调函数使用处理异步操作结果。资源管理管理资源的获取和释放确保资源正确清理
理解和记忆方法
闭包是函数环境闭包不仅包含函数代码还包含其定义时的环境即可以访问外部函数的变量。匿名函数特性闭包是匿名函数的一种形式可以作为值传递和返回。状态保持闭包可以保持其定义时的状态即使外部函数已经执行完毕。灵活的函数生成通过闭包可以根据不同参数生成具有不同行为的函数。
package mainimport fmt// 函数工厂生成加法闭包
func makeAdder(x int) func(int) int {return func(y int) int {return x y}
}
makeAdder 是一个函数它接受一个整数 x 作为参数。
它返回一个匿名函数闭包这个匿名函数接受一个整数 y 并返回 x y 的结果。
这个匿名函数可以访问 makeAdder 函数的参数 x即使 makeAdder 函数已经执行完毕// 延迟执行和状态保持
func createGreeter(name string) func() string {return func() string {return Hello, name !}
}func main() {// 使用函数工厂add5 : makeAdder(5)fmt.Println(add5(3)) // 输出: 8// 延迟执行和状态保持greeter : createGreeter(张三)fmt.Println(greeter()) // 输出: Hello, 张三!// 闭包作为回调函数executeCallback(func(name string) string {return Hello, name !}, 李四)// 闭包管理资源fileProcessor : createFileProcessor(data.txt)fileProcessor(func(content string) {fmt.Println(文件内容:, content)})
}
记忆方法
闭包是包裹把闭包想象成一个包裹里面装着函数和它需要的环境。延迟执行闭包可以保存状态延迟到需要的时候再执行。函数工厂通过闭包可以根据不同参数生成不同的函数就像工厂生产不同产品。封装状态闭包可以隐藏变量避免外部直接访问就像把东西放在一个盒子里。
自学go语言笔记,希望我们可以一起学习!