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 函式”

Go 語言基礎實戰教學影片上線了

Screen Shot 2018-03-17 at 11.40.12 PM

購買連結

去年在台灣推廣 Drone 這套由 Go 語言所撰寫的開源專案,身為維護者之一,也將 Drone 跟 Gitea 完成整合。如果對於從開發到部署整個流程,還不是很了解的朋友,我個人就是推薦使用 Drone,去年九月也推出 Drone 的教學影片系列:『一天學會自動化測試及部署』,在公司使用 Drone 到現在,不曾看到服務中斷,啟動速度也是毫秒等級。為什麼會這麼穩定及快速呢?當然要歸功於 Go 語言。而這次我個人針對 Go 語言,錄製了一份基礎教學『GO 語言基礎實戰』。 Continue reading “Go 語言基礎實戰教學影片上線了”

用 Go 語言實現單一或多重 Queue 搭配 optimistic concurrency

Screen Shot 2018-03-10 at 3.22.59 PM 本篇教學會著重在如何使用 Go 語言的 goroutinechannelMongoDB 是一套具有高效能讀寫的 NoSQL 資料庫,但是不像傳統關連式資料庫,有非常好用的 Transaction 交易模式,而在 MongoDB 也可以透過 Two Phase Commits 來達成交易功能,大家可以先打開文件看看,非常冗長,工程師需要花很多時間閱讀文件並且實現出來。而在 Go 語言內,我們可以在 Single Thread 內同一時間點讀寫存取同一筆資料庫來解決此問題。此篇作法只適合運作在單一 application,如果是執行多個 application 則需要透過其他方式來解決,像是 Optimistic concurrency controlContinue reading “用 Go 語言實現單一或多重 Queue 搭配 optimistic concurrency”

將 Go Html Template 存入 String 變數

Go-brown-side.shGo 語言內通常都將 Html Temaple 寫入到 io.Writer interface 像是 *http.ResponseWriter,但是有些情境需要將 Template 寫入到 String 變數內,例如實作簡訊 Template,這時候需要將 Html Temaple 轉成 String。該如何實作,非常簡單,只需要在任意變數內實作 io.Writer interface 即可,而 String 該如何轉換呢?可以使用 buffer’s pointer Continue reading “將 Go Html Template 存入 String 變數”

在 AWS Lambda 上寫 Go 語言搭配 API Gateway

Snip20180124_2 這應該不是什麼新消息了,就是 AWS Lambda 正式支援 Go 語言,也就是可以將 Go 語言編譯出來的二進制檔案直接放進去 Lambda Function 內,前面可以搭配 API Gateway,後面可以搭配 CloudWatchS3,本文章會教大家如何將 Gin 打包編譯進 Lambda,官網其實也有提供 Library 或範例方便大家實作,大家可以參考看看。 Continue reading “在 AWS Lambda 上寫 Go 語言搭配 API Gateway”

用 Go 語言減少 node_modules 容量來加速部署

Go-brown-side.sh 之前寫過一篇『減少 node_modules 大小來加速部署 Node.js 專案』文章,透過 Yarn 指令可以移除不必要的模組,剩下的模組佔據整個專案大部分容量,那該如何針對留下的模組來瘦身呢?這週看到 Node.js 大神 TJ 又發了一個 Go 語言專案叫做 node-prune,此專案用來移除在 node_modules 內不必要的檔案,那哪些才是不必要的檔案呢? Continue reading “用 Go 語言減少 node_modules 容量來加速部署”

Go 語言實現 gRPC Health 驗證

grpc_square_reverse_4x 本篇教大家如何每隔一段時間驗證 gRPC 服務是否存活,如果想了解什麼是 gRPC 可以參考 這篇『REST 的另一個選擇:gRPC』,這邊就不多介紹 gRPC 了,未來將會是容器的時代, 那該如何檢查容器 Container 是否存活。如果是用 Kubernetes 呢?該如何來撰寫 gRPC 接口搭配 livenessProbe 設定。底下是在 Dockerfile 內可以設定 HEALTHCHECK 來 達到檢查容器是否存活。詳細說明可以參考此連結Continue reading “Go 語言實現 gRPC Health 驗證”

Gorush 輕量級手機訊息發送服務

68747470733a2f2f7261772e6769746875622e636f6d2f676f6c616e672d73616d706c65732f676f706865722d766563746f722f6d61737465722f676f706865722e706e67 今年第一次參加濁水溪以南最大研討會 Mopcon,給了一場議程叫『用 Go 語言打造輕量級 Push Notification 服務』,身為南部人一定要參加 Mopcon,剛好透過此議程順便發佈新版 Gorush,其實今年投稿 Mopcon 最主要是回家鄉宣傳 Google 所推出的 Go 語言,藉由實際案例來跟大家分享如何入門 Go 語言,以及用 Go 語言最大好的好處有哪些。底下是此議程大綱:
  • 為什麼建立 Gorush 專案
  • 如何用 Go 語言實作
  • Drone 自動化測試及部署
  • Kubernetes 上跑 Gorush
Continue reading “Gorush 輕量級手機訊息發送服務”