Go - 函数

作者学习Go语言基础语法后开始写函数,分享了自己写的几个函数,包括MD5、获取当前时间戳和字符串、生成签名等。介绍了函数定义、值传递和引用传递的特点,还给出了运行结果,并推荐了Go语言其他相关内容的阅读。

概述

学习了一些基础语法,开始学习写函数了,分享几个自己写的函数。

  • 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))	
}

运行结果:

640?wx_fmt=png

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))

运行结果:

640?wx_fmt=png

获取当前时间字符串

// 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())

运行结果:

640?wx_fmt=png

获取当前时间戳

// 获取当前时间戳	
func getTimeInt() int64 {	
    return time.Now().Unix()	
}	
fmt.Printf("current time str : %s\n", getTimeStr())	
fmt.Printf("current time unix : %d\n", getTimeInt())

运行结果:

640?wx_fmt=png

生成签名

//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	
}

运行结果:

640?wx_fmt=png

对应 PHP 生成签名方法:

640?wx_fmt=png

有兴趣的可以在签名方法中,增加时间戳 和 secret 在配置文件中读取。

推荐阅读

本文欢迎转发,转发请注明作者和出处,谢谢!

640?wx_fmt=jpeg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值