Comments

可能不是最佳解,但至少 works for me 先備知識 至少要先做到 karma start 可以跑測試。 概念 tsc 會產生 typescript <=> javascript 對映的 source map karma + webpack + karma-coverage 可以正確處理 js 檔 所以乾脆就用 tsc 把程式編成 javascript 再測,然後用 remap-istanbul 把最後的 test coverage 結果用 tsc 產生的 source map 轉回 tpescript。 步驟 準備必要的套件 npm i -D karma-coverage karma-remap-istanbul istanbul-instrumenter-loader 準備 tsc 的設定 outDir 可以使用,但如果你的程式是 js/ts 混合的話要考慮一下,會增加等下設定 karma 和 webpack 的困擾。 最重要的是 sourceMap 一定要是 true,沒有 source map 的話 remap-istanbul 也無用武之地。 Read on →
Comments

權利聲明

原文

原作者:Rob Pike

原文位於 https://blog.golang.org/laws-of-reflection,依 CC BY 3.0 及 BSD 授權,相關權利非屬改譯者所有,詳見原文最末之權利宣告部份。

改譯

改譯者:任仲平 Ronmi Ren

本文相關權利屬改譯者所有。除中譯外,為求通順易讀,略有改動,與原文不盡相同。本文以 CC BY 3.0 TW 公開授權,惟程式碼部份除中譯外皆由原文抄錄而來,故依原授權條款授權。

介紹

「反射」一詞,在程式設計領域中,特指程式藉由型別系統來偵測、驗證自身結構的能力,是 metaprogramming 的一種。它也非常容易讓人搞混。

不同程式語言中,對於「反射」的定義和實行方式不盡相同。本篇文章旨在解釋 Go 中的反射機制,不應與其他語言混為一談。

Read on →
Comments

最近在學 CI/CD 相關的課題,研究了一下 Jenkins 但是覺得太過肥大。GitLab 本體雖然也是肥肥的 ruby,不過 gitlab-ci 預設的 gitlab-multirunner 到是 go 寫的,相當輕量;能與 GitLab 深度整合這點也還不錯。

gitlab-multirunner 支援 docker。由於我的 GitLab 本體和 ci 都是裝在 docker 裡面的。為了要在 build job 中做 docker build,所以一開始考慮用 docker-in-docker (dind)。不過 dind 有效能和 cgroup namespace 等等問題,所以後來改成將外部 docker socket 掛入 container 入的方式。這衍生了另一個問題:gitlab-multirunner 會針對每一個 job 下載必要的 image、開啟複數個 container,讓外部的 docker 看起來十分複雜,造成管理的困難。

這篇記錄了我的另一個解法:啟動另一個獨立的 docker daemon 專供 build/test/deploy job 使用。

註:以下適用 docker 1.10 以後的版本,舊版「理論上可以」,但我沒有測試,不保證能通用

Read on →
Comments

之前升 5.0 的時候在 XDA 找到一鍵 root,用下去看到殘體字介面就覺得完了完了完了。開機後果然發現偷裝 apk,刪掉還會自動重裝;手機反應速度也慢到誇張,開個 Fx beta 要 5~6 秒;Free memory 也只剩約 700 MB。當時就有清空手機重刷的想法,只是一直找不到時間備份資料。前幾天 5.1 更新出來,更新上去發現 root 雖然不見了,可是反應時間沒有改善,決定長痛不如短痛。可惜 XDA 沒有直接教 root 368 的教學,只好自己手動處理。

整個清掉重刷之後果然手機反應速度回復正常,free memory 也回到 1.2 GB,不禁讓人感嘆這後門程式的粗製濫造。同志,走後門也是得裝個樣子你說是不?

Read on →
Comments

簡介

Go 是一門新的程式語言。雖然它從現有的程式語言中借鏡了許多設計理念,但它也有許多與眾不同的特性。若你把用 C++ / Java 撰寫的程式改寫成等價的 Go 程式,恐怕難以得到令人滿意的結果。同樣地,用 Go 語言的角度來解決問題,你可能會寫出有效但不太一樣的程式。換句話說,想要寫出好的 Go 程式,對於 Go 語言特性及慣例的掌握是重要的一環。同時,對於社群慣例 (比如排版、命名方式、程式的建立等等) 也應該要適當的了解,這樣其他使用 Go 語言的開發者才容易理解你寫的程式。

這份文件列舉出一些訣竅,讓你寫出清楚、符合 Go 語言特性的程式。這是對於 Go 語言規格書導覽 Go 語言 以及 如何撰寫 Go 程式 等三份文件的補充,所以你應該先讀過這三份文件。

Read on →
Comments

使用 transaction 的時候,利用 defer 函式的特性 commit 或 rollback 比較合於 Go 的慣例。理論上應該有兩種形式,第一種是利用 Commit() 之後 Rollback() 不會真正執行的特性:

Read on →