<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Channel on 小惡魔 - AppleBOY</title><link>https://blog.wu-boy.com/tags/channel/</link><description>Recent content in Channel on 小惡魔 - AppleBOY</description><generator>Hugo</generator><language>en-us</language><managingEditor>appleboy.tw@gmail.com (Appleboy)</managingEditor><webMaster>appleboy.tw@gmail.com (Appleboy)</webMaster><lastBuildDate>Fri, 21 May 2021 04:52:17 +0000</lastBuildDate><atom:link href="https://blog.wu-boy.com/tags/channel/feed.xml" rel="self" type="application/rss+xml"/><item><title>如何取得上傳進度條 progress bar 相關數據及實作 Graceful Shutdown</title><link>https://blog.wu-boy.com/2021/05/graceful-shutdown-with-progress-bar-in-golang/</link><pubDate>Fri, 21 May 2021 04:52:17 +0000</pubDate><author>appleboy.tw@gmail.com (Appleboy)</author><guid>https://blog.wu-boy.com/2021/05/graceful-shutdown-with-progress-bar-in-golang/</guid><description>&lt;p&gt;&lt;img src="https://lh3.googleusercontent.com/ASkclquxfpPTlJ_QWnhZjB5katrz18NyK4zt2w47UM8gS71MCjWodDoGp50nHRyeQx8MfbJJbwWjfIWCoKbZYLkec7a-FqMEw-r9Lh3U8XGAuwEqWa3DVMB2lkhdgMQUI1IMiKWL5Ss=w1920-h1080" alt=""&gt;&lt;/p&gt;
&lt;p&gt;由於專案需求，需要開發一套 CLI 工具，讓 User 可以透過 CLI 上傳大檔案來進行 Model Training，請參考上面的流程圖。首先第一步驟會先跟 API Server 驗證使用者，驗證完畢就開始上傳資料到 &lt;a href="https://aws.amazon.com/tw/s3/"&gt;AWS S3&lt;/a&gt; 或其他 Storage 空間，除了上傳過程需要在 CLI 顯示目前進度，另外也需要將目前上傳的進度 (速度, 進度及剩餘時間) 都上傳到 API Server，最後在 Web UI 介面透過 &lt;a href="https://www.apollographql.com/docs/react/data/subscriptions/"&gt;GraphQL Subscription&lt;/a&gt; 讓使用者可以即時看到上傳進度數據。&lt;/p&gt;
&lt;p&gt;而 CLI 上傳進度部分，我們選用了一套開源套件 &lt;a href="https://github.com/cheggaaa/pb"&gt;cheggaaa/pb&lt;/a&gt;，相信有在寫 &lt;a href="https://golang.org"&gt;Go 語言&lt;/a&gt;都並不會陌生。而此套件雖然可以幫助在 Terminal 顯示進度條，但是有些接口是沒有提供的，像是即時速度，上傳進度及剩餘時間。本篇教大家如何實作這些數據，及分享過程會遇到相關問題。&lt;/p&gt;</description></item><item><title>Go 語言 Select Multiple Channel 注意事項</title><link>https://blog.wu-boy.com/2020/10/select-multiple-channel-in-golang/</link><pubDate>Mon, 12 Oct 2020 07:44:32 +0000</pubDate><author>appleboy.tw@gmail.com (Appleboy)</author><guid>https://blog.wu-boy.com/2020/10/select-multiple-channel-in-golang/</guid><description>&lt;p&gt;&lt;a href="https://lh3.googleusercontent.com/jsocHCR9A9yEfDVUTrU0m42_aHhTEVDGW5p5PsQSx7GSlkt3gLjohfXH3S7P7p982332ruU_e-EtW0LwmiuZjvN65VIcyME-zE35C6EM0IV1nqY6KoNw3dwW2djjid3F-T5YgnJothA=w1920-h1080" title="golang logo"&gt;&lt;img src="https://lh3.googleusercontent.com/jsocHCR9A9yEfDVUTrU0m42_aHhTEVDGW5p5PsQSx7GSlkt3gLjohfXH3S7P7p982332ruU_e-EtW0LwmiuZjvN65VIcyME-zE35C6EM0IV1nqY6KoNw3dwW2djjid3F-T5YgnJothA=w1920-h1080" alt="golang logo" title="golang logo"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;相信大家都知道 Select 可以用來處理多個 Channel，但是大家有沒有想過一個情境，如果是 for 搭配 select 時，肯定會用一個 Timer 或 context 來處理 Timeout 或手動 Cancel，假設如果跟其他 Channel 同時到達時，官方說法是 Select 會隨機選擇一個狀況來執行，如果並非選到我們所要的 case 那就會造成情境或流程上的錯誤，而本影片就是講解該如何解決此問題，請大家務必詳細了解業務的需求，來決定程式碼架構該如何寫。&lt;/p&gt;</description></item><item><title>[Go 教學] graceful shutdown with multiple workers</title><link>https://blog.wu-boy.com/2020/02/graceful-shutdown-with-multiple-workers/</link><pubDate>Sun, 02 Feb 2020 14:53:48 +0000</pubDate><author>appleboy.tw@gmail.com (Appleboy)</author><guid>https://blog.wu-boy.com/2020/02/graceful-shutdown-with-multiple-workers/</guid><description>&lt;p&gt;&lt;a href="https://lh3.googleusercontent.com/jsocHCR9A9yEfDVUTrU0m42_aHhTEVDGW5p5PsQSx7GSlkt3gLjohfXH3S7P7p982332ruU_e-EtW0LwmiuZjvN65VIcyME-zE35C6EM0IV1nqY6KoNw3dwW2djjid3F-T5YgnJothA=w1920-h1080" title="golang logo"&gt;&lt;img src="https://lh3.googleusercontent.com/jsocHCR9A9yEfDVUTrU0m42_aHhTEVDGW5p5PsQSx7GSlkt3gLjohfXH3S7P7p982332ruU_e-EtW0LwmiuZjvN65VIcyME-zE35C6EM0IV1nqY6KoNw3dwW2djjid3F-T5YgnJothA=w1920-h1080" alt="golang logo" title="golang logo"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;在閱讀本文章之前請先預習『&lt;a href="https://blog.wu-boy.com/2019/11/implement-job-queue-using-buffer-channel-in-golang/"&gt;用 Go 語言 buffered channel 實作 Job Queue&lt;/a&gt;』，本篇會針對&lt;a href="https://www.slideshare.net/appleboy/job-queue-in-golang-184064840"&gt;投影片&lt;/a&gt; p.26 到 p.56 做詳細的介紹，教大家如何從無到有寫一個簡單的 multiple worker，以及如何處理 graceful shutdown with workers，為什麼要處理 graceful shutdown? 原因是中途手動執行 ctrl + c 或者是部署新版程式都會遇到該如何確保 job 執行完成後才結束 main 函式。&lt;/p&gt;</description></item></channel></rss>