feat(Go-StudyExample): 新增 网络及端口测试、传值和传址的比较、切片测试、Map测试、通道测试、测试init调用、测试error、defer关键字、recover测试、测试携程的异常捕获、矩阵旋转
This commit is contained in:
@@ -0,0 +1,133 @@
|
||||
/*
|
||||
* @Author : huangzj
|
||||
* @Time : 2020/7/13 14:37
|
||||
* @Description:测试defer关键字、recover
|
||||
*/
|
||||
|
||||
package originGoLanguage
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
)
|
||||
|
||||
func TestDefer() {
|
||||
//defer会在所有函数执行完成之后才进行执行
|
||||
testDeferExe()
|
||||
//defer产生的值是在对应位置的值,后面的变化不会产生影响
|
||||
fmt.Println(testDeferValue())
|
||||
//defer的执行是先进后出
|
||||
testDeferExeOrder()
|
||||
testDeferRecover() //defer对异常的捕获
|
||||
testDeferRecoverOut() //外层异常捕获
|
||||
}
|
||||
|
||||
func TestCtripException() {
|
||||
fmt.Println("测试不进行捕获的情况")
|
||||
testNotDefer()
|
||||
|
||||
fmt.Println("测试进行捕获的情况")
|
||||
testDefer1()
|
||||
}
|
||||
|
||||
func testNotDefer() {
|
||||
go sayHello()
|
||||
|
||||
for i := 0; i < 10; i++ {
|
||||
time.Sleep(5000)
|
||||
fmt.Println(i)
|
||||
}
|
||||
}
|
||||
|
||||
func testDefer1() {
|
||||
go sayHello1()
|
||||
|
||||
for i := 0; i < 10; i++ {
|
||||
time.Sleep(5000)
|
||||
fmt.Println(i)
|
||||
}
|
||||
}
|
||||
|
||||
func sayHello1() {
|
||||
defer func() {
|
||||
if err := recover(); err != nil {
|
||||
fmt.Println("错误信息", err)
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
func sayHello() {
|
||||
var map1 map[string]int
|
||||
//这里会发生异常
|
||||
fmt.Println(map1["say"])
|
||||
}
|
||||
|
||||
func testDeferRecover() {
|
||||
//多个panic只会捕获最后一个
|
||||
defer func() {
|
||||
if err := recover(); err != nil {
|
||||
fmt.Println("错误信息是:", err)
|
||||
}
|
||||
}()
|
||||
|
||||
panic1()
|
||||
panic2()
|
||||
panic3()
|
||||
|
||||
//一旦错误被捕获就不会继续运行
|
||||
fmt.Println("我会继续运行")
|
||||
|
||||
}
|
||||
|
||||
func panic3() {
|
||||
panic("panic3")
|
||||
}
|
||||
|
||||
func panic2() {
|
||||
panic("panic2")
|
||||
}
|
||||
|
||||
func panic1() {
|
||||
panic("panic1")
|
||||
}
|
||||
|
||||
func testDeferRecoverOut() {
|
||||
testDeferRecover()
|
||||
|
||||
fmt.Println("外层继续执行")
|
||||
}
|
||||
|
||||
func testDeferExe() {
|
||||
i := 0
|
||||
defer func() {
|
||||
fmt.Println(i)
|
||||
}()
|
||||
fmt.Println("i am after")
|
||||
}
|
||||
|
||||
func testDeferValue() int {
|
||||
i := 0
|
||||
defer func() {
|
||||
fmt.Println("first: ", i)
|
||||
}()
|
||||
|
||||
i++
|
||||
defer func() {
|
||||
fmt.Println("second: ", i)
|
||||
}()
|
||||
|
||||
i++
|
||||
return i
|
||||
}
|
||||
|
||||
func testDeferExeOrder() {
|
||||
defer func() {
|
||||
fmt.Println("first")
|
||||
}()
|
||||
|
||||
defer func() {
|
||||
fmt.Println("second")
|
||||
}()
|
||||
|
||||
defer fmt.Println("third")
|
||||
}
|
||||
Reference in New Issue
Block a user