学习了一些基础语法,开始学习写函数了,分享几个自己写的函数。
func function_name(input1 type1, input2 type2) (type1, type2) {// 函数体// 返回多个值return value1, value2}
func
声明。,
分割。,
分割。传递参数时,将参数复制一份传递到函数中,对参数进行调整后,不影响参数值。
Go 语言默认是值传递。
传递参数时,将参数的地址传递到函数中,对参数进行调整后,影响参数值。
这个是 Go - Struct 结构体的例子:
//demo_13.gopackage mainimport ("encoding/json""fmt")type Result struct {Code int `json:"code"`Message string `json:"msg"`}func main() {var res Resultres.Code = 200res.Message = "success"toJson(&res)setData(&res)toJson(&res)}func setData (res *Result) {res.Code = 500res.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 方法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:xxfunc 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.gopackage mainimport ("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 []stringvar 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 在配置文件中读取。