概述
學習了一些基礎語法,開始學習寫函數了,分享幾個本身寫的函數。
MD5
獲取當前時間戳
獲取當前時間字符串
生成簽名
函數定義
php
func function_name(input1 type1, input2 type2) (type1, type2) { // 函數體 // 返回多個值 return value1, value2 }
函數用 func 聲明。
函數能夠有一個或多個參數,須要有參數類型,用 , 分割。
函數能夠有一個或多個返回值,須要有返回值類型,用 , 分割。
函數的參數是可選的,返回值也是可選的。
值傳遞
傳遞參數時,將參數複製一份傳遞到函數中,對參數進行調整後,不影響參數值。
Go 語言默認是值傳遞。
引用傳遞
傳遞參數時,將參數的地址傳遞到函數中,對參數進行調整後,影響參數值。
這個是 Go - Struct 結構體的例子:
算法
//demo_13.go package main import ( "encoding/json" "fmt" ) type Result struct { Code int `json:"code"` Message string `json:"msg"` } func main() { var res Result res.Code = 200 res.Message = "success" toJson(&res) setData(&res) toJson(&res) } func setData (res *Result) { res.Code = 500 res.Message = "fail" } func toJson (res *Result) { jsons, errs := json.Marshal(res) if errs != nil { fmt.Println("json marshal error:", errs) } fmt.Println("json data :", string(jsons)) }
運行結果:
MD5
json
// MD5 方法 func MD5(str string) string { s := md5.New() s.Write([]byte(str)) return hex.EncodeToString(s.Sum(nil)) } str := "12345" fmt.Printf("MD5(%s): %s\n", str, MD5(str))
運行結果:
獲取當前時間字符串
app
// xxxx-xx-xx xx:xx:xx func getTimeStr() string { return time.Now().Format("2006-01-02 15:04:05") } fmt.Printf("current time str : %s\n", getTimeStr())
運行結果:
獲取當前時間戳函數
// 獲取當前時間戳 func getTimeInt() int64 { return time.Now().Unix() } fmt.Printf("current time str : %s\n", getTimeStr()) fmt.Printf("current time unix : %d\n", getTimeInt())
運行結果:
生成簽名
學習
//demo_26.go package main import ( "crypto/md5" "encoding/hex" "fmt" "sort" ) func main() { params := map[string]interface{} { "name" : "Tom", "pwd" : "123456", "age" : 30, } fmt.Printf("sign : %s\n", createSign(params)) } // MD5 方法 func MD5(str string) string { s := md5.New() s.Write([]byte(str)) return hex.EncodeToString(s.Sum(nil)) } // 生成簽名 func createSign(params map[string]interface{}) string { var key []string var str = "" for k := range params { key = append(key, k) } sort.Strings(key) for i := 0; i < len(key); i++ { if i == 0 { str = fmt.Sprintf("%v=%v", key[i], params[key[i]]) } else { str = str + fmt.Sprintf("&xl_%v=%v", key[i], params[key[i]]) } } // 自定義密鑰 var secret = "123456789" // 自定義簽名算法 sign := MD5(MD5(str) + MD5(secret)) return sign }
運行結果:
對應 PHP 生成簽名方法:
有興趣的能夠在簽名方法中,增長時間戳 和 secret 在配置文件中讀取。
unix