[Go 08] 認識時間格式與golang的時區轉換寫法

開發過程中,曾遇過部署到別的平台,時間就變成+0 時區了(例如明明下午五點,部署平台顯示早上九點),這時才發現原來你的時間不是他的時間,而資料庫中也常常用時間戳數字來做紀錄,但顯示給使用者時又要轉成格式化顯示,本篇紀錄各種時間格式的理解與 go 程式對於時間的使用

繼續閱讀
[監控]使用 Prometheus+Grafana 監控電腦與程式效能

[監控]使用 Prometheus+Grafana 監控電腦與程式效能

使用 Prometheus+Grafana 監控效能

介紹

Prometheus

普羅米修斯是開源的免費應用程序。可以很容易建立不同維度的 metrics 及資訊視覺化圖表的監控與查詢,也有告警設定,Kubernetes 的核心組件也可以找到它的身影,許多知名公司如:Uber 也有導入。

Grafana

Grafana 是一個跨平台、開源的資料視覺化網路應用程式平台。使用者組態連接的資料來源之後,Grafana 可以在網路瀏覽器里顯示資料圖表和警告。該軟體的企業版本提供更多的擴充功能。擴充功能通過外掛程式的形式提供,終端使用者可以自訂自己的資料面板介面以及資料請求方式。Grafana 被廣泛使用,包括維基百科專案。

繼續閱讀

[Go] 性能/品質檢測

當開發golang程式完成後,其實有一些工具可以查看自己的程式效能,是否有些地方佔了太大的資訊進而改進,另外也可以 透過品質檢測工具去看修改建議;最後,如果有撰寫測試案例的話,也有工具可以產生測試報告,確認測試案例涵蓋了程式多少百分比,還有沒被寫到的地方也可以透過報告顯示出來.

本章介紹:

  • 性能分析工具-pprof 查看CPU/memory 等的瓶頸
  • 檢視go的品質與建議-gosec
繼續閱讀

[Go 07] 使用 zap 框架印出 log

本章內容:

  • 實作使用高性能 zap log 框架
  • 擁有 log level 配置 (常用 debug/warn/info/error)與程式碼位置
  • 可以選擇印出在 console 或是文件(要外掛 lumberjack 去分割)
  • zap 有 suger 函式可以增加易用性,但犧牲效能
繼續閱讀

[Go 04] 信號處理和退出程式

一般在執行go run main.go後就會馬上回到命令列,
這邊實作當接收到ctrl+c或是終止程式才會停止程式

本文說明:

  • go實作接收命令而中止程式.
  • 會用到channel管道來進行阻塞,並接收os/signal訊號
繼續閱讀

[Go 02] GO 新手上路與概念筆記

藍色區塊

開始寫GO

分享自己初學GO時看的教學文章,安裝完GO環境之後,就可以撰寫自己第一支GO的程式了,網路上的系列說明很多很詳細,就不重複撰文了,以下則是自己收藏很有用的網路文章。

個人筆記整理

筆記 Go 的基本类型

bool,string
int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
byte // uint8 的别名
rune // int32 的别名// 表示一个 Unicode 码点
float32 float64
complex64 complex128
https://tour.go-zh.org/basics/11

匿名欄位

1
2
3
4
5
6
7
8
9
10
type User struct {
Name string
}
type Person struct {
User //匿名欄位
ID string
}

ss := Person{User: User{Name: "123"}, ID: "123"}
fmt.Print("ss", ss.Name)

筆記 Go的參數傳遞

傳值的意思是:函式傳遞的總是原來這個東西的一個副本,一副拷貝。

  • pass by value
    嚴格來說,Go只有傳植方式,會複製一個新的變數,且分配新的memory位址。
    pass by pointer (或稱 called by reference,但其實不是)
    指標方式則會複製一個新的指標,但指向的memeory位址是一樣的,但是是兩個不同的指標。
  1. 通常預期參數被修改,應傳指標。
  2. 在go裡pass by value開銷很小
  3. 迷思:Map/chan等其實是指標型別,因此會被修改,是種引用型別(reference types)[不是指call by reference],仍是pass by value

出自以下參考文章:

筆記 理解 Go 语言中的方法和接收者

  • 值接收者,是一个副本,方法内部無法對其真正的接收者做更改;
  • 指针接收者,是接收者的引用,對這個引用的修改可以影響真正的接收者。

理解 Go 语言中的方法和接收者

筆記 go中的資料結構介面-interface

go中的資料結構介面-interface

interface gitbook

筆記 搞定Go Mock 單元測試

搞定Go單元測試(二)——mock框架(gomock)

[Go 01] 配置GO開發環境

什麼是Go

Go(又稱Golang)是Google開發的一種靜態強型別、編譯型、並發型,並具有垃圾回收功能且輕巧的程式語言.

透過三步驟設定完開發環境:

  1. 安裝官方 Go
  2. 配置開發 Go 所需要環境變數
  3. 下載IDE「推薦Visual Studio Code加上插件」 開始寫Go
繼續閱讀