1024程式設計師節 | 全民狂歡,拒絕加班2020-10-24,golang實用工具方法分享,拒絕加班~
重要的事情說三遍,拒絕加班!拒絕加班!拒絕加班!
分享一些日常積累的實用golang工具小方法,從此拒絕加班~
結構體轉json字串
func DumpString(v interface{}) (str string) {
bs, err := json.Marshal(v)
b := bytes.Buffer{}
if err != nil {
b.WriteString("{err:\"json format error.")
b.WriteString(err.Error())
b.WriteString("\"}")
} else {
b.Write(bs)
}
str = b.String()
return str
}
獲取指定長度指定字首的uuid
import (
"crypto/rand"
"fmt"
"math/big"
mathrandom "math/rand"
"time"
)
func GenerateUUID(prefex string, uuidLen int) string {
var character = []byte("abcdefgijklmnopqrstuvwxyz0123456789")
var chLen = len(character)
buf := make([]byte, uuidLen, uuidLen)
max := big.NewInt(int64(chLen))
for i := 0; i < uuidLen; i++ {
random, err := rand.Int(rand.Reader, max)
if err != nil {
mathrandom.Seed(time.Now().UnixNano())
buf[i] = character[mathrandom.Intn(chLen)]
continue
}
buf[i] = character[random.Int64()]
}
return fmt.Sprintf("%s-%s", prefex, string(buf))
}
深克隆結構體
func Clone(i interface{}) interface{} {
typ := reflect.TypeOf(i)
for typ.Kind() == reflect.Ptr {
typ = typ.Elem()
}
vl := reflect.ValueOf(i)
if vl.IsNil() {
return reflect.New(typ)
}
for vl.Kind() == reflect.Ptr {
vl = vl.Elem()
}
el := reflect.New(typ).Elem()
el.Set(vl)
return el.Addr().Interface()
}
淺拷貝結構體
func Copy(dst interface{}, src interface{}) error {
if dst == nil {
return fmt.Errorf("dst cannot be nil")
}
if src == nil {
return fmt.Errorf("src cannot be nil")
}
bytes, err := json.Marshal(src)
if err != nil {
return fmt.Errorf("Unable to marshal src: %s", err)
}
err = json.Unmarshal(bytes, dst)
if err != nil {
return fmt.Errorf("Unable to unmarshal into dst: %s", err)
}
return nil
}
url是否合法
func IsValidHttpUrl(urlPath string) bool {
u := urlPath
var httpPre = regexp.MustCompile(`^https?://`)
// 協議校驗
if !httpPre.Match([]byte(u)) {
return false
}
// url format校驗
r, err := url.Parse(urlPath)
if err != nil {
return false
}
//必須為可解析的ip或域名
if net.ParseIP(r.Hostname()) == nil {
ips, err := net.LookupIP(r.Hostname())
if err != nil || len(ips) == 0 {
return false
}
}
return true
}
是否為ipv6
func IsIPV6(target string) bool {
ip := net.ParseIP(target)
if ip != nil {
if ip.To4() == nil && ip.To16() != nil {
return true
}
}
return false
}
是否為ipv4
func ValidIP4(ipAddress string) bool {
ipAddress = strings.Trim(ipAddress, " ")
re, _ := regexp.Compile(`^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$`)
if re.MatchString(ipAddress) {
return true
}
return false
}
base64編碼
func Base64Encode(s string) string {
return base64.StdEncoding.EncodeToString([]byte(s))
}
base64解碼
func Base64Decode(s string) (string, error) {
r, err := base64.StdEncoding.DecodeString(s)
if err != nil {
return "", err
}
return string(r), nil
}
md5加密
func MD5Strings(strings ...string) string {
h := md5.New()
for _, s := range strings {
io.WriteString(h, s)
}
return fmt.Sprintf("%x", h.Sum(nil))
}
陣列轉換為map
func ConvertSliceToMap(s []string) map[string]struct{} {
ret := map[string]struct{}{}
for _, v := range s {
ret[v] = struct{}{}
}
return ret
}
為了減少加班,持續分享中...
相關文章
- 邦芒解析:拒絕加班邀請的8種理由
- 拒絕熬夜加班,實在智慧RPA讓財務人省心省力
- 做個清醒的程式設計師之拒絕工作程式設計師
- 拒絕完美
- tomcat拒絕連線解決方法Tomcat
- 程式設計師因工資低拒絕offer,HR:估計你一輩子就是個程式設計師程式設計師
- localhost拒絕訪問的解決方法localhost
- 拒絕遊戲創業遊戲創業
- 拒絕使用 rm -rf 命令 ?
- win10印表機為什麼拒絕訪問 win10印表機拒絕訪問的方法Win10
- win10開機拒絕訪問怎麼辦 win10開機拒絕訪問的方法Win10
- websocket連線mina被拒絕Web
- 《全民泡泡超人》定檔六一 攜手笑果文化拒絕不開心
- 三年一跳槽、拒絕“唯學歷”,火速 Get 這份程式設計師求生指南!程式設計師
- 思否有約丨夏磊:拒絕做只會“複製-貼上”的程式設計師程式設計師
- 遊戲美宣,拒絕亂穿衣遊戲
- MacBook上使用ssh localhost被拒絕Maclocalhost
- 記錄曾經拒絕的話
- 程式設計師面試能力通過,卻被技術主管拒絕,HR回覆原因,程式設計師以為聽錯了程式設計師面試
- 拒絕卡組堆砌 向《殺戮尖塔》學卡牌設計
- 誰該為程式設計師加班“買單”程式設計師
- 印表機拒絕訪問是什麼問題 win10共享印表機拒絕訪問Win10
- 最近被蘋果拒絕的條款和解決方法蘋果
- 程式設計師感慨:拒絕網際網路高薪,跑去事業單位修行,我後悔了程式設計師高薪
- 誰能拒絕過一次“小小元宇宙”春節呢?元宇宙
- 上班就是演戲,拒絕內耗自己
- Torvalds 拒絕接受 ZFS 檔案系統
- Linux 曝出 TCP 拒絕服務漏洞LinuxTCP
- 程式猿生存指南-24 加班狂魔
- 歡慶1024程式設計師節,開源茁壯成長程式設計師
- ELK實驗中 顯示連線拒絕訪問
- 連結串列找環方法證明(拒絕誤人子弟)
- 教你解決行動硬碟提示拒絕訪問的方法硬碟
- 程式設計師只配加班?有錢有閒的程式設計師都在哪?程式設計師
- 想找Java程式設計師實習崗位,卻連遭遇6家公司拒絕,他的路究竟在哪裡?Java程式設計師
- 為什麼我拒絕用Kotlin編寫安卓應用?Kotlin安卓
- 2.14情人節,程式設計師該如何絕地反擊?程式設計師
- 誰能拒絕春節逛街時帶一個“星寶”回家呢?