Go 語言實戰 GraphQL

Screen Shot 2018-07-19 at 8.58.48 AM 很高興能在 2018 ModernWeb 研討會跟大家分享用 Go 語言實戰 GraphQL,相信大家都知道 GraphQL 帶給前端後端及手機開發者很多好處,強烈推薦大家來嘗試看看。這場議程最主要是推廣 GraphQL 及 Go 語言。底下有投影片大家可以參考看看。 Continue reading “Go 語言實戰 GraphQL”

在本機端快速產生網站免費憑證

SSL-Certificate 大家看到網站免費憑證,一定會想到 Let’s encrypt 服務商提供一個網域可以使用 100 個免費憑證,如果您有很多 subdomain 需求,還可以申請獨立一張 wildcard 憑證,但是這是在伺服器端的操作,假設在本機端開發,該如何快速產生憑證,這樣開啟瀏覽器時,就可以看到綠色的 https 字眼 Snip20180706_2 Continue reading “在本機端快速產生網站免費憑證”

如何在 Go 語言內寫效能測試

Go-brown-side.sh Go 語言不只有內建基本的 Testing 功能,另外也內建了 Benchmark 工具,讓開發者可以快速的驗證自己寫的程式碼效能如何?該如何使用基本的 Benchmark 工具,底下用簡單的例子來說明如何寫 Benchmark,透過內建工具可以知道程式碼單次執行多少時間,以及用了多少記憶體。不多說直接用『數字轉字串』來當例子。 Continue reading “如何在 Go 語言內寫效能測試”

Drone 搭配 Kubernetes 部署 Go 語言項目

Screen Shot 2018-06-04 at 9.19.46 AM 在之前寫過一篇『Drone 搭配 Kubernetes 升級應用程式版本』,裡面內容最主要介紹 honestbee 撰寫的 drone 外掛: drone-kubernetes,但是此外掛並非用 Go 語言所撰寫,而是用 Shell Script 透過 kubectl set image 方式來更新專案項目,但是這邊會有幾個缺點,第一點就是假設在 Develop 環境永遠都是吃 master 分支,也就是讀取 Image 的 latest 標籤,這時候此外掛就無法作用,第二點此外掛無法讀取 kubernetes YAML 檔案,假設專案要修正一個 ENV 值,此外掛也無法及時更新。綜合這兩點因素,只好捨棄此外掛,而本篇會帶給大家另一個用 Go 語言所撰寫的外掛,是由 @Sh4d1 所開發的項目,用法相當容易,底下會一步一步教大家如何部署 Go 語言項目。 Continue reading “Drone 搭配 Kubernetes 部署 Go 語言項目”

如何在 Go 專案內寫測試

Go-brown-side.sh 相信大家都知道專案內不導入測試,未來越來越多功能,技術債就會越來越多,接手的人罵聲連連,而寫測試的簡單與否決定專案初期是否要先導入。為什麼專案要導入測試,導入測試有什麼好處,對於團隊而言,導入測試好處實在太多了,底下列了幾點是我個人覺得非常重要的。
  1. 減少 Review 時間
  2. 降低修改程式碼產生的的錯誤
  3. 確保程式碼品質
第一點非常實用,尤其在專案很忙的時候,同事間只有少許的時間可以幫忙看程式碼或討論,如果大家都有寫測試,在時間的壓力下,只要稍微看一下,CI/CD 驗證過無誤,大致上就可以上線了。第二點在於,團隊其他成員需要修改一個不確定的地方,商業邏輯修正可能會造成很大的錯誤,而測試在這時候就發揮效果。最後一點就是程式碼品質,不管是新功能,或者是 Bug,任何時間點都需要補上測試,就算 code coverage 已經很高了,但是只要有任何 bug 就要補測試,測試寫的越多,專案的品質相對會提高。在 Go 語言專案內該如何寫測試了,為什麼專案要導入 Go 語言的原因之一就是『寫測試太簡單』了,底下來介紹如何寫基本的測試。 Continue reading “如何在 Go 專案內寫測試”

Go 語言的 vendor 目錄

Go-Logo_Blue 很多朋友剛入門 Go 語言時,第一個會遇到的問題是,該如何設定專案配置,讓專案可以正常執行,在個人電腦該如何開發多個專案,這邊就會遇到該如何設定 $GOPATH,我在這邊跟大家講個觀念,開發環境只會有一個 $GOPATH,不管團隊內有多少專案,都是存放在同一個 GOPATH,避免每次開專案都要重新設定 $GOPATH,而專案內用到的相依性套件,請各自維護,透過官方提供的 wiki,請選一套覺得好用的來使用吧,沒有最好的工具,找一套適合團隊是最重要的。 Continue reading “Go 語言的 vendor 目錄”

Go 語言的 init 函式

Go-brown-side.sh 本篇會帶大家認識 Go 語言的 init 函式,在了解 init func 之前,大家應該都知道在同一個 Package 底下是不可以有重複的變數或者是函式名稱,但是唯獨 init() 可以在同一個 package 內宣告多次都沒問題。底下看例子,可以發現的是不管宣告多少次,都會依序從最初宣告到最後宣告依序執行下來。
package main

import (
    "fmt"
)

func init() {
    fmt.Println("init 1")
}

func init() {
    fmt.Println("init 2")
}

func main() {
    fmt.Println("Hello, playground")
}
Continue reading “Go 語言的 init 函式”

[影片教學] 使用 Filter 將專案跑在特定 Drone Agent 服務

drone-logo_512 Drone 是一套用 Go 語言撰寫的 CI/CD 開源專案,是由一個 Server 跟多個 Agent 所組成,Agent 上面必須安裝好 Dokcer 才可以順利測試及部署,但是團隊內會出現一個狀況,每個專案的測試及部署方式不同,有的測試需要 Agent 很多 CPU 或記憶體資源,有的小專案則不需要那麼多,但是當大專案把 agent 系統資源吃光,其他專案都跑不動了,這邊的解決方式就是再建立一台新的 Agent 服務,將需要大量資源的專案跑在該台新的 Agent,Drone 這邊有支援 filter 功能,讓開發者可以指定專案要跑在哪一台 Agent 上。底下來教大家如何設定 drone filter。 Continue reading “[影片教學] 使用 Filter 將專案跑在特定 Drone Agent 服務”