Golang 起手式 1.13+

最近都在開 Golang … 還有更多的 Ruby,這邊記下 Golang 相關的東西,安裝 golang 部分直接略過

# ~/.bashrc or ~/.zshrc 增加以下這行
GOPRIVATE=git.repo.example.com

增加這行的原因是類似 … 開發團隊內如果有自己的 git server 類似用 gitlab / gogs / gitea … 之類的,則必須加入,否則編譯時會遇到 410 gone 的 error,原因是 go 1.13 後都會去找 checksum server 做 verify 就是

再來,你必須把一個 golang project 開在 git server 上,類似剛剛的 domain + repo 內,會類似

https://git.repo.example.com/test/ or https://git.repo.example.com/test.git

則新增一個檔案 %GIT_PROJECT%/go.mod 並增加以下內容

module git.repo.example.com/test

這樣以後在 project 下面開個類似 spec/spec.go 的檔案(package)時,在其他資料夾只需要

import (
  spec "git.repo.example.com/test/spec"
)

這樣設定即可,golang 是資料夾做 package 集合的,所以裡面的所有 go 檔案都會編譯就是,且不會去另外抓 git repo 下來,因為已經在 go.mod 內宣告本身 project 即是 git.repo.example.com/test

增加其他 repo 的 lib 時,只需要在 %GIT_PROJECT% 目錄下,類似使用

go get git.repo.example.com/i_am_lib@convert_me

i_am_lib 是 repo 名稱,convert_me 是 branch 名稱,branch 名稱可以連同 @ 一起略過,則為預設的 branch 就是,之後會自動修正 go.mod 檔案,增加類似

require (
  git.repo.example.com/i_am_lib v0.0.0-20191108031432-227b76d455e7
)

其中的 “227b76d455e7” 其實就是 “convert_me” 這個 branch 的最後一個 commit 的 hash 前段,可以去該 git 檢查就是,go.sum 內也有相關訊息可以檢查(完整關聯數)

一般專案該注意的地方應該只有這樣而已,尤其多人開發多 repo 會撞到的大概也就這樣,其餘的就是吵架的部分了,類似

func IamFunc(iamInput string) (iamOutput string , iamError error)
func IamFunc(iamInput string) (string , error)

哪個寫法好?其實各有優缺點,類似前者在 doc 或 tip 產生時,可以看得出 return 的第一個值除了是 string 外,iamOutput 還能看出簡單的意思,但寫作就非常需要注意了,類似這個主題

當然主因都是在 := 這個指令,並在多值 init + 賦值同時才會出現這問題就是,所以如果別偷爛都用 := 則完全不會有問題就是(當然前面你就必須寫一票類似 var yyy string 之類的鬼就是 … )

anyway 大概這樣,其餘的後續想到再繼續補上