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

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

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

golang 語言協(xié)程

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

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

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

運行效果

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

運行效果

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)
  }
}

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

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

看代碼吧~

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í)行的時候,傳入形參的值已經(jīng)確定。

如果想要達到想要的效果需要進行第一種傳參形式。

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

相關文章

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

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

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

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

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

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

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

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

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

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

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

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

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

    Go?time包AddDate使用解惑實例詳解

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

    Golang Http請求返回結果處理

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

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

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

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

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

最新評論

蓝田县| 会理县| 长阳| 盖州市| 九龙城区| 镇远县| 碌曲县| 敦化市| 新乡县| 江西省| 鸡西市| 穆棱市| 饶河县| 响水县| 西畴县| 乌苏市| 明溪县| 延安市| 万安县| 东乌珠穆沁旗| 姜堰市| 新兴县| 铜山县| 镇巴县| 西城区| 沙河市| 湘阴县| 陵川县| 双桥区| 麻阳| 武鸣县| 梓潼县| 全州县| 普宁市| 文水县| 临沧市| 丰宁| 泽库县| 开化县| 海兴县| 新宾|