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

    运行结果:

    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
    ", 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
    ", getTimeStr())
    

    运行结果:

    获取当前时间戳

    // 获取当前时间戳
    func getTimeInt() int64 {
    	return time.Now().Unix()
    }
    
    fmt.Printf("current time str : %s
    ", getTimeStr())
    fmt.Printf("current time unix : %d
    ", 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
    ", 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 在配置文件中读取。

    推荐阅读

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

  • 相关阅读:
    JAVA合并两个有序的单链表,合并之后的链表依然有序
    excel如何将一个单元格内容拆分成多个单元格?(用到了数据->分列)
    Navicat导入excel的xlsx文件提示无法打开文件
    Request对象实现请求转发
    MessageFormat.format()和String.format()
    使用Servlet动态生成验证码
    Http协议
    使用freemarker导出word
    java注解学习(1)注解的作用和三个常用java内置注解
    SSM_CRUD新手练习(6)分页后台控制器编写
  • 原文地址:https://www.cnblogs.com/xinliangcoder/p/11187087.html
Copyright © 2020-2023  润新知