zoukankan      html  css  js  c++  java
  • 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 在配置文件中读取。

  • 相关阅读:
    敏感词过滤
    Tarjan+topsort(DP)【P3387】 [模板]缩点
    树状数组【CF703D】Mishka and Interesting sum
    组合数学+错排问题【p4071】[SDOI2016]排列计数
    Dijkstra【p3003(bzoj2100)】[USACO10DEC]苹果交货Apple Delivery
    Trie树【p2264】情书
    线段树+扫描线【p1884】[Usaco12FEB]过度种植(银)Overplanting …
    区间DP【p4290】[HAOI2008]玩具取名
    暴力 【p4092】[HEOI2016/TJOI2016]树
    暴力 【p4098】[HEOI2013]ALO
  • 原文地址:https://www.cnblogs.com/it-3327/p/11869449.html
Copyright © 2011-2022 走看看