golang

A collection of 9 posts
golang

Go Module with private github repository

今天用 go mod download 想下載新專案的依賴的時候一直遇到一個錯誤 go: github.com/your-repo/your-kit@v0.1.0: reading github.com/your-repo/your-kit/go.mod at revision v0.1.0: unknown revision v0.1.0 這是因為我們有使用到一些私有repo 上面的 library,然後我們沒有給權限,所以在使用 go mod download 無法成功抓取,就出現這樣的訊息了。這邊需要做下面這個流程就可以成功了 1. 因為 go mod 其實底層是呼叫 git 的指令來做事情,所以我們必須給 git
2 min read
golang

cannot assign requested address

昨天遇到一個 cannot assign requested address 的問題,這個問題主要的意思是主機端找不到可用的 port 來發起請求, 例如: TCP 連線遇到大量的 TIME_WAIT, 昨天就是這個問題 因為使用的 golang request 套件是使用 golang 的 http client, 但沒有指定 MaxIdleConns 值, 造成大量的 TIME_WAIT 現象 最後設定成這樣來解決 _httpClient = &http.Client{ Transport: &http.Transport{ MaxIdleConnsPerHost: 100, MaxIdleConns: 100, IdleConnTimeout: 90 * time.Second, TLSClientConfig: &tls.Config{ InsecureSkipVerify: false,
1 min read
golang

Golang 時區

time 的時區 Golang 裡面取現在時間 now := time.Now() println("now", now.String()) 這樣會得到now 2016-08-09 19:21:24.0960724 +0800 CST ,這代表 golang 的 time 裡面有包含 timezone 的資訊了 時區轉換 如果想把現在的時區轉換到不同的時區,同時時間要改變,例如:我想把現在 UTC + 8 (台北時間)改成 UTC-4 (美東時間) package main import "time" func main() { now := time.Now() println("now", now.String(
1 min read
golang

golang test

執行全部的 test cases $ go test 執行單一一個 test case 假設我想執行 TestABC() 這個 test case $ go test -run TestABC 執行單一檔案裡面的全部 test case 假設我有一個 router_test.go,而我想跑裡面全部的 test cases,首先我們必須先把裡面全部 test case 名稱統一改成 TestRouter 開頭,例如 TestRouterABC,這樣做的原因是因為之後我們要用 regular expression 來執行 $ go test -run "TestRouter." 執行上面的 command 後(記得在TestRouter後面是有一個點的),全部由 TestRouter 開頭的
1 min read
golang

Golang 的 package 管理

當把全部的 golang 項目放到同一個 golang workspace 都會遇到一個問題,那就是 3rd party package 版本控制的問題。例如:我有一個 golang workspace 他的入徑是 c:/go-projects/src 然後下面有兩個項目分別較 project-one 和 project-two 而這兩個項目都有用到網路上的某一個包 (假設叫 gozip), 當 project-one 要升級 gozip 套件的時候,另外一個項目 project-two 也被需要強迫被升級,因為它們的引用gozip 套件來源是同一個地方,所以有些人比較喜歡用 golang workspace per project 的方式來進行開發,讓彼此golang的專案不會受到影響。 在 Golang 1.5 的時候引入了一個 GO15VENDOREXPERIMENT 環境變數,
2 min read
golang

Golang 如何做到 substring 和 substr

substring 和 substr 其實都是字串擷取的 function, 但這兩個的差異是什麼呢? substring 是設定 "開始" 和 "結束" (字串內容並不包含最後一個字)的位子,並擷取字串,而 substr 是設定 "開始位子" 和 "要擷取的長度",下面我們用一個實際的範例來展示 假設我們有一個字串 "Hello, World" 我們想要取的 lo, W 的字段,我們可以怎麼做 1. 用 substring 的方式,設定想要擷取字串的 "開始" 和 "結束" 位址,我們可以這樣寫 (結束位子一定要大於開始位子) package main import "fmt" func main() { str := "Hello, World" result
1 min read