概述
學習了一些基礎語法,開始學習寫函式了,分享幾個自己寫的函式,
MD5
獲取當前時間戳
獲取當前時間字串
生成簽名
函式定義
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
// 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))
運行結果:
獲取當前時間字串
// 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 在組態檔中讀取,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/63337.html
標籤:Go
上一篇:【go學習筆記】一、go語言hello world程式開發【連載】
下一篇:Go - 回圈
