首页 > 其他 > 详细

go基础(三)

时间:2019-11-23 12:20:08      阅读:76      评论:0      收藏:0      [点我收藏+]

一、mutex锁与信道

package main

利用mutex:
//import (
//"fmt"
//"sync"
//)
//var x  = 0
//func increment(wg *sync.WaitGroup, m *sync.Mutex) {
//
//    m.Lock()
//    x = x + 1
//    m.Unlock()
//    wg.Done()
//}
//func main() {
//    var w sync.WaitGroup
//    var m sync.Mutex
//    for i := 0; i < 1000; i++ {
//        w.Add(1)
//        go increment(&w,&m)
//    }
//    w.Wait()
//    fmt.Println("final value of x", x)
//}


利用信道:
import ( "fmt" "sync" ) var x = 0 func increment(wg *sync.WaitGroup, ch chan bool) { ch <- true x = x + 1 <- ch wg.Done() } func main() { var w sync.WaitGroup ch := make(chan bool, 1) for i := 0; i < 1000; i++ { w.Add(1) go increment(&w, ch) } w.Wait() fmt.Println("final value of x", x) }

二、异常处理

//异常处理
package main

import "fmt"

func main() {
    //defer 延迟执行,先注册的后执行,即便函数出现严重错误,它也会执行
    //defer fmt.Println("xxxxxxx")
    //defer fmt.Println("yyyy")
    f1()
    f2()
    f3()

}
func f1()  {
    fmt.Println("f1")
}
func f2()  {
    //defer fmt.Println("我除需哦了")

    //defer func() {
    //    recover()    //恢复程序
    //}()
    defer func() {
        if ok:=recover();ok!=nil{
            //如果是nil表示没有出异常,如果有值表示出了异常,这个值就是异常信号
            //进行异常处理
            fmt.Println(ok)
        }
    }()
    fmt.Println("f2")
    //var a =make([]int,3,3)
    //fmt.Println(a[4])  //把异常处理掉,让程序继续往下执行
    panic("出错了")  //主动抛出异常
    //fmt.Println("xxxxx")
}
func f3()  {
    fmt.Println("f3")
}

 

 

 

 

 

 

 

 

go基础(三)

原文:https://www.cnblogs.com/sima-3/p/11916845.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!