技術雜談:Go (Golang) 適合初學者做為網頁後端程式嗎?

PUBLISHED ON JUL 10, 2018
FacebookTwitter LinkedIn LINE Skype EverNote GMail Yahoo Email

    原本這是在 Quora 討論區上出現的一個問題,筆者當時也發文回答。因這個議題蠻有意思的,筆者將其重新整理後用中文寫出來,網頁程式的初學者可以參考參考。由於這類議題帶有個人主觀的成分,其實沒有標準答案;程式語言和函式庫畢竟是工具,工具只要順手合用即可。

    現在學網頁程式,網頁框架是顯學,不過,也有像 Golang 或 PHP 等不用網頁框架也能有效地寫出網頁程式的語言。PHP 原本的概念是模板語言 (template language),由於簡單易學,很快就變成當時主流的網頁後端語言。不過,PHP 很容易寫出難以維護的程式,後來也出現像 Laravel 等用 PHP 所寫的網頁框架,用來改善 PHP 網頁程式的工程性。以本文要介紹的 Golang 來說,Golang 本身無法做為模板語言,而是透過函式庫來支援網頁程式。

    雖然 Golang 也有一些網頁框架,但其實 Golang 可以不依賴任何網頁框架就撰寫網頁程式;筆者以為,至少要用 Golang 內建函式庫寫過一輪網頁程式,之後要用網頁框架再說。為什麼 Golang 適合做為網頁後端程式的語言呢?

    • Golang 易學易用:Golang 基本上是強化版的 C 語言,都以核心語法短小精要著稱
    • Golang 是靜態型別語言:很多程式的錯誤在編譯期就會挑出來,相對易於除錯
    • Golang 編譯速度很快:帶動整個開發的流程更快速
    • Golang 支援垃圾回收:網頁程式較接近應用程式,而非系統程式,垃圾回收在這個情境下不算缺點;此外,使用垃圾回收可簡化程式碼
    • Golang 內建共時性的語法:goroutine 比起傳統的執行緒 (thread) 來說輕量得多,在高負載時所需開銷更少
    • Golang 是跨平台的:只要程式中不碰到 C 函式庫,在 Windows (或 Mac) 寫好的 Golang 網頁程式,可以不經修改就直接發布在 GNU/Linux 伺服器上
    • Golang 的專案不需額外的設定檔:在專案中,只要放 Golang 程式碼和一些 assets 即可運作,所需的工具皆內建在 Golang 主程式中,省去學習專案設罝的功夫
    • Golang 沒有死硬的程式架構:用 Golang 寫網頁程式思維上接近微框架 (micro-framework),只要少數樣板程式碼就可以寫出網頁程式,也不限定可用的第三方函式庫

    但 Golang 並非完美無缺,以下是要考量的點:

    • Golang 並非完整的物件導向 (object-oriented) 語言,頂多是基於物件的 (object-based) 語言
    • Golang 的語言特性相對少:這是 Golang 時常被攻擊的點,這只能靠調整自己的習慣
    • 承上,在一些情境下,Golang 程式碼相對笨拙,像是排序 (sorting)

    寫程式重要的是最後的產出,語法特性少只是要用不同的手法來達到相同的效果;因此,筆者認為 Golang 仍然適合做為網頁後端的程式。

    國內對於 Golang 的專書算少,但國外已經有不少 Golang 或 Golang 網頁程式的教材,讀者可上網尋找。筆者在這裡也寫了一份 Golang 的教學,需要的讀者可以參考;至於網頁程式的部分,筆者目前尚未撰寫相關資料,或許日後有機會另開專欄來寫。