Go - 函數

概述

學習了一些基礎語法,開始學習寫函數了,分享幾個本身寫的函數。

    MD5

    獲取當前時間戳

    獲取當前時間字符串

    生成簽名

函數定義

  php

 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

json

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

 


運行結果:


獲取當前時間字符串

app

    // 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 在配置文件中讀取。

unix

相關文章
相關標籤/搜索