欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Go - 函数

程序员文章站 2023-10-18 23:16:09
概述 学习了一些基础语法,开始学习写函数了,分享几个自己写的函数。 MD5 获取当前时间戳 获取当前时间字符串 生成签名 函数定义 函数用 声明。 函数可以有一个或多个参数,需要有参数类型,用 分割。 函数可以有一个或多个返回值,需要有返回值类型,用 分割。 函数的参数是可选的,返回值也是可选的。 ......

概述

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

  • 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 - 函数

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

运行结果:

Go - 函数

获取当前时间字符串

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

运行结果:

Go - 函数

获取当前时间戳

// 获取当前时间戳
func gettimeint() int64 {
    return time.now().unix()
}

fmt.printf("current time str : %s\n", gettimestr())
fmt.printf("current time unix : %d\n", gettimeint())

运行结果:

Go - 函数

生成签名

//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 - 函数

对应 php 生成签名方法:

Go - 函数

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

推荐阅读

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