Go+ 高级for循环、异常处理

简介: channel< -是Go+里面的一个类型,叫channel,中文名叫管道,是Go+之间的一种通信机制,我们可以使用channel发送或者去接受数据,有点类似于Java的流编程。箭头方向表示数据的传递方向。

channel


< -是Go+里面的一个类型,叫channel,中文名叫管道,是Go+之间的一种通信机制,我们可以使用channel发送或者去接受数据,有点类似于Java的流编程。箭头方向表示数据的传递方向。


channel


channel和普通的类型一样,我们在使用之前也是需要去创建的,我们一般使用内置函数去创建。我们使用下面这种语法去声明一个chan int类型channel。


ch := make(chan int)
复制代码


channel读操作


我们定义完channel以后就可以开始进行读操作了,切记的是,channel只有初始化以后才可以进行其他的操作。比如说读写,否则堵塞,而且是永久的,语法格式如下:


x <- ch
复制代码


这段代码所表示的意思是从ch中读取数据,我们还有另一种方式去读取,这种方式会进行一个赋值操作。


x = <- ch
复制代码


channel写操作


既然箭头的方向表示数据的流动方向,那么就意味着只要我们改变一下变量的文职即可将读操作反转为写操作。


ch <- x
复制代码


关闭channel


channel和Java中的流一样,使用完以后需要去关闭流,否则会占用系统资源,我们可以使用内置函数close去关闭channel。


ch := make(chan int)
close(ch)
复制代码


结合for循环


我们可以使用channel来结合for循环,比如说输出0-10,我们可以这样来写:


sum := 0
for i <- :11 {
  println("i=",i)
}
复制代码


如果我们这样写的话,他是从0开始,并且是不含尾的,也就是意味着如果我们写10的话,其实只会输出到9,所以我们要多写一位。


最后写一个小demo,计算0-100的和,我们可以使用channel结合for循环这样写,确实普通的for循环写起来更简单,也更容易阅读。


sum := 0
for i <- :101 {
  sum += i
}
println(sum) // 5050
复制代码


错误处理


   程序中错误处理机制是一套很重要的机制,程序运行过程当中不可能不会出错的,我们在出错的情况下不可能直接把错误展示给用户看,而是需要对错误进行包装,只展示包装后的错误语句,于是程序员在日常开发阶段需要做的一件很重要的事情就是将错误信息进行包装,而这个包装就是错误处理机制。


代码示范


strconv


   strconv包主要是实现对字符串对基本数据类型之间的转换,我们在日常开发阶段常常需要用到将字符串转为基本数据类型的操作。他有一个常见的方法Atoi (string),他的作用是将字符串转为数字,他的底层方法是使用ParseInt(stirng)来实现的。


错误处理


import (
  "strconv"
) // 导入strconv包
func multiplication(x, y string) (int, error) {
  return strconv.Atoi(x)? * strconv.Atoi(y)?, nil
} // 写一个方法,用于字符串转int并进行相乘
sum, err := multiplication("18", "admin") // 调用并拿到返回值
println `multiplication("10", "abc"):`, sum, err // multiplication("10", "admin"): 0 strconv.Atoi: parsing "admin": invalid syntax
复制代码

   

我们可以看到他报错了,报错信息是multiplication("10", "admin"): 0 strconv.Atoi: parsing "admin": invalid syntax,可以得出在解析admin的时候,无法将admin字符串转为数字,这就是他报错的原因。在拿到错误后,我们就可以进行错误的异常处理,由全局异常处理去捕获异常再将异常以人性化一点的方式展示给前台。


对比Go


   对比Go的异常处理机制,我们会发现,Go-Plus更灵活,其次是打印的堆栈信息更多,我们可以根据堆栈信息快速定位到错误。



相关文章
|
8天前
|
Rust 安全 程序员
|
3月前
|
Go
Go 1.22 for 循环的两处重要更新
本文介绍了 Go 1.22 版本对 for 循环所做的两处重要更新:循环的每次迭代都会创建新变量 和 循环支持对整数范围进行迭代。 - 循环的每次迭代都会创建新变量,有效避免了以往版本中常见的闭包陷阱,提高了代码的安全性和可预测性。 - 循环支持对整数范围进行迭代,极大地增强了 for 循环的灵活性,使得编写计数循环更加直接和简洁。
55 1
Go 1.22 for 循环的两处重要更新
|
5月前
|
JSON JavaScript Go
Go 语言学习指南:变量、循环、函数、数据类型、Web 框架等全面解析
掌握 Go 语言的常见概念,如变量、循环、条件语句、函数、数据类型等等。深入了解 Go 基础知识的好起点是查阅 Go 官方文档
478 2
|
6天前
|
Go 开发者
Golang深入浅出之-Go语言 defer、panic、recover:异常处理机制
Go语言中的`defer`、`panic`和`recover`提供了一套独特的异常处理方式。`defer`用于延迟函数调用,在返回前执行,常用于资源释放。它遵循后进先出原则。`panic`触发运行时错误,中断函数执行,直到遇到`recover`或程序结束。`recover`在`defer`中捕获`panic`,恢复程序执行。注意避免滥用`defer`影响性能,不应对可处理错误随意使用`panic`,且`recover`不能跨goroutine捕获panic。理解并恰当使用这些机制能提高代码健壮性和稳定性。
17 2
|
6天前
|
Go 开发者
Golang深入浅出之-Go语言流程控制:if、switch、for循环详解
【4月更文挑战第21天】本文介绍了Go语言中的流程控制语句,包括`if`、`switch`和`for`循环。`if`语句支持简洁的语法和初始化语句,但需注意比较运算符的使用。`switch`语句提供多分支匹配,可省略`break`,同时支持不带表达式的形式。`for`循环有多种形式,如基本循环和`for-range`遍历,遍历时修改原集合可能导致未定义行为。理解并避免易错点能提高代码质量和稳定性。通过实践代码示例,可以更好地掌握Go语言的流程控制。
12 3
Golang深入浅出之-Go语言流程控制:if、switch、for循环详解
|
7天前
|
程序员 Go API
【Go语言快速上手(二)】 分支与循环&函数讲解
【Go语言快速上手(二)】 分支与循环&函数讲解
|
27天前
|
Go C语言 索引
掌握Go语言:探索Go语言中的循环奇妙世界,从基础到实战(13)
掌握Go语言:探索Go语言中的循环奇妙世界,从基础到实战(13)
|
2月前
|
Go 开发者
Go语言中的异常处理
【2月更文挑战第22天】
19 3
|
3月前
|
Go
Go语言中的异常处理:理解panic与recover
【2月更文挑战第7天】Go语言虽然以简洁和直接错误处理机制而著称,但它也提供了`panic`和`recover`这两个内置函数来处理程序中的异常情况。本文将深入探讨Go语言中的异常处理机制,包括`panic`和`recover`的使用场景、原理以及最佳实践,帮助读者更好地理解如何在Go中处理异常情况。
|
3月前
|
Go 开发者 索引
Go语言中的循环控制结构解析
【2月更文挑战第3天】本文将详细探讨Go语言中的循环控制结构,包括`for`循环、`range`循环以及`无限循环`的使用方法和适用场景。通过掌握这些循环结构,Go语言开发者能够更加高效地进行迭代操作、处理集合数据以及实现复杂的控制逻辑。