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

举报
XiaoLin_Java 发表于 2022/03/27 21:02:12 2022/03/27
【摘要】 channel< -是Go+里面的一个类型,叫channel,中文名叫管道,是Go+之间的一种通信机制,我们可以使用channel发送或者去接受数据,有点类似于Java的流编程。箭头方向表示数据的传递方向。 channelchannel和普通的类型一样,我们在使用之前也是需要去创建的,我们一般使用内置函数去创建。我们使用下面这种语法去声明一个chan int类型channel。ch := ...

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更灵活,其次是打印的堆栈信息更多,我们可以根据堆栈信息快速定位到错误。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。