文件符號

Go 非同步運算 (Goroutine)

Goroutine 是由 Go 語言本身管理的輕量級執行緒(User-space Thread),而不是由作業系統管理的執行緒(OS Thread)。背後使用 M:N 排程模型。這意味著,M 個 Goroutine 會被分配到 N 個作業系統執行緒(OS Threads)上執行。

人和鑰匙符號

對稱加密與非對稱加密

「對稱加密」就是通訊雙方進行加密與解密使用相同的金耀,但除了雙方都要保守金鑰外,怎麼讓雙方都持有相同的金鑰本身就是個問題,存在被劫持的風險(中間人攻擊)。「非對稱加密」透過一對金鑰(Key Pair),也就是公鑰與私鑰來解決對稱加密會遇到的問題。

陣列符號

Go Slice vs Array 差異與底層原理

在 Go 語言中,有兩種常見的資料結構可用於表示「序列資料」:Array 與 Slice。這兩者在語法上相似,但背後行為與使用情境差異非常關鍵。簡單來說,Array 是固定長度(Static Array),而 Slice 是動態長度(Dynamic Array)。

文件符號

GitLab Mirror 3 分鐘輕鬆遷移與同步 Git Repo

近期工作上計劃將 GitLab 遷移到 GitHub,但光是騰出時間進行專案遷移就感覺很麻煩,也因此很多計畫被耽擱著,像是建構 CI 自動化測試環境、導入 AI 代碼審核。幸好 GitLab 很早就有一項功能叫做 Mirroring。

容器裝載驚嘆號符號

速通了解 TypeScript 泛型

對於 TypeScript 的泛型我一直有種恐懼,什麼滿滿的 `<T>`、`<U>`、`extends`、多層嵌套,看起來就很可怕。畢竟在日常開發裡,好像也不太需要……對吧?的確解決小問題如此,但在特定問題下泛型將會非常必要。

打勾圓框符號

前端自動化測試會遇上的坑

前端 UI 一直是多變且複雜的題材,經歷各種工具迭代與起伏,有很長一段時間其實並沒有什麼特別統一良好的方式進行測試。在經歷過太多次的跌宕變化過後,紀錄我認為現階段怎麼打造可被驗證的前端與未來趨勢與過程中實際遇到的各種困難。

形狀轉換符號

實際簡白的 Monad 解釋

Functor 的好處是:它讓我們能用同樣的方式操作不同的「容器型別」,想像成一個「裝值的盒子」,它允許我們對盒子裡的值進行運算,但同時又保留了盒子的結構。Functor 「提供了方式在容器裡操作值」,遵循同一性(Identity)與合成性(Composition)。

形狀轉換符號

實際簡白的 Applicative Functor 解釋

從先前 Functor 的概念出發,Functor 的 `map` 只能作用在數值上,而不能是「存在於容器中的數值」上,所以才需要 Applicative Functor,一種比 Functor 更多功能的結構,除了滿足 Functor 的功能外還能「讓盒子裡的函數作用(apply)到另一盒子的值」。

節點符號

Pointfree 代碼風格透過函式組合提昇代碼品質

一種代碼風格,著重於函式的組合關係而非具體資料,定義函式時不顯式提其參數(points),而是透過函式組合與高階函式來表達資料流動。可以減少不必要的命名保持代碼簡潔與達成更好的通用組合性,但是額外的抽象須被理解與熟悉。透過兩個實際案例熟悉 Pointfree 開發風格。

形狀轉換符號

實際簡白的 Functor 解釋

我不是數學家也對於範疇論沒有太大興趣,但它深刻的與 Functional Programming 進階理念掛勾,透過實戰了解開發層面這些理論可以如何撰寫更好維護的程式。Functor 是一種具有 map 方法的結構,允許對其中的值進行轉換同時保持結構不變、讓函數可以基於容器進行組合,意味著可以被用於封裝副作用或情境。

載入符號

探討適當的載入時長如何打造更好的載入體驗

最美好的使用體驗是即刻的,因此追求更短暫的等待時間越快越早的回饋很重要,然而倉促的將任何當下的資訊拋給用戶未必是最佳體驗,舉例來說:1.進入網頁 2.反饋「載入資料中……」3.顯示載入完成的資料,以上流程簡潔實在,會有什麼問題呢?問題出在時機和時間。