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