為什麼 Node.js 不適合大型和商業專案?

JavaScript 和 Node.js 一直都是這幾年的話題,無論是前端還是後端,到處都可見 JavaScript,就好像爬滿了你全身上下,他們不斷地對你說道「嘿!老兄!快來用我吧!」。 為什麼 Node.js 會這麼夯?主要是因為效能快過於 PHP 和 Python 與 Ruby,寫法簡單又容易,而且前後端能夠使用同個語言當然是最好不過了。

解釋 Golang 中的 Interface 到底是什麼

也許你是來自 PHP 或 Node.js 的程式工程師,然後用了 Class 好一段時間,雖然聽過 Interface 但總是沒用過,這很正常,因為我也是。 事實上,在弱型態語言其實是不需要使用到 Interface 的,但在強型態語言中,這變得十分普遍而且很有幫助。 Interface{} 是任意值 在 Golang 裏有兩種

透過 Golang 輸出所有的 Emoji

之前在做網站的時候要實作一個表情列表的功能,後來到了 StackOverflow 上面詢問如何透過簡單的方式輸出所有的 Emoji(原文:Is it possible to generate all the emojis and append to the select dropdown?),畢竟總不可能自己把每個都複製下來然後塞進列表裡吧,不過那篇文章是 JavaScript 的實作方式,這裡要講解的是如何使用

API 文件就是你的伺服器,REST 的另一個選擇:gRPC

在前幾個星期的文章中我們提到了「比起 JSON 更方便、更快速、更簡短的 Protobuf 格式」,但這還沒完。Google 為此推出了一個新的程式呼叫協議 gRPC,簡單說就是能夠從你的 Protobuf 檔案生出一個伺服器出來,這個好處就是不需要像傳統 RESTful API 伺服器ㄧ樣撰寫一堆路由。 當我們撰寫傳統 RESTful API 伺服器時,我們會花費許多的時間在路徑命名上。除此之外,

建置自己的 Git 伺服器與網站:Gitea(Gogs)

Gitea 是一個由 Golang 撰寫的 Git 伺服器(含網頁介面),如果你曾用過 GitHub 或 Gitlab 那麼你一定對這種東西不陌生。詳情可以參考「什麼是 Git?我要怎麼在 Ubuntu 上安裝 Git?」文章。 Gitea 主要是由 Gogs 分歧的版本,兩者的差異在於

比起 JSON 更方便、更快速、更簡短的 Protobuf 格式

Protocol Buffers 是由 Google 所推出的一格式(後台真硬),你可以把它想像成是 XML 或 JSON 格式,但是更小、更快,而且更簡潔。這能夠幫你節省網路與硬體資源,且你只需要定義一次資料結構,接著就會自動生成符合你程式語言的檔案,讓你能夠直接在你的程式上使用。 而且有趣的是一但你定義了資料結構,你就能在多個語言上使用,像是 C++、C#、Go、Java、

用 Golang 實作 Prometheus:服務效能測量監控系統

Prometheus 是一個基於 Golang 語言所撰寫的服務效能測量監控系統。實際上就只是把統計數據視覺化而已,這很適合用在大型系統、微服務上。你可以從 Prometheus 查看你所有服務的效能狀態等。 但這些事情可能沒有你想像的那麼自動,因為有些數據的加總、值的異動都需要自行在程式裡面處理,然後 Prometheus 會向你的程式要求這些資料。 1. 安裝與啟動 Prometheus Prometheus 這個單字好像有點難記,我自己是切分成「Prome-th-eus」來記。廢話不多說,

用 Golang 實作 NSQ:微服務訊息/事件傳遞系統

NSQ 是和 Event Sourcing 理念有所關聯的即時性分布式訊息傳遞系統,看到這裡你可能會以為是作即時通訊軟體用的,但實際上並不是。額外有趣的一點是 NSQ 也是以 Golang 所撰寫的。 我們會在文章中以實際情況、為什麼需要 NSQ 來解答疑惑並且實作一個真正的範例。 在閱讀本篇之前,也許你可以看看另一個相關的文章:「用 Golang 實作 Event Store:微服務事件儲藏中心」這篇文章提及到了為什麼我們應該用事件,

用 Golang 實作 Event Store:微服務事件儲藏中心

Event Store 是一個基於 CQRS 與 Event Sourcing 理念所衍生出來的新概念並由 C# 撰寫。這是一個微服務事件儲藏中心,這可能很難懂,但別緊張,這些都會在本文中得到答案。 在微服務結構中,每個服務都是獨立的,這意味著沒有服務該依賴另一個服務(無相依性),那麼我們應該要怎麼在服務之間互相溝通?一但有了這個問題就會開始陷入死循環,最終甚至會做出一個比傳統式單體應用程式還要糟糕的結構。 首先你要知道的是微服務應該自主。需要什麼資料的時候就應該自己處理,而不是發送請求到另一個服務然後等待回應。 實際案例

Golang 微服務相關工具

因為這些工具都十分地進階,所以在這裡僅稍微介紹並指引如何安裝,有趣的是這些全部都是用 Golang 撰寫的。 Go kit—微服務框架 https://github.com/go-kit/kit 當你要撰寫微服務時,你也許會需要一個框架。而 Go kit 就是 Golang 中目前知名度最高的微服務框架,接下來我們會以 Go kit 實作微服務架構的應用程式,

簡單地用 Golang 與 Leap Motion 互動!

Leap Motion 是一個用以偵測手部動作的小型傳感器,價格也蠻便宜的大約在 1,800 新台幣左右。雖然說優點是輕巧、廉價與容易開發,但是有時候感應上也會有些問題,例如說在手指相連再一起時 Leap Motion 經常會誤認成另一種手勢。 順帶一提,Leap Motion 不能偵測像「關節」這麼細緻的地方,不過基本的稍微彎曲是可以的。 其實就只是 Web Socket 要與

JSON 轉換成 Golang

在 Golang 上若要讀取 JSON 就必須建立相對應的建構體才行,而 JSON-to-Go 線上工具解決了手動新增建構體的困擾,這個工具是由 JavaScript 撰寫的,相關原始碼可以在這邊的 Github 看見。 工具操作 先來到 JSON-to-Go 頁面,然後頁面左下角是輸入 JSON 結構的地方,輸入後會自動轉成右邊的 Go 結構體。 讓我們假設輸入了下列

2. 畫布、顏色與矩形——在 Golang 透過 Ebiten(炸蝦)來製作 8-Bit 遊戲!

在上一章我們提到了如何建立一個基本的遊戲框架,但那還不足以構成一個遊戲(畢竟只有一串文字嘛),在那之前,我們需要知道更多有關遊戲畫面的資訊,所以接下來要提到的就是「螢幕畫布」。 螢幕畫布是整個遊戲中最重要的地方,螢幕畫布用來呈現任何你能夠看見的東西,在你不注意的時候螢幕畫布可能已經更新了數百次,但是因為速度夠快所以你並不會察覺。 現在讓我們接續上次的程式碼吧!如果你忘記了上次的程式碼長怎樣,我已經幫你帶到這邊來了,順帶一提,我稍稍加上了一些註釋 :)。 package main import ( "github.com/hajimehoshi/ebiten" "github.com/

從 PHP 到 Golang 的筆記

我為什麼從 PHP 轉到 Golang? PHP 和模塊之間的關係令人感到煩躁,假設你要讀取 yaml 檔案,你需要有一個 yaml 的模塊,為此,你還需要將其編譯然後將編譯後的模塊擺放至指定位置,之後換了一台伺服器你還要重新編譯,這點到現在還是沒有改善;順帶一提之後出了 PHP 7 效能確實提升了許多(比 Python 3 快了些),但