Go - 函数
程序员文章站
2023-10-18 23:16:09
概述 学习了一些基础语法,开始学习写函数了,分享几个自己写的函数。 MD5 获取当前时间戳 获取当前时间字符串 生成签名 函数定义 函数用 声明。 函数可以有一个或多个参数,需要有参数类型,用 分割。 函数可以有一个或多个返回值,需要有返回值类型,用 分割。 函数的参数是可选的,返回值也是可选的。 ......
概述
学习了一些基础语法,开始学习写函数了,分享几个自己写的函数。
- 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 在配置文件中读取。
推荐阅读
本文欢迎转发,转发请注明作者和出处,谢谢!
上一篇: 一个最简单的设计模式-模板方法