Golang 實作節流(Throttling)和防抖(Debouncing)

在 Golang 中實現節流和防抖功能與 JavaScript 中的實現思路類似,但需要利用 Golang 的特性來實現。
以下是 Golang 中節流和防抖的基本實現方法:

節流(Throttling)

節流的目的是限制函數在一定時間內只能執行一次。以下是一個基本的節流函數實現:

func throttle(interval time.Duration, f func()) func() {
    var lastTime time.Time
    return func() {
        now := time.Now()
        if now.Sub(lastTime) >= interval {
            f()
            lastTime = now
        }
    }
}

使用示例:

throttledFunc := throttle(time.Second, func() {
    fmt.Println("Throttled function executed")
})

// 在需要節流的地方調用
throttledFunc()

防抖(Debouncing)

防抖的目的是延遲函數的執行,直到一定時間內沒有再次調用。以下是一個基本的防抖函數實現:

func debounce(wait time.Duration, f func()) func() {
    var timer *time.Timer
    return func() {
        if timer != nil {
            timer.Stop()
        }
        timer = time.AfterFunc(wait, f)
    }
}

使用示例:

debouncedFunc := debounce(time.Second, func() {
    fmt.Println("Debounced function executed")
})

// 在需要防抖的地方調用
debouncedFunc()

注意事項

  1. 這些實現使用了 Golang 的 time 包來處理時間和定時器。
  2. 節流函數使用了時間比較來限制執行頻率,而防抖函數使用了 time.AfterFunc 來延遲執行。
  3. 在實際應用中,可能需要考慮並發安全性,特別是在多個 goroutine 可能同時調用這些函數的情況下。
  4. 這些基本實現可以根據具體需求進行擴展,例如添加取消功能、傳遞參數等。
  5. 對於需要返回值的函數,可能需要修改實現方式,例如使用 channel 來傳遞結果。

通過使用這些技術,可以有效地控制函數的執行頻率,優化性能並減少不必要的資源消耗。在處理用戶輸入、API 請求或其他頻繁觸發的事件時,這些技術特別有用。

Read more

2025 日本之旅

2025 日本之旅

這次 2025/10/4-12 的日本之旅 我的印象全停留在,卡啦OK多難睡,網咖多難找,還有300日圓可以洗澡12分鐘上。是沒這麼慘啦,但多災多難真的太有記憶點了。 但我很開心自己能完成 大阪 ⭢ 京都 ⭢ 東京 的自由行,從大阪關西機場到成田機場離開。對於一個人就第一次這樣走,很有挑戰。 這次要檢討的是,機場 ⭢ 旅館路線真的要先查好,尤其不要晚上去旅館,因為可能趕不上櫃檯關門時間。但最後事實證明,是我搞錯旅館位置,以為還以為我的旅館櫃檯關門了。但凡早點發現,就不用去找卡啦OK和網咖住。 再來是網咖過夜,一定要早點去找。包廂一定早早被包走。只能另外再找住宿地方。 最後是 Booking.com 實在太爛了。可能是我重複下單後,刪除其中一單的關係,把我另一個已經付款的旅館,當天取消!當天取消是要怎麼當天找到合適的旅館啦,整個住宿價格飆高。不得已,又要找網咖去住。 講完痛苦的部分,講講開心的部分。 這次看到漂亮的萬博大屋根,環形周長2公里。非常壯觀。

By Mason Tang
30歲心得

30歲心得

1. 不要介入別人的課題。避免別人負面情緒,影響到自己。 2. 累積專業,提高最低收入。也是向上層級的基本。 3. 覺察自己,調整自身態度、行為模式,成為更好的自己。 4. 揣測人性,保護自己同時創造共贏。 5. 練習不帶自己價值觀,聆聽別人說什麼,接受世界什麼人都有,可能別人的方式更好。 6. 練習接受現況,並持續思考下一步。 一切痛苦來源都是不接受。 7. 不帶目的,廣結善緣。持續做,不知道種子什麼時候會發芽,但回報是巨大的,會遠遠超越工作多年,足以改變人生。越早開始越好,才有足夠時間等到機會到來。 8. 學習理財, 10萬, 300萬, 1000萬,...,只用自己階段適合的理財方式。 * < 10 萬,拼命存錢,存緊急預備金,買足人身保險。避開無政府監管投資。 * <300

By Mason Tang
n8n怎麼做防抖debounce?

n8n怎麼做防抖debounce?

防抖 debounce, 是程式設計重要的概念之一。 用意是短時間有多個訊息進來,只處理一次。 處理哪一次呢?只處理最後一次。 就比如,有人點擊習慣什麼都按兩下, 你就要每次都處理兩次嗎? 又比如,你做 Line 機器人。講一句回一句。 那如果使用者一次傳好幾句呢? 像是打錯字,習慣的修正,再送一次。或是使用者分段講完。 你要跑一次一起處理,還是跑多次? 現在你知道使用情境了,那在 n8n 怎麼做呢? 就比如 Line 訊息好了,你其實可以把Webhook 來的訊息存到 db 裡。 另外做一個 短時間(ex:10s) 就跑一次的 schedule, 去檢查新訊息,並休息一下(ex:5s)。再檢查新訊息。 如果兩次新訊息,筆數都一樣,就表示沒有新訊息進來了。就可以開始處理。 最後再把新訊息標記成舊訊息。 讓

By Mason Tang