最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談go 協(xié)程的使用陷阱

 更新時(shí)間:2020年12月16日 14:26:48   作者:夏星笑語  
這篇文章主要介紹了淺談go 協(xié)程的使用陷阱,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧

golang 語言協(xié)程

協(xié)程中使用全局變量、局部變量、指針、map、切片等作為參數(shù)時(shí)需要注意,此變量的值變化問題。 與for 循環(huán),搭配使用更需謹(jǐn)慎。

1、內(nèi)置函數(shù)時(shí)直接使用局部變量,未進(jìn)行參數(shù)傳遞

func main() {
  for i := 0; i < 100; i++ {
    go func() {
      fmt.Println(i)
    }()
  }
}

運(yùn)行效果

func main() {
  for i := 0; i < 100; i++ {
    go func(i int) {
      fmt.Println(i)
    }(i)
  }
}

運(yùn)行效果

2、地址傳遞的參數(shù)

type Per struct {
  name string
  bh  int
}
func main() {
  p := &Per{}
  for i := 0; i < 100; i++ {
    p.bh = i
    go func(p *Per) {
      fmt.Println(p)
    }(p)
  }
}

分析: 導(dǎo)致以上非實(shí)際結(jié)果的原因是,go 之后并非立即啟動(dòng)協(xié)程的。

補(bǔ)充:Go for循環(huán) 協(xié)程間傳遞參數(shù)的一個(gè)問題

看代碼吧~

map1 := make(map[int]int)
for i:=0; i<3; i++{
 map1[i] = i+1
}

fmt.Println(map1)
for k, v := range map1{
 go func(key, value int){
 fmt.Println("one way :", key, " : ", value)
 }(k, v)

 go func(){
 time.Sleep(time.Second)
 fmt.Println("another way :", k, " : ", v)
 }()
}

輸出:

map[2:3 0:1 1:2]
one way : 1 : 2
one way : 0 : 1
one way : 2 : 3
another way : 2 : 3
another way : 2 : 3
another way : 2 : 3

這看起來跟 js 里面的 for 循環(huán)匿名函數(shù)傳參的問題差不多。就是說匿名函數(shù)真正執(zhí)行的時(shí)候,傳入形參的值已經(jīng)確定。

如果想要達(dá)到想要的效果需要進(jìn)行第一種傳參形式。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • Go?Gin框架優(yōu)雅重啟和停止實(shí)現(xiàn)方法示例

    Go?Gin框架優(yōu)雅重啟和停止實(shí)現(xiàn)方法示例

    Web應(yīng)用程序中,有時(shí)需要重啟或停止服務(wù)器,無論是因?yàn)楦麓a還是進(jìn)行例行維護(hù),這時(shí)需要保證應(yīng)用程序的可用性和數(shù)據(jù)的一致性,就需要優(yōu)雅地關(guān)閉和重啟應(yīng)用程序,即不丟失正在處理的請求和不拒絕新的請求,本文將詳解如何在Go語言中使用Gin這個(gè)框架實(shí)現(xiàn)優(yōu)雅的重啟停止
    2024-01-01
  • Go設(shè)計(jì)模式之狀態(tài)模式講解和代碼示例

    Go設(shè)計(jì)模式之狀態(tài)模式講解和代碼示例

    狀態(tài)是一種行為設(shè)計(jì)模式,?讓你能在一個(gè)對象的內(nèi)部狀態(tài)變化時(shí)改變其行為,該模式將與狀態(tài)相關(guān)的行為抽取到獨(dú)立的狀態(tài)類中,?讓原對象將工作委派給這些類的實(shí)例,?而不是自行進(jìn)行處理,本文將通過代碼示例給大家簡單的介紹一下Go狀態(tài)模式
    2023-08-08
  • Go代碼檢查工具golangci-lint安裝使用方法

    Go代碼檢查工具golangci-lint安裝使用方法

    這篇文章主要給大家介紹了關(guān)于Go代碼檢查工具golangci-lint安裝使用的相關(guān)資料,golangci-lint用于許多開源項(xiàng)目中,比如kubernetes、Prometheus、TiDB等都使用golangci-lint用于代碼檢查,需要的朋友可以參考下
    2024-01-01
  • golang簡單tls協(xié)議用法完整示例

    golang簡單tls協(xié)議用法完整示例

    這篇文章主要介紹了golang簡單tls用法,分析了tls協(xié)議的使用步驟及客戶端與服務(wù)器端的相關(guān)實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2016-07-07
  • 在goland中讀取tpl文件的圖文操作

    在goland中讀取tpl文件的圖文操作

    這篇文章主要介紹了在goland中讀取tpl文件的圖文操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 利用go語言實(shí)現(xiàn)查找二叉樹中的最大寬度

    利用go語言實(shí)現(xiàn)查找二叉樹中的最大寬度

    這篇文章主要介紹了利用go語言實(shí)現(xiàn)查找二叉樹中的最大寬度,文章圍繞主題展開詳細(xì)介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • Go?time包AddDate使用解惑實(shí)例詳解

    Go?time包AddDate使用解惑實(shí)例詳解

    這篇文章主要為大家介紹了Go?time包AddDate使用解惑實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • Golang Http請求返回結(jié)果處理

    Golang Http請求返回結(jié)果處理

    本文主要介紹了Golang Http請求返回結(jié)果處理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Go語言官方依賴注入工具Wire的使用教程

    Go語言官方依賴注入工具Wire的使用教程

    依賴注入是一種實(shí)現(xiàn)控制反轉(zhuǎn)且用于解決依賴性問題的設(shè)計(jì)模式。Golang?中常用的依賴注入工具主要有?Inject?、Dig?等。但是今天主要介紹的是?Go?團(tuán)隊(duì)開發(fā)的?Wire,一個(gè)編譯期實(shí)現(xiàn)依賴注入的工具,感興趣的可以了解一下
    2022-09-09
  • golang jsoniter extension 處理動(dòng)態(tài)字段的實(shí)現(xiàn)方法

    golang jsoniter extension 處理動(dòng)態(tài)字段的實(shí)現(xiàn)方法

    這篇文章主要介紹了golang jsoniter extension 處理動(dòng)態(tài)字段的實(shí)現(xiàn)方法,我們使用實(shí)例級別的 extension, 而非全局,可以針對不同業(yè)務(wù)邏輯有所區(qū)分,jsoniter 包提供了比較完善的定制能力,通過例子可以感受一下擴(kuò)展性,需要的朋友可以參考下
    2023-04-04

最新評論

中牟县| 寿宁县| 昌图县| 临沭县| 罗甸县| 莱芜市| 福建省| 曲周县| 资溪县| 郴州市| 泸水县| 隆子县| 合阳县| 永城市| 华亭县| 莲花县| 新和县| 定远县| 西峡县| 东宁县| 望城县| 谢通门县| 涪陵区| 施秉县| 嘉定区| 南康市| 砚山县| 贺兰县| 石狮市| 河津市| 定结县| 马鞍山市| 大城县| 唐山市| 海宁市| 呼和浩特市| 施甸县| 盘锦市| 平度市| 堆龙德庆县| 乌拉特前旗|