用 Go 語言讀取專案內 .env 環境變數

golang logo

在現代開發專案時,一定會用到環境變數,像是讀取 AWS Secret Key 等等,在部署上面也會透過設定變數讓專案依據不同環境讀取不同環境變數,而 Go 語言內如何實現讀取環境變數,又可以讓開發者透過 .env 檔案動態改變環境變數,本影片用簡單的套件來實現。這個在其他語言的 Framework 都有實現,像是 Laravel 的 .env 設定。透過本篇例子也教大家如何 import Go 語言的 Package。

[Read More]

用五分鐘了解什麼是 unbuffered vs buffered channel

golang logo

本篇要跟大家聊聊在 Go 語言內什麼是『unbuffered vs buffered channel』,在初學 Go 語言時,最大的挑戰就是了解 Channel 的使用時機及差異,而 Channel 又分為兩種,一種是 buffered channel,另一種是 unbuffered channel,底下我來用幾個簡單的例子帶大家了解這兩種 channel 的差異,讓初學者可以很快的了解 channel 使用方式。

[Read More]

快速部署網站到 Heroku 雲平台

部署網站到 Heroku 平台

大家在寫開源專案時,一定需要一個免費的雲空間來放置網站,方便其他開發者在 GitHub 看到時,可以先點選 Demo 網站來試用,也許開發者可以使用 GitHub 提供的免費靜態網站,但是如果是跑 Golang 或是其他語言 Node.js 就不支援了,本篇來介紹 Heroku 雲平台,它提供了開發者免費的方案,您可以將 GitHub 儲存庫跟 Heroku 結合,快速的將程式碼部署上去,Heroku 會給開發者一個固定的 URL (含有 HTTPS 憑證),也可以動態的用自己買的網域。最重要的是 Heroku 提供了兩種更新方式,第一為 Git,只要開發者將程式碼 Push 到 Heroku 儲存庫,Heroku 就可以自動判斷開發者上傳的語言,並進行相對應的部署,另一種方式為 Docker 部署,只要在儲存庫內放上 Dockerfile,透過 Heroku CLI 指令就可以將 Docker 容器上傳到 Heroku Docker Registry,並且自動部署網站。底下我們來透過簡單的 Go 語言專案: Facebook Account Kit 來說明如何快速部署到 Heroku。

[Read More]

有效率的用 jsonnet 撰寫 Drone CI/CD 設定檔

Jsonnet + Drone

Drone 在 1.0 版本推出了用 jsonnet 來撰寫 YAML 設定檔,方便開發者可以維護多個專案設定。不知道大家有無遇過在啟動新的專案後,需要從舊的專案複製設定到新專案,或者是在 .drone.yml 內有非常多重複性的設定,假設 Go 語言的開源專案需要將執行檔包成 ARM64 及 AMD64 的映像檔,並且上傳到 Docker Hub,底下是 AMD64 的設定檔範例。剛好在 Udemy 課程內有學員詢問到相關問題

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
---
kind: pipeline
name: linux-arm64

platform:
  os: linux
  arch: arm64

steps:
- name: build-push
  pull: always
  image: golang:1.11
  commands:
  - "go build -v -ldflags \"-X main.build=${DRONE_BUILD_NUMBER}\" -a -o release/linux/arm64/drone-discord"
  environment:
    CGO_ENABLED: 0
    GO111MODULE: on
  when:
    event:
    - push
    - pull_request

- name: build-tag
  pull: always
  image: golang:1.11
  commands:
  - "go build -v -ldflags \"-X main.version=${DRONE_TAG##v} -X main.build=${DRONE_BUILD_NUMBER}\" -a -o release/linux/arm64/drone-discord"
  environment:
    CGO_ENABLED: 0
    GO111MODULE: on
  when:
    event:
    - tag

- name: executable
  pull: always
  image: golang:1.11
  commands:
  - ./release/linux/arm64/drone-discord --help

- name: dryrun
  pull: always
  image: plugins/docker:linux-arm64
  settings:
    dockerfile: docker/Dockerfile.linux.arm64
    dry_run: true
    password:
      from_secret: docker_password
    repo: appleboy/drone-discord
    tags: linux-arm64
    username:
      from_secret: docker_username
  when:
    event:
    - pull_request

- name: publish
  pull: always
  image: plugins/docker:linux-arm64
  settings:
    auto_tag: true
    auto_tag_suffix: linux-arm64
    dockerfile: docker/Dockerfile.linux.arm64
    password:
      from_secret: docker_password
    repo: appleboy/drone-discord
    username:
      from_secret: docker_username
  when:
    event:
    - push
    - tag

trigger:
  branch:
  - master
[Read More]

用 Traefik 搭配 Docker 快速架設服務

更新: 2019.01.10 新增教學影片

drone traefik docker deploy

相信大家在架設服務肯定會選一套像是 HAProxy, Nginx, ApacheCaddy,這四套架設的難度差不多,如果要搭配 Let’s Encrypt 前面兩套需要自己串接 (Nginx, Apache),而 Caddy 是用 Golang 開發裡面已經內建了 Let’s Encrypt,,管理者不用擔心憑證過期,相當方便。但是本篇我要介紹另外一套工具叫 Traefik,這一套也是用 Go 語言開發,而我推薦這套的原因是,此套可以跟 Docker 很深度的結合,只要服務跑在 Docker 上面,Traefik 都可以自動偵測到,並且套用設定。透過底下的範例讓 Traefik 串接後端兩個服務,分別是 domain1.comdomain2.com。來看看如何快速設定 Traefik。

traefik + docker + golang

[Read More]

開源專案 Drone 推出 1.0.0 RC1 版本

Screen Shot 2018-11-19 at 10.12.47 AM

終於看到 Drone 作者 bradrydzewski11/7 號釋出 1.0.0-RC1 版本,此版本尚未開源在 GitHub 上面,所以目前只能透過 docker 方式來安裝。另外如果您正在用 0.8.x 版本的,不建議現在轉換到 1.0 版本,原因有幾點,第一作者尚未公開原始碼,第二現在公開也才一週而已,還有很多 bug 以及用法都沒有在線上 document 寫很清楚,第三就是作者尚未提供工具從 0.8.x 升級到 1.0.0 RC 版本。根據上述的原因,建議大家先不要轉換,當然如果團隊尚未導入 CI/CD 的話,我強烈建議使用 1.0.0 RC-1 版本。底下來看看 1.0.0 RC-1 做了哪些變動?

[Read More]

用 10 分鐘部署專案到 AWS Lambda

Screen Shot 2018-10-24 at 9.37.49 AM

看到這標題也許非常聳動,也可能覺得不可思議,今天來探討如何將專案直接部署到 AWS Lambda 並且自動化將 API Gateway 設定完成。當然要做到完全自動化,必須要使用一些工具才能完成,本篇將介紹由 TJ 所開發的 apex/up 工具,如果您不熟悉 EC2 也不太懂 Command line 操作,本文非常適合您,不需要管理任何 EC2 機器,也不需要在熟悉任何 Linux Command 就可以完成簡單的專案部署。首先為什麼我選擇 apex/up 而不是選擇 apex/apex,原因是使用 up 工具,您的專案是不用更動任何程式碼,就可以將專案直接執行在 AWS Lambda,那 API Gateway 部分也會一並設定完成,將所有 Request 直接 Proxy 到該 Lambda function。如果您希望對於 AWS Lambda 有更多進階操作,我會建議您用 apex/apexServerless。您可以想像使用 up 就可以將 AWS Lambda 當作小型的 EC2 服務,但是不用自己管理 EC2,現在 up 支援 Golang, Node.js, Python 或 Java 程式語言,用一行 command 就可以將專案部署到雲端了。

[Read More]

Go 語言 1.11 版本推出 go module

Go-Logo_Blue

本篇來聊聊 Go 語言在 1.11 版本推出的 新功能,相信大家也許還不知道此功能是做什麼用的,我們來回顧看看在初學 Go 語言的時候,最令人困擾的就是 GOPATH,所有的專案都必須要在 GOPATH 底下開發,然而在更久前還沒有 Vendor 時候,兩個專案用不同版本的同一個 Package 就必須要使用多個 GOPATH 來解決,但是隨著 Vendor 在 1.5 版的推出,解決了這問題,所以現在只要把專案放在 GOPATH 底下,剩下的 Package 管理都透過 Vendor 目錄來控管,在很多大型開源專案都可以看到把 Vendor 目錄放入版本控制已經是基本的 Best Practice,而 go module 推出最大功能用來解決 GOPATH 問題,也就是未來開發專案,隨意讓開發者 clone 專案到任何地方都可以,另外也統一個 Package 套件管理,不再需要 Vendor 目錄,底下舉個實際例子來說明。

[Read More]