Go - 函数
- 作者: 大斌子媳妇
- 来源: 51数据库
- 2021-07-08
概述
学习了一些基础语法,开始学习写函数了,分享几个自己写的函数。
- 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 在配置文件中读取。
推荐阅读
- go - 循环
- go - map 集合
- go - struct 结构体
- go - slice 切片
- go - 数组
- go - 变量声明
- go - 环境安装
本文欢迎转发,转发请注明作者和出处,谢谢!
推荐阅读
