第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

解鎖即可觀看《Go開發(fā)工程師》完整課程視頻

Go開發(fā)工程師

未來3-5年企業(yè)高性能項(xiàng)目不可替代的語言,從基礎(chǔ)到項(xiàng)目實(shí)戰(zhàn)再到重構(gòu),真正從入門到精通

【第1周】Go基礎(chǔ)知識(shí)入門
【第2周】容器,go編程思想
【第3周】Go并發(fā)編程和工程管理
【第4周】從0開始理解rpc和grpc
【第5周】grpc和protobuf進(jìn)階
【第6周】 yapi文檔管理、gorm詳解
【第7周】gin快速入門
【第8周】用戶服務(wù)的grpc服務(wù)
【第9周】用戶服務(wù)的web服務(wù)
【第10周】服務(wù)注冊/發(fā)現(xiàn)、配置中心、負(fù)載均衡
【第11周】商品微服務(wù)的grpc服務(wù)
【第12周】 商品微服務(wù)的gin層和oss圖片服務(wù)
【第13周】庫存服務(wù)和分布式鎖
【第14周】訂單和購物車微服務(wù)
【第15周】 支付寶支付、用戶操作微服務(wù)、前后端聯(lián)調(diào)
【第16周】elasticsearch實(shí)現(xiàn)搜索微服務(wù)
【第17周】 分布式理論基礎(chǔ)、分布式事務(wù)解決方案
【第18周】 學(xué)習(xí)rocketmq實(shí)現(xiàn)冪等性機(jī)制等
【第19周】鏈路追蹤、限流、熔斷、降級(jí)
【第20周】api網(wǎng)關(guān)、部署
【第21周】開發(fā)規(guī)范和go基礎(chǔ)擴(kuò)展
【第22周】設(shè)計(jì)模式和單元測試
【第23周】protoc插件開發(fā)、cobra命令行
【第24周】log日志包設(shè)計(jì)
【第25周】ast代碼生成工具開發(fā)
【第26周】三層代碼結(jié)構(gòu)
【第27周】grpc服務(wù)封裝更方便的rpc服務(wù)
【第28周】深入grpc的服務(wù)注冊、負(fù)載均衡原理
【第29周】基于gin封裝api服務(wù)
【第30周】可觀測的終極解決方案
【第31周】系統(tǒng)監(jiān)控核心
【第32周】用戶、商品服務(wù)重構(gòu)
【第33周】訂單、庫存等服務(wù)重構(gòu)
【第33+周】訂單服務(wù)重構(gòu)、wire進(jìn)行ioc控制
【第34周】通過k8s部署服務(wù)
【第34+周】devops和k8s
章節(jié)
問答
課簽
筆記
評(píng)論
占位
占位

go語句初探

    go語句和通道類型是Go語言的并發(fā)編程理念的最終體現(xiàn)。在第五章,我已經(jīng)詳細(xì)介紹過了通道類型。相比之下,go語句在用法上要比通道簡單很多。與defer語句相同,go語句也可以攜帶一條表達(dá)式語句。注意,go語句的執(zhí)行會(huì)很快結(jié)束,并不會(huì)對(duì)當(dāng)前流程的進(jìn)行造成阻塞或明顯的延遲。一個(gè)簡單的示例如下:

go fmt.Println("Go!")

    可以看到,go語句僅由一個(gè)關(guān)鍵字go和一條表達(dá)式語句構(gòu)成。同樣的,go語句的執(zhí)行與其攜帶的表達(dá)式語句的執(zhí)行在時(shí)間上沒有必然聯(lián)系。這里能夠確定的僅僅是后者會(huì)在前者完成之后發(fā)生。在go語句被執(zhí)行時(shí),其攜帶的函數(shù)(也被稱為go函數(shù))以及要傳給它的若干參數(shù)(如果有的話)會(huì)被封裝成一個(gè)實(shí)體(即Goroutine),并被放入到相應(yīng)的待運(yùn)行隊(duì)列中。Go語言的運(yùn)行時(shí)系統(tǒng)會(huì)適時(shí)的從隊(duì)列中取出待運(yùn)行的Goroutine并執(zhí)行相應(yīng)的函數(shù)調(diào)用操作。注意,對(duì)傳遞給這里的函數(shù)的那些參數(shù)的求值會(huì)在go語句被執(zhí)行時(shí)進(jìn)行。這一點(diǎn)也是與defer語句類似的。
  
    正是由于go函數(shù)的執(zhí)行時(shí)間的不確定性,所以Go語言提供了很多方法來幫助我們協(xié)調(diào)它們的執(zhí)行。其中最簡單粗暴的方法就是調(diào)用time.Sleep函數(shù)。請(qǐng)看下面的示例:

package main

import (
    "fmt"
)

func main() {
    go fmt.Println("Go!")
}  

    這樣一個(gè)命令源碼文件被運(yùn)行時(shí),標(biāo)準(zhǔn)輸出上不會(huì)有任何內(nèi)容出現(xiàn)。因?yàn)檫€沒等Go語言運(yùn)行時(shí)系統(tǒng)調(diào)度那個(gè)go函數(shù)執(zhí)行,主函數(shù)main就已經(jīng)執(zhí)行完畢了。函數(shù)main的執(zhí)行完畢意味著整個(gè)程序的執(zhí)行的結(jié)束。因此,這個(gè)go函數(shù)根本就沒有執(zhí)行的機(jī)會(huì)。
  
  但是,當(dāng)我們在上述go語句的后面添加一條對(duì)time.Sleep函數(shù)的調(diào)用語句之后情況就會(huì)不同了:

package main

import (
    "fmt"
    "time"
)

func main() {
    go fmt.Println("Go!")
    time.Sleep(100 * time.Millisecond)
}

    語句time.Sleep(100 * time.Millisecond)會(huì)把main函數(shù)的執(zhí)行結(jié)束時(shí)間向后延遲100毫秒。100毫秒雖短暫,但足夠go函數(shù)被調(diào)度執(zhí)行的了。上述命令源碼文件在被運(yùn)行時(shí)會(huì)如我們所愿地在標(biāo)準(zhǔn)輸出上打印出Go!。

  
    另一個(gè)比較紳士的做法是在main函數(shù)的最后調(diào)用runtime.Gosched函數(shù)。相應(yīng)的程序版本如下:

package main

import (
    "fmt"
    "runtime"
)

func main() {
    go fmt.Println("Go!")
    runtime.Gosched()
}

   runtime.Gosched函數(shù)的作用是讓當(dāng)前正在運(yùn)行的Goroutine(這里是運(yùn)行main函數(shù)的那個(gè)Goroutine)暫時(shí)“休息”一下,而讓Go運(yùn)行時(shí)系統(tǒng)轉(zhuǎn)去運(yùn)行其它的Goroutine(這里是與go fmt.Println("Go!")對(duì)應(yīng)并會(huì)封裝fmt.Println("Go!")的那個(gè)Goroutine)。如此一來,我們就更加精細(xì)地控制了對(duì)幾個(gè)Goroutine的運(yùn)行的調(diào)度。
  
    當(dāng)然,我們還有其它方法可以滿足上述需求。并且,如果我們需要去左右更多的Goroutine的運(yùn)行時(shí)機(jī)的話,下面這種方法也許更合適一些。請(qǐng)看代碼:

package main

import (
    "fmt"
    "sync"
)

func main() {
    var wg sync.WaitGroup
    wg.Add(3)
    go func() {
        fmt.Println("Go!")
        wg.Done()
    }()
    go func() {
        fmt.Println("Go!")
        wg.Done()
    }()
    go func() {
        fmt.Println("Go!")
        wg.Done()
    }()
    wg.Wait()
}

    sync.WaitGroup類型有三個(gè)方法可用——Add、DoneWaitAdd會(huì)使其所屬值的一個(gè)內(nèi)置整數(shù)得到相應(yīng)增加,Done會(huì)使那個(gè)整數(shù)減1,而Wait方法會(huì)使當(dāng)前Goroutine(這里是運(yùn)行main函數(shù)的那個(gè)Goroutine)阻塞直到那個(gè)整數(shù)為0。這下你應(yīng)該明白上面這個(gè)示例所采用的方法了。我們在main函數(shù)中啟用了三個(gè)Goroutine來封裝三個(gè)go函數(shù)。每個(gè)匿名函數(shù)的最后都調(diào)用了wg.Done方法,并以此表達(dá)當(dāng)前的go函數(shù)會(huì)立即執(zhí)行結(jié)束的情況。當(dāng)這三個(gè)go函數(shù)都調(diào)用過wg.Done函數(shù)之后,處于main函數(shù)最后的那條wg.Wait()語句的阻塞作用將會(huì)消失,main函數(shù)的執(zhí)行將立即結(jié)束。
  
    與go語句、go函數(shù)以及承載其運(yùn)行的Goroutine相關(guān)的話題其實(shí)還有很多。不過由于篇幅等原因,我的講述就先到此為止。如果大家對(duì)這方面的內(nèi)容感興趣的話請(qǐng)參看《Go并發(fā)編程實(shí)戰(zhàn)》這本書。這里面會(huì)有非常詳盡的介紹。

任務(wù)

    在命令源碼文件index.go中的main函數(shù)中,我編寫了三條go語句。其中的go函數(shù)會(huì)分別向標(biāo)準(zhǔn)輸出打印一個(gè)整數(shù)。我希望打印的最終結(jié)果是

1
2
3

    請(qǐng)你對(duì)其中的代碼做適當(dāng)?shù)男薷膩頋M足這個(gè)需求。

?不會(huì)了怎么辦

修改后的文件內(nèi)容可以是:

package main

import (
    "fmt"
)

func main() {
    ch1 := make(chan int, 1)
    ch2 := make(chan int, 1)
    ch3 := make(chan int, 3)
    go func() {
        fmt.Println("1")
        ch1 <- 1
    }()
    go func() {
        <-ch1
        fmt.Println("2")
        ch2 <- 2
    }()
    go func() {
        <-ch2
        fmt.Println("3")
        ch3 <- 3
    }()
    <-ch3
}

 

||

提問題

寫筆記

公開筆記
提交
||

請(qǐng)驗(yàn)證,完成請(qǐng)求

由于請(qǐng)求次數(shù)過多,請(qǐng)先驗(yàn)證,完成再次請(qǐng)求

加群二維碼

打開微信掃碼自動(dòng)綁定

您還未綁定服務(wù)號(hào)

綁定后可得到

  • · 粉絲專屬優(yōu)惠福利
  • · 大咖直播交流干貨
  • · 課程更新,問題答復(fù)提醒
  • · 賬號(hào)支付安全提醒

收藏課程后,能更快找到我哦~

使用 Ctrl+D 可將課程添加到書簽

邀請(qǐng)您關(guān)注公眾號(hào)
關(guān)注后,及時(shí)獲悉本課程動(dòng)態(tài)

舉報(bào)

0/150
提交
取消
全部 精華 我要發(fā)布
全部 我要發(fā)布
最熱 最新
只看我的

手記推薦

更多

本次提問將花費(fèi)2個(gè)積分

你的積分不足,無法發(fā)表

為什么扣積分?

本次提問將花費(fèi)2個(gè)積分

繼續(xù)發(fā)表請(qǐng)點(diǎn)擊 "確定"

為什么扣積分?