分为一般语言都有的语句:
- 选择语句:if...else, switch
- 循环语句:for
Go特有的语句:
- 并发go和通信chan
- 延迟defer、panic和recover
选择语句
if... else...
// 推荐的用法是不用else,直接在if里返回
if err := doSome(); err != nil {
xxx
}
xxxx
swith
// 不需要break(相当于每个case下会默认帮忙补全break)
// 如果需要连续执行,需要添加fallthrough
switch val.(type) {
case string:
xxx
case int, int32, int64:
xxx
case bool:
xxx
fallthrough
case float64:
xxx
default:
xxx
}
循环语句
for
// 一般的索引递增
for i:=0; i< len(arr); i++ {
xxx
}
// for ...range进行遍历
for k,v := range map {
xxx
}
for i, item := range arr {
xxx
}
并发
使用go关键词创建并发(异步)
go func(){
doAPIReq()
}()
延迟、panic和 recover
使用defer语句定义延迟操作,定义的延迟操作会在return的前一步执行
通常用于关闭通道、文件等
func getFileContent() string {
f, _ := os.OpenFile(name, os.O_RDONLY, 0)
defer f.Close() // idiomatic Go code!
contents, _ := ioutil.ReadAll(f)
return string(contents)
}
panic和error的区别是,err 是将错误记录下来。但是panic是在遇到预期之外的错误,记录错误,并中断程序
的执行。
func doSome() {
xxx
//这里发生了什么,预期之外
if xxx {
panic("info")
}
}
recover用于恢复异常,通常是在一个方法A内发生了panic,则在调用A的外层方法中实行recover(),恢复程序的执行,并转换成err。
func B() {
defer func(){
if e := recover(); e != nil {
xxx
}
}()
doSome()
}
网友评论