技术杂谈:Go (Golang) 适合初学者做为网页后端程序吗?

PUBLISHED ON JUL 10, 2018

    原本这是在 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 的教学,需要的读者可以参考;至于网页程序的部分,笔者目前尚未撰写相关数据,或许日后有机会另开专栏来写。