宅男在线永久免费观看网直播,亚洲欧洲日产国码无码久久99,野花社区在线观看视频,亚洲人交乣女bbw,一本一本久久a久久精品综合不卡

全部
常見問題
產品動態(tài)
精選推薦

Golang 函數:并發(fā)任務執(zhí)行中的錯誤處理技術

管理 管理 編輯 刪除

Go 語言函數:并發(fā)任務執(zhí)行中的錯誤處理技術

在 Golang 中使用并發(fā)函數執(zhí)行任務時,處理錯誤至關重要。本文介紹了多種錯誤處理技術,并提供了有關如何將它們應用于實際場景的實戰(zhàn)案例。

錯誤處理技術

1. 返回值

最簡單的方法是使用返回值來傳遞錯誤。函數可以返回錯誤值,調用者可以檢查該值并采取適當的措施。

func getSum(a, b int) (int, error) {

   if a < 0 || b < 0 {

       return 0, errors.New("inputs must be non-negative")

   }

   return a + b, nil

}

2. 拋出異常

Go 語言提供了一個內置的異常機制??梢允褂?panic 函數拋出異常,由調用者使用 recover 函數捕獲。

立即學習“go語言免費學習筆記(深入)”;

func getArea(width, height int) (int, error) {

   if width < 0 || height < 0 {

       panic("invalid width or height")

   }

   return width * height, nil

}

3. channel

通道提供了另一種用于并發(fā)任務錯誤處理的機制??梢詣?chuàng)建一個接收錯誤的 channel,然后將該 channel 傳遞給任務 goroutine。如果任務出錯,goroutine 將向 channel 發(fā)送錯誤。

func getAverage(numbers []int) (float64, error) {

   errCh := make(chan error)

   go func() {

       sum := 0

       for _, n := range numbers {

           sum += n

       }

       avg := float64(sum) / float64(len(numbers))

       if len(numbers) == 0 {

           errCh <- errors.New("empty slice")

       } else {

           errCh <- nil

       }

   }()

  select {

   case err := <-errCh:

       return 0, err

   case <-time.After(1 * time.Second):

       return 0, errors.New("timeout")

   }

}

實戰(zhàn)案例

文件讀取并處理

以下函數使用并發(fā) goroutine 讀取并處理文件中的行。錯誤通過 channel 傳遞。

func processLines(filePath string) ([][]string, error) {

   errCh := make(chan error)

   file, err := os.Open(filePath)

   if err != nil {

       return nil, err

   }

   defer file.Close()

   lines := [][]string{}

   nLines := 0

   scanner := bufio.NewScanner(file)

   for scanner.Scan() {

       line := scanner.Text()

       nLines++

       go func(line string) {

           parts := strings.Split(line, ",")

           errCh <- processLine(parts)

       }(line)

   }

   for i := 0; i < nLines; i++ {

       err := <-errCh

       if err != nil {

           return nil, err

       }

   }

   return lines, nil

}

HTTP 請求并發(fā)

以下函數使用并發(fā) goroutine 發(fā)出 HTTP 請求。錯誤通過返回的 channel 傳遞。

func sendRequests(urls []string) ([][]byte, error) {

   respCh := make(chan []byte, len(urls))

   errCh := make(chan error, len(urls))

   for _, url := range urls {

       go func(url string) {

           resp, err := http.Get(url)

           if err != nil {

               errCh <- err

           } else {

               defer resp.Body.Close()

               body, err := ioutil.ReadAll(resp.Body)

               if err != nil {

                   errCh <- err

               } else {

                   respCh <- body

               }

           }

       }(url)

   }

   responses := [][]byte{}

   for i := 0; i < len(urls); i++ {

       select {

       case resp := <-respCh:

           responses = append(responses, resp)

       case err := <-errCh:

           return nil, err

       }

   }

   return responses, nil

}

請登錄后查看

小碼二開 最后編輯于2024-10-02 17:13:13

快捷回復
回復
回復
回復({{post_count}}) {{!is_user ? '我的回復' :'全部回復'}}
排序 默認正序 回復倒序 點贊倒序

{{item.user_info.nickname ? item.user_info.nickname : item.user_name}} LV.{{ item.user_info.bbs_level || item.bbs_level }}

作者 管理員 企業(yè)

{{item.floor}}# 同步到gitee 已同步到gitee {{item.is_suggest == 1? '取消推薦': '推薦'}}
{{item.is_suggest == 1? '取消推薦': '推薦'}}
沙發(fā) 板凳 地板 {{item.floor}}#
{{item.user_info.title || '暫無簡介'}}
附件

{{itemf.name}}

{{item.created_at}}  {{item.ip_address}}
打賞
已打賞¥{{item.reward_price}}
{{item.like_count}}
{{item.showReply ? '取消回復' : '回復'}}
刪除
回復
回復

{{itemc.user_info.nickname}}

{{itemc.user_name}}

回復 {{itemc.comment_user_info.nickname}}

附件

{{itemf.name}}

{{itemc.created_at}}
打賞
已打賞¥{{itemc.reward_price}}
{{itemc.like_count}}
{{itemc.showReply ? '取消回復' : '回復'}}
刪除
回復
回復
查看更多
打賞
已打賞¥{{reward_price}}
1787
{{like_count}}
{{collect_count}}
添加回復 ({{post_count}})

相關推薦

快速安全登錄

使用微信掃碼登錄
{{item.label}} 加精
{{item.label}} {{item.label}} 板塊推薦 常見問題 產品動態(tài) 精選推薦 首頁頭條 首頁動態(tài) 首頁推薦
取 消 確 定
回復
回復
問題:
問題自動獲取的帖子內容,不準確時需要手動修改. [獲取答案]
答案:
提交
bug 需求 取 消 確 定
打賞金額
當前余額:¥{{rewardUserInfo.reward_price}}
{{item.price}}元
請輸入 0.1-{{reward_max_price}} 范圍內的數值
打賞成功
¥{{price}}
完成 確認打賞

微信登錄/注冊

切換手機號登錄

{{ bind_phone ? '綁定手機' : '手機登錄'}}

{{codeText}}
切換微信登錄/注冊
暫不綁定
CRMEB客服

CRMEB咨詢熱線 咨詢熱線

400-8888-794

微信掃碼咨詢

CRMEB開源商城下載 源碼下載 CRMEB幫助文檔 幫助文檔
返回頂部 返回頂部
CRMEB客服