1 定义格式
函数构成代码执行的逻辑结构。在Go语言中,函数的基本组成为:关键字func、函数名、参数列表、返回值、函数体和返回语句。
Go 语言函数定义格式如下:
func FuncName(/*参数列表*/) (o1 type1, o2 type2/*返回类型*/) { //函数体 return v1, v2 //返回多个值 }
函数定义说明:
- func:函数由关键字 func 开始声明
- FuncName:函数名称,根据约定,函数名首字母小写即为private,大写即为public
- 参数列表:函数可以有0个或多个参数,参数格式为:变量名 类型,如果有多个参数通过逗号分隔,不支持默认参数
- 返回类型:
① 上面返回值声明了两个变量名o1和o2(命名返回参数),这个不是必须,可以只有类型没有变量名
② 如果只有一个返回值且不声明返回值变量,那么你可以省略,包括返回值的括号
③ 如果没有返回值,那么就直接省略最后的返回信息
④ 如果有返回值, 那么必须在函数的内部添加return语句
2 自定义函数
2.1 无参无返回值
package main import "fmt" //无参无返回值函数定义 func MyFunc(){ a := 666 fmt.Println("a = ", a) } func main(){ // 无参无返回值函数的调用,函数名() MyFunc() }
2.2 有参无返回值
2.2.1 普通参数列表
package main import "fmt" // 有参无返回值函数的定义, 普通参数列表 // 定义函数时,在函数后面()定义参数为形参 // 参数传递,只能由实参传递给形参,不能反过来,单向传递 func MyFunc1(a int){ fmt.Println("a = ", a) } func MyFunc2(a int, b int){ fmt.Printf("a = %d, b = %d\n", a, b) } func MyFunc3(a, b int){ fmt.Printf("a = %d , b = %d \n", a, b) } func MyFunc4(a int, b string, c float64){ } func MyFunc5(a, b string, c float64, d, e bool){ } func main(){ // 有参无返回值函数调用: 函数名(所需参数) // 调用函数传递的参数叫实参 MyFunc1(6666) MyFunc2(6666, 7777) }
2.2.1 普通参数列表
1) 不定参数类型
不定参数是指函数传入的参数个数为不定数量。为了做到这点,首先需要将函数定义为接受不定参数类型:
package main import "fmt" // ...int这样的类型, ...type 不定参数类型 // Python中使用*args,**kwargs func MyFunc01(args ...int){ //传递的实参可以是0或者多个 fmt.Println("len(args) = ", len(args)) //获取用户传递参数的个数 for i:=0; i<len(args); i++{ fmt.Printf("args[%d] = %d\n", i , args[i]) } fmt.Println("=================================================") for i, data := range args{ fmt.Printf("args[%d] = %d\n", i, data) } } //固定参数一定要传参,不定参数根据需求传递 func MyFunc03(a int, args ...int){ } //注意,不定参数,一定(只能)放在形参中的最后一个参数 //func MyFunc04(args ...int, a int){ // } func main(){ MyFunc01(111,222,333) }