The Laws of Reflection 中譯
權利聲明
原文
原作者: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 →gitlab-ci and docker
最近在學 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 →root Z Ultra 5.1 (368)
之前升 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 →有效地去 - Effective go 正體中文翻譯
簡介
Go 是一門新的程式語言。雖然它從現有的程式語言中借鏡了許多設計理念,但它也有許多與眾不同的特性。若你把用 C++ / Java 撰寫的程式改寫成等價的 Go 程式,恐怕難以得到令人滿意的結果。同樣地,用 Go 語言的角度來解決問題,你可能會寫出有效但不太一樣的程式。換句話說,想要寫出好的 Go 程式,對於 Go 語言特性及慣例的掌握是重要的一環。同時,對於社群慣例 (比如排版、命名方式、程式的建立等等) 也應該要適當的了解,這樣其他使用 Go 語言的開發者才容易理解你寫的程式。
這份文件列舉出一些訣竅,讓你寫出清楚、符合 Go 語言特性的程式。這是對於 Go 語言規格書、導覽 Go 語言 以及 如何撰寫 Go 程式 等三份文件的補充,所以你應該先讀過這三份文件。
Read on →defer, Commit and Rollback
使用 transaction 的時候,利用 defer 函式的特性 commit 或 rollback 比較合於 Go 的慣例。理論上應該有兩種形式,第一種是利用 Commit()
之後 Rollback()
不會真正執行的特性:
為 function 加上方法來測試 http handler
在寫測試的時候,發現自己一直重複使用 NewRequest
跟 NewRecorder
,所以想到可以在 function 上加上方法來協助處理這些問題。