使用 Go Channel 及 Goroutine 時機
Posted on January 18, 2020
| 3 minutes
| 480 words
| appleboy

相信不少開發者肯定聽過 Go 語言之所以讓人非常喜歡,就是因為 Go concurrency,如果您對於 concurrency 不了解的朋友們,可以直接參考官網的範例開始了解,範例會帶您一步一步了解什麼是 Channel 什麼是 Go concurrency?本篇會介紹 Channel 使用時機,在大部分寫 application 時,老實說很少用到 Channel,所以很多人其實不知道該在哪種場景需要使用 Channel,底下這句名言大家肯定聽過:
Do not communicate by sharing memory; instead, share memory by communicating.
本篇會用簡單的例子來帶大家理解上述名言。
[Read More]用 GitHub Actions 部署 Go 語言服務
Posted on December 14, 2019
| 3 minutes
| 527 words
| appleboy

GitHub Actions 也推出一陣子了,相信有不少雷,也是有很多優勢,未來在 GitHub 上面串接任何開源專案,都可以免費使用,過幾年可以看看 GitHub Actions 對 Travis 的影響是多少?本篇要來介紹如何透過 GitHub Actions 來部署 Go 語言服務,會用一個簡單 httpd 範例教大家如何透過 Docker 方式來更新。使用 Go 語言基本服務流程大致上會是『測試 -> 編譯 -> 上傳 -> 啟動』,透過這四個步驟來學習 GitHub Actions 該如何設定。
- 測試: Unit Testing 多一層保護
- 編譯: 透過 go build 編譯出 Binary 檔案
- 上傳: 寫 Dockerfile 將 Binary 包進容器內
- 啟動: 透過 docker-compose 方式來更新服務
[Read More]用 15 分鐘快速打造 Laravel 開發環境
Posted on December 6, 2019
| 2 minutes
| 245 words
| appleboy

相信大家對 Laravel 都很熟悉,但是初學者或是新進同事要快速入門 Laravel 最大的門檻就是該如何在短時間內在本機電腦快速安裝好公司專案。這時候使用 Laradock 就是一個最佳時機,透過 Docker 容器話,快速切換 PHP 版本,或者是安裝額外的服務像是 MySQL, MariaDB, phpMyAdmin 或 nginx 等服務,讓本機端不受到自訂安裝套件的困擾,用完隨時關閉,完全不會影響到電腦環境。底下我會介紹使用 Laradock 該注意的事情。完整詳細的操作步驟可以直接看 Youtube 影片。
[Read More]Go 語言使用 Select 四大用法
Posted on November 23, 2019
| 4 minutes
| 694 words
| appleboy

本篇教學要帶大家認識 Go 語言的 Select 用法,相信大家對於 switch 並不陌生,但是 select
跟 switch
有個共同特性就是都過 case 的方式來處理,但是 select 跟 switch 處理的事情完全不同,也完全不相容。來看看 switch 有什麼特性: 各種類型及型別操作,接口 interface{}
型別判斷 variable.(type)
,重點是會依照 case 順序依序執行。底下看個例子:
[Read More]初探 Go 語言 Project Layout (新人必看)
Posted on November 15, 2019
| 1 minutes
| 46 words
| appleboy

很多人初次進入 Go 語言,肯定都會尋找在 Go 裡面是否有一套標準且最多人使用的 Framework 來學習,但是在 Go 語言就是沒有這樣的標準,所有的開源專案架構目錄都是由各團隊自行設計,沒有誰對誰錯,也沒任何一個是最標準的。那你一定會問,怎樣才是最好的呢?很簡單,如果可以定義出一套結構是讓團隊所有成員可以一目瞭然的目錄結構,知道發生問題要去哪個地方找,要加入新的功能,就有相對應的目錄可以存放,那這個專案就是最好的。當然這沒有標準答案,只是讓團隊有個共識,未來有新人進入專案,可以讓他在最短時間內吸收整個專案架構。
[Read More]用 Go 語言 buffered channel 實作 Job Queue
Posted on November 2, 2019
| 2 minutes
| 411 words
| appleboy

上個月在高雄 mopcon 講了一場『Job Queue in Golang』,裡面提到蠻多技術細節,但是要在一場 40 分鐘的演講把大家教會,或者是第一次聽到 Go 語言的,可能都很難在 40 分鐘內吸收完畢,所以我打算分好幾篇部落格來分享細部的實作,本篇會講解投影片第 19 ~ 25 頁,透過本篇你可以清楚學到什麼是 buffered channel,以及實作的注意事項。
[Read More]Drone CI/CD 支援 Auto cancellation 機制
Posted on October 20, 2019
| 1 minutes
| 116 words
| appleboy

大家一定會問什麼是『Auto cancellation』呢?中文翻作自動取消,這機制會用在 CI/CD 的哪個流程或步驟呢?我們先來探討一個情境,不知道大家有無遇過在同一個 branch 陸續發了 3 個 commit,會發現在 CI/CD 會依序啟動 3 個 Job 來跑這 3 個 commit,假設您有設定同時間只能跑一個 Job,這樣最早的 commit 會先開始啟動,後面兩個 commit 則會處於 Penging
的狀態,等到第一個 Job 完成後,後面兩個才會繼續執行。
[Read More]用 Go 語言實作 Job Queue 機制
Posted on October 19, 2019
| 1 minutes
| 89 words
| appleboy

很高興可以在 Mopcon 分享『用 Go 語言實現 Job Queue 機制』,透過簡單的 goroutine 跟 channel 就可以實現簡單 Queue 機制,並且限制同時可以執行多少個 Job,才不會讓系統超載。最後透過編譯放進 Docker 容器內,就可以跑在各種環境上,加速客戶安裝及部署。
[Read More]在 Docker 內設定使用者及群組權限的三種方式
Posted on October 10, 2019
| 1 minutes
| 155 words
| appleboy

如果平常本身有在玩 Docker 的開發者肯定知道透過 docker command 啟動的容器預設是使用 root
來當作預設使用者及群組,這邊會遇到一個問題,當 Host 環境你有 root 權限就沒有此問題,如果你沒有 root 權限,又有需求在 Docker 容器內掛上 Volume,會發現產生出來的檔案皆會是 root 權限,這時候在 Host 完全無法寫入。本篇教大家使用三種方式來設定容器使用者權限。
[Read More]Ansible 設定 Google Container Registry 搭配 Drone 自動上傳
Posted on October 3, 2019
| 2 minutes
| 304 words
| appleboy

最近剛好有需求要串接 GCR (Google Container Registry),專案如果是搭配 GCP 服務,個人建議就直接用 GCR 了。本篇要教大家如何透過 Ansible 管理遠端機器直接登入 GCR,透過特定的帳號可以直接拉 Image,接著用 docker-compose 來重新起動服務,這算是最基本的部署流程,那該如何用 Ansible 登入呢?請看底下教學。
[Read More]