Amo Chen

Golang - 從 Hello World 認識 GOPATH

初學 golang 的人應該都會對環境變數 GOPATH 感到困惑。

譬如 PYTHONPATH 是 Python 尋找模組與套件的路徑,一般來說並不需要特別設定,也可以用得很開心。

然而 GOPATH 則不一樣,一旦程式涉及 package 就會需要留心 GOPATH 的設定,很容易令人感到困惑,但是只要弄清楚 GOPATH 的基本,就能夠很輕鬆地開發 Go 應用程式。

那麼,就從 Hello World 開始認識 GOPATH 吧!

Posted on  Jul 26, 2020  in  Go 程式設計 - 初階  by  Amo Chen  ‐ 4 min read

用範例輕鬆學 Python multiprocessing 模組

Python 內建的 multiprocessing 是相當重要的模組,如果有平行(parallelism)處理的需求,除了內建的 threading 模組之外,另一個就屬 multiprocessing 。

使用 multiprocessing 的好處在於能夠很大程度避開 Python GIL 對於程式效能的影響,但壞處則是對於記憶體的耗用程度也較高,即便如此也是一個必須了解的模組。

本篇將實際透過幾個範例學習如何使用 multiprocessing 模組。

Last updated on  Aug 8, 2023  in  Python 程式設計 - 初階  by  Amo Chen  ‐ 5 min read

用 pydantic 輕鬆進行設定管理(Settings management)

開發時,不免都會需要實作設定檔,藉由設定檔簡單地改變系統的行為。例如 Debug 模式的開關、資料庫相關設定等等,都通常會放在設定檔中。

而 Python 不僅提供內建模組 configparser 能夠簡單實作設定檔之外,也可以簡單利用 class 實作設定檔,例如以下 2 個檔案就是 class 形式的設定檔範例:

# settings.py
class Settings(object):
    DB_HOST = 'localhost'
    DB_PORT = 8888


settings = Settings()
# test.py
from settings import settings


print(settings.DB_HOST, settings.DB_PORT)

然而,現今開發專案也經常會使用 dotenv (例如 python-dotenv )讓設定更加方便。

除了自行開發結合 dotenv 的功能之外,其實可以選擇利用 pydantic 輕鬆地整合 class 形式的設定檔與 dotenv

Posted on  Jul 1, 2020  in  Python 模組/套件推薦 , Python 程式設計 - 高階  by  Amo Chen  ‐ 3 min read

Docker 環境變數使用筆記

環境變數(Environment variable)是開發時常見用來控制程式行為的方法之一。

近年隨著 Docker 被普遍運用在開發環境之中,如何方便地在 Docker 中使用環境變數就變成必學的課題之一。

本篇介紹幾種 Docker 與 Docker compose 中設定環境變數的方法。

Posted on  Jun 19, 2020  in  Docker  by  Amo Chen  ‐ 2 min read

從零開始的 React 教學 Part 3 - Class Components

從零開始的 React 教學 Part 2 中,我們學會利用 Webpack 編譯含有 JSX 的 React 專案,讓我們能夠利用 JSX 語法提高開發 React 的效率。

本篇會將 從零開始的 React 教學 Part 1 中的範例改成 JSX 語法呈現,並且模組化部分組件(components) ,從而達到較高的可維護性。

最後再加上新的外掛 babel/plugin-proposal-class-properties ,讓我們能夠使用 Arrow function 更加簡化 React 程式碼。

Last updated on  Oct 2, 2022  in  ReactJS 前端框架  by  Amo Chen  ‐ 3 min read

使用 Python typing 模組對你的同事好一點

由於 Python 動態型別(執行階段可以任意改變變數的型別)的特性,所以很多時候開發者們都會透過變數的命名讓他人知道該變數的型別,例如:

dicts = [{"key": "value"}, {"key": "values"}]

複數型的 dicts 命名讓其他人在閱讀時能夠大致猜到它可能是個字典(dict)的列表(list)。

但是現代專案不可能經常是如此簡單的結構,有時光從命名仍難以了解是什麼型別的變數,例如:

def get_value(json):
     return parse(json)

當我們看到上述函式中的 json 時,就會疑惑它是什麼? str? dict? 而回傳的值到底長怎樣,有什麼 key 可以使用?也由於這種不確定性,所以在除錯甚至協同開發時都需要實際執行才能夠知道該變數到底是什麼型態,在複雜的大型專案中甚至會成為一種痛苦。

p.s. Javascript 也有相同的痛點,所以才有 TypeScript 問世

這種情況,我們除了用心命名之外,還可以搭配使用 typing 模組來改善!

Last updated on  Sep 24, 2023  in  Python 程式設計 - 中階  by  Amo Chen  ‐ 6 min read

實用的 Oh My Zsh plugin - zsh autosuggestions

使用 Mac 作為日常開發工具的開發者們,應該都有使用 item2 搭配 ZSH 與 Oh My Zsh

Oh My Zsh 等於是幫 ZSH 加上一雙翅膀,讓 ZSH 更加好用之外,同時也有很多好用的 Plugins 可供選擇,本篇將介紹 zsh-autosuggestions 這套可以在 command line 顯示提示的 Plugin 。

zsh-autosuggestions 的 demo 可以先觀看以下影片:

Posted on  Jun 3, 2020  in  開發工具  by  Amo Chen  ‐ 1 min read