熟悉使用 Go Module 與 Package
從 JavaScript 轉寫 Go 我其實還是不太熟悉 Go 如何模組化處理代碼,雖然它們有大致相似的地方,但使用體驗感覺非常簡單甚至到簡陋的程度,當然簡單並不意味著「容易」或「沒用」,Go 簡單且固執己見的哲學在各方面都感受得到。
從 JavaScript 轉寫 Go 我其實還是不太熟悉 Go 如何模組化處理代碼,雖然它們有大致相似的地方,但使用體驗感覺非常簡單甚至到簡陋的程度,當然簡單並不意味著「容易」或「沒用」,Go 簡單且固執己見的哲學在各方面都感受得到。
很早以前接觸資料庫就有聽說過「N+1 問題」,不過一直沒有寫下筆記認真思考過一次,這次撰寫問題成因與詳細解方與圖表。透過:資料結構設計(去正規化)、在 DB 層完成關聯資料查詢、批次查詢並在應用層組裝、ORM ODM Eager Loading 來解決。
使用 Agentic AI 解決問題時上下文管理至關重要,而 Anthropic 推出的 Agent Skill 上下文管理模式近期也成為業界的一種主流標準,在 Claude Code、Codex、Opencode 等工具中都有支援,透過研究如何整合進入現有的流程來增加開發效率。
處理傳遞資料時都快忘了有「序列化與反序列化資料」這個步驟,因為都被套件像是:Axios 抽象掉了,近期在寫後端也重新溫習相關知識,也延續先前文章:Go Struct Tag 是什麼?如何透過 reflect 動態處理欄位?探討 Go 如何處理序列化資料。
學習高階程式語言通常都會接受一個觀念是:「沒用到的變數會自動被垃圾回收掉」。不過越接近底層或開始探討效能問題,發現自己對於程式語言核心的記憶體概念 Heap 與 Stack 並沒有那麼清楚。程式語言究竟是如何分配與管理記憶體的?所謂的垃圾回收(Garbage Collection, GC)具體來說又做了哪些事情?
Context 是 Go 1.7 添加於標準函式庫的功能。常在存取資料庫或其他服務時會遇到,初步看起來是用於「傳遞取消信號」用途的語法,用於處理 goroutine:背負期限(deadline)、取消信號(cancellation signal)、傳遞請求相關的值(request-scoped values)。
隨著越來越多的軟體推廣與強制雙重因子驗證 2FA,我的手機也裝上了 Google Authenticator,但老實說,很長一段時間我只知道「打開 App → 輸入六位數字」,對於這組數字為什麼會一直變、伺服器又是怎麼驗證的,其實沒有真正了解過。直到最近在測試一些相關登入邏輯才回來補齊這塊知識。
前端測試一直存在龐大的需求,但具體討論如何實戰中建構合理測試體制的討論文章卻不多,隨著社群工具成熟與不同的嘗試下我摸索出一套實戰可採用的方式替團隊建構設施。這篇文章參雜主觀意見與特定的上下文,主要統整近期在工作中的經驗選擇某項解決方案之前必須知道自己選擇的原因以及未來的走向,有太多已經被淘汰的技術與陳舊代碼。
我一直對程式中日期存在個模糊不可靠的概念,通常依靠方便的庫像是:dayjs 去處理日期轉換,但底層的原理至今仍不是很清楚,只知道時間是相對的,且存儲方式可能是某種標準格式,這篇文章將盡可能補全程式處理時間所需要的知識。關於時區的規則與電腦運算存儲時間的概念。
雖然之前製作過一個筆記網站有建構用戶註冊的部份:my-note,但沒有筆記下來發現忘了很多概念,碰巧看到我看過最簡單好懂的解說影片:You're Storing Passwords Wrong. Here's The Fix - LearnThatStack,把密碼保存相關的知識都紀錄一下。
近期在 Go 處理字串時發現對於電腦處理文字的原理不是很透徹,所以翻了更多教學文件了解電腦是如何處理文字的。歷史上電腦如何處理文字?以及後續 ASCII、Unicode、UTF-8、UTF-16 相關演進特點與背後取捨,了解為什麼現代文字編碼都使用 UTF-8。
當在 Go 字串中索引位置 `n` 時,為什麼沒有得到第 `n` 個字元?相較於其他程式語言一串文字在遍歷時會預期拿到單一個字符,在 Go 會拿到「Rune」;如果直接透過索引取得 string 內容會拿到 byte。透過實際解 Codewars 題目了解處理字串要留意的東西
最近在與 MongoDB 互動時發現 Struct 欄位結尾有一段語法不是很熟悉,這篇文章探討 Struct Tag 存在的原因以及解決什麼問題。與其命令式的操縱資料,透過宣告式的方式來描述資料格式是 Struct Tag 的主要用途。
Goroutine 是由 Go 語言本身管理的輕量級執行緒(User-space Thread),而不是由作業系統管理的執行緒(OS Thread)。背後使用 M:N 排程模型。這意味著,M 個 Goroutine 會被分配到 N 個作業系統執行緒(OS Threads)上執行。
「對稱加密」就是通訊雙方進行加密與解密使用相同的金耀,但除了雙方都要保守金鑰外,怎麼讓雙方都持有相同的金鑰本身就是個問題,存在被劫持的風險(中間人攻擊)。「非對稱加密」透過一對金鑰(Key Pair),也就是公鑰與私鑰來解決對稱加密會遇到的問題。