go语言函数

函数是基本的代码块,用于执行一个任务。

Go 语言最少有个 main() 函数。

你可以通过函数来划分不同功能,逻辑上每个函数执行的是指定的任务。

函数声明告诉了编译器函数的名称,返回类型,和参数。

Go 语言标准库提供了多种可动用的内置的函数。例如,len() 函数可以接受不同类型参数并返回该类型的长度。如果我们传入的是字符串则返回字符串的长度,如果传入的是数组,则返回数组中包含的元素个数。

# 函数定义

func function_name(input1 type1, input2 type2) (type1, type2) {
  // 函数体
  // 返回多个值
  return value1, value2
}

函数用 func 声明。

函数可以有一个或多个参数,需要有参数类型,多个参数时用逗号分割

函数可以有一个或多个返回值,有多个返回值时其返回类型需用逗号分割

函数的参数是可选的,返回值也是可选的。

# 值传递

传递参数时,将参数复制一份传递到函数中,对参数进行调整后,不影响参数值。

// 编写一个md5函数
package main
import (
"crypto/md5"
"fmt"
)
func main() {
str := "12345"
fmt.Printf("MD5(%s): %s\n", str, MD5(str))
}
// 形参名str,形参类型string,返回值类型string
func MD5(str string) string {
// fmt.Sprintf 用来格式化字符串,%x表示十六进制
data := []byte(str)
   s1 := fmt.Sprintf("%x", md5.Sum(data))
   return s1
}

运行结果:
C:\Go\www>go run dengyu.go
MD5(12345): 827ccb0eea8a706c4c34a16891f84e7b

Go 语言默认是值传递

# 引用传递

传递参数时,将参数的地址传递到函数中,对参数进行调整后,影响参数值。

package main
import ("fmt")
type Result struct {
Code int
Message string
}
func main() {
var res Result
res.Code = 200
res.Message = "成功"
fmt.Println("修改前的结构体:", res)

setData(&res)
fmt.Println("修改后的结构体:", res)
}
func setData(r *Result) {
r.Code=400
r.Message="失败"
}

运行结果:
C:\Go\www>go run dengyu.go
修改前的结构体: {200 成功}
修改后的结构体: {400 失败}

(完)

(完)