Go语言入门到实战-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))
}

运行结果:

$ go run d.go 
json data : {"code":200,"msg":"success"}
json data : {"code":500,"msg":"fail"}

MD5

package main
  
import (
"crypto/md5"
    "encoding/hex"
    "fmt"
)

// MD5 方法
func MD5(str string) string {
        s := md5.New()
        s.Write([]byte(str))
        return hex.EncodeToString(s.Sum(nil))
}


func main() {

str := "12345"
fmt.Printf("MD5(%s): %s\n", str, MD5(str))

}

运行结果:

$ go run e.go 
MD5(12345): 827ccb0eea8a706c4c34a16891f84e7b

获取当前时间字符串

package main
  
import (
"time"   
"fmt"
)

func getTimeStr() string {
        return time.Now().Format("2006-01-02 15:04:05")
}

func main() {

fmt.Printf("current time str : %s\n", getTimeStr())

运行结果:

$ go run f.go 
current time str : 2020-05-25 12:40:25

获取当前时间戳

package main
  
import (
"time"   
"fmt"
)

func getTimeStr() string {
        return time.Now().Format("2006-01-02 15:04:05")
}

func getTimeInt() int64 {
	return time.Now().Unix()
}

func main() {
fmt.Printf("current time str : %s\n", getTimeStr())
fmt.Printf("current time unix : %d\n", getTimeInt())
}

运行结果:

$ go run f.go 
current time str : 2020-05-25 12:41:28
current time unix : 1590381688

生成签名

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

运行结果:

$ go run g.go 
sign : 33b940c8f18ede393ea34cd45c406db4


389840-20200325153244909-853795575.png


© 版权归「好专栏」和作者所有,未经许可不得转载,本文地址:https://www.haozhuanlan.com/p/173