」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 使用 @harnyk/chan 在 TypeScript 中實作 Golang 的 chan

使用 @harnyk/chan 在 TypeScript 中實作 Golang 的 chan

發佈於2024-08-06
瀏覽:700

Implementing Golang

介紹

TypeScript 中的非同步程式設計可能具有挑戰性,尤其是在處理並發時。受到 Golang chan 的啟發,我創建了一個庫 @harnyk/chan,為 TypeScript 帶來類似的功能,從而實現高效且可管理的並發性。

@harnyk/chan 是什麼?

@harnyk/chan 是一個模仿 Golang 頻道機制的 TypeScript 函式庫。它允許非同步任務之間進行安全、並發的通信,類似於 Go 的 chan。

特徵

  1. 基本通路操作

    • 發送和接收:@harnyk/chan 中的通道可用於在非同步函數之間發送和接收值。
    • 緩衝通道:支援緩衝通道處理多個值。
  2. 非同步迭代:

    • 通道可以使用 for-await-of 進行非同步迭代,從而可以輕鬆處理收到的值。
  3. 選擇語句:

    • select語句允許你等待多個通道操作,選擇先準備好的動作,類似Go的select。

用法範例

這是一個簡單的範例,示範如何使用@harnyk/chan:

import { chan, select } from '@harnyk/chan';

const ch = chan();

// Producer
(async () => {
  for (let i = 0; i  {
  for await (const value of ch) {
    console.log(value);
  }
})();

為什麼要使用@harnyk/chan?

  • 改進的並發管理:輕鬆管理並發任務和通訊。
  • 增強可讀性:受 Go chan 啟發的清晰簡潔的語法。
  • 強大的非同步模式:利用通道的力量建構更複雜、更可靠的非同步工作流程。

結論

@harnyk/chan 將 Golang chan 的強大功能引入 TypeScript,使非同步程式設計更加易於管理和高效。無論您是處理複雜的非同步工作流程還是只是需要更好的方法來處理並發,@harnyk/chan 都可以成為 TypeScript 工具包中的一個有價值的工具。

連結

  • GitHub 儲存庫
  • 更多範例

請參閱 GitHub 儲存庫以取得更多範例和文件。如需更深入的了解,請閱讀原始部落格文章。快樂編碼!

版本聲明 本文轉載於:https://dev.to/panic_err/implementing-golangs-chan-in-typescript-with-harnykchan-187h?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 如何從Google API中檢索最新的jQuery庫?
    如何從Google API中檢索最新的jQuery庫?
    從Google APIS 問題中提供的jQuery URL是版本1.2.6。對於檢索最新版本,以前有一種使用特定版本號的替代方法,它是使用以下語法: https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js(google hosted...
    程式設計 發佈於2025-02-07
  • 如何使用不同數量列的聯合數據庫表?
    如何使用不同數量列的聯合數據庫表?
    合併列數不同的表 當嘗試合併列數不同的數據庫表時,可能會遇到挑戰。一種直接的方法是在列數較少的表中,為缺失的列追加空值。 例如,考慮兩個表,表 A 和表 B,其中表 A 的列數多於表 B。為了合併這些表,同時處理表 B 中缺失的列,請按照以下步驟操作: 確定表 B 中缺失的列,並將它們添加到表的...
    程式設計 發佈於2025-02-07
  • 對象擬合:IE和Edge中的封面失敗,如何修復?
    對象擬合:IE和Edge中的封面失敗,如何修復?
    解決此問題,我們採用了一個巧妙的CSS解決方案來解決問題:高度:100%; 高度:auto ; 寬度:100%; //對於水平塊 ,使用絕對定位將圖像定位在中心,以object-fit:object-fit :cover in IE和edge消除了問題。現在,圖像將按比例擴展,保持所需的效果而不...
    程式設計 發佈於2025-02-07
  • 如何在Java列表中有效計算元素的發生?
    如何在Java列表中有效計算元素的發生?
    計數列表中的元素出現在列表 中,在java編程中,列舉列表中列舉元素出現的任務來自列表。為此,收集框架提供了全面的工具套件。 在這種情況下,Batocurrences變量將保持值3,代表動物列表中的“ BAT”出現的數量。 &&& [此方法是簡單的,可以得出準確的結果,使其成為計算列表中元素出現的...
    程式設計 發佈於2025-02-07
  • 為什麼使用固定定位時,為什麼具有100%網格板柱的網格超越身體?
    為什麼使用固定定位時,為什麼具有100%網格板柱的網格超越身體?
    網格超過身體,用100%grid-template-columns 問題:考慮以下CSS和HTML: position:fixed ; grid-template-columns:40%60%; grid-gap:5px; 背景: #eee; 當位置未固定時,網格將正確顯示。但是...
    程式設計 發佈於2025-02-07
  • 如何使用FormData()處理多個文件上傳?
    如何使用FormData()處理多個文件上傳?
    )處理多個文件輸入時,通常需要處理多個文件上傳時,通常是必要的。可以將fd.append("fileToUpload[]", files[x]);方法用於此目的,允許您在單個請求中發送多個文件。 初始嘗試 在JavaScript中,一種常見方法是:); 但是,此代碼僅處理第...
    程式設計 發佈於2025-02-07
  • 如何在JavaScript對像中動態設置鍵?
    如何在JavaScript對像中動態設置鍵?
    如何為JavaScript對像變量創建動態鍵,嘗試為JavaScript對象創建動態鍵,使用此Syntax jsObj['key' i] = 'example' 1;將不起作用。正確的方法採用方括號:他們維持一個長度屬性,該屬性反映了數字屬性(索引)和一個數字屬性的數量。標準對像沒有模仿這...
    程式設計 發佈於2025-02-07
  • 如何從PHP服務器發送文件?
    如何從PHP服務器發送文件?
    將文件發送到user
    程式設計 發佈於2025-02-07
  • PHP陣列鍵值異常:了解07和08的好奇情況
    PHP陣列鍵值異常:了解07和08的好奇情況
    PHP數組鍵值問題,使用07&08 在給定數月的數組中,鍵值07和08呈現令人困惑的行為時,就會出現一個不尋常的問題。運行print_r($月份)返回意外結果:鍵“ 07”丟失,而鍵“ 08”分配給了9月的值。 此問題源於PHP對領先零的解釋。當一個數字帶有0(例如07或08)的前綴時,PHP...
    程式設計 發佈於2025-02-07
  • 如何干淨地刪除匿名JavaScript事件處理程序?
    如何干淨地刪除匿名JavaScript事件處理程序?
    在這里工作/},false); 不幸的是,答案是否。除非在Creation中存儲對處理程序的引用。 要解決此問題,請考慮將事件處理程序存儲在中心位置,例如頁面的主要對象,請考慮將事件處理程序存儲在中心位置,否則無法清理匿名事件處理程序。 。這允許在需要時輕鬆迭代和清潔處理程序。
    程式設計 發佈於2025-02-07
  • HTML格式標籤
    HTML格式標籤
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    程式設計 發佈於2025-02-07
  • 微實驗標準:它是評估系統性能的可靠工具嗎?
    微實驗標準:它是評估系統性能的可靠工具嗎?
    [2代碼或小型系統調用。它旨在確定特定操作完成所需的時間和資源。但是,了解Microbenching的作用和不涉及的是至關重要。 什麼是microbenchmarking是 的名稱,Microbenchmarking著重於測量小型,特定的特定,特定的,特定的,特定的,特定的,特定的,特定的,特定的,...
    程式設計 發佈於2025-02-07
  • 如何有效地加入SQL中的表以從多列中檢索數據?
    如何有效地加入SQL中的表以從多列中檢索數據?
    [2 使用SQL Table Joins 從多個列中檢索數據 本指南演示瞭如何有效地組合來自多個SQL表的數據以在各種列中檢索信息。我們將重點介紹方法,突出顯示其使用並解決Microsoft Access的特定注意事項。 [2 基於共享列值從兩個或多個表中合併行。 結果表僅包含所有連接表中匹配的...
    程式設計 發佈於2025-02-07
  • 為什麼Microsoft Visual C ++無法正確實現兩台模板的實例?
    為什麼Microsoft Visual C ++無法正確實現兩台模板的實例?
    [2明確擔心Microsoft Visual C(MSVC)在正確實現兩相模板實例化方面努力努力。該機制的哪些具體方面無法按預期運行? 背景:說明:的初始Syntax檢查在範圍中受到限制。它未能檢查是否存在聲明名稱的存在,導致名稱缺乏正確的聲明時會導致編譯問題。 為了說明這一點,請考慮以下示例:一個...
    程式設計 發佈於2025-02-07
  • 可以在純CS中將多個粘性元素彼此堆疊在一起嗎?
    可以在純CS中將多個粘性元素彼此堆疊在一起嗎?
    </main> <section> ,但无法使其正常工作,如您所见。任何洞察力都将不胜感激! display:grid; { position:sticky; top:1em; z-index:1 1 ; { { { pos...
    程式設計 發佈於2025-02-07

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3