函数
- 1、无参数无返回函数
- 2、有参无返回
- 多个参数
- 3、不定参数类型
package main
import "fmt"
func MyFunc(a int ,b int) { //固定参数
fmt.Printf("%d")
}
//..int类型这样的类型 ...type不定参数类型
//注意:不定参数,一定(只能)放在形参中的最后一个参数
func MyFunc1(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("=================================")
//返回2个值,第一个是下标,第二个是下标所对应的数
for i,data :=range args{
fmt.Printf("args[%d] = %d\n",i,data)
}
}
//固定参数一定要传参,不定参数根据需求传递参数
func MyFunc2(a int,args...int) {
}
func main() {
//MyFunc(666,222)
MyFunc1()
fmt.Println("---------------------------------------")
MyFunc1(1)
fmt.Println("---------------------------------------")
MyFunc1(2,3,4)
}
package main
import "fmt"
func myfunco1(tmp ...int) {
for _, data := range tmp{
fmt.Println("data =",data)
}
}
func myfunc2(tmp ...int) {
for _,data :=range tmp {
fmt.Println("data=",data)
}
}
func test(args ...int) {
//全部元素传递给myfunc01
//myfunco1(args...)
//只想把后2个参数传递给另外一个函数使用
myfunc2(args[2:]...) //从args[2]开始(包括本身),把后面的所有元素传递过去
myfunc2(args[:2]...) //0---2(不包括数字2下标),传递过去
}
func main() {
test(1,3,4,5)
}
package main
import "fmt"
//多个返回值
func myfunc11()(int,int,int) {
return 1,2,3
}
//go语言推荐写法
func myfunc12()(a,b,c int) {
a,b,c = 11,22,33
return
}
func main() {
//函数调用
a,b,c := myfunc12()
fmt.Printf("a=%d,b=%d,c=%d",a,b,c)
}
函数定义说明:
- funnc:函数由关键字func开始声明
- FuncName:函数名称,根据约定,函数名首字母小写即为:private,大写即为:public
- 参数列表:函数可以有0个活多个参数,参数格式为:变量名 类型,如果有多个参数通过逗号分隔,不支持默认参数
返回值类型:
- 如果只有一个返回值且不声明名返回值变量,那么你可以省略,包括返回值的括号
- 如果没有返回值,那么就直接省略最后的返回信息
- 如果有返回值,那么必须在函数的内部添加return语句
-6、 有参有返回值
package main
import "fmt"
func MaxAndMin(a,b int) (max,min int) {
if a>b {
max =a
min =b
}else{
max =b
min =a
}
return //有返回值的函数,必须通过return
}
func main() {
//通过匿名变量丢弃某个返回值 max ,_ := MaxAndMin(10,20)
max ,min := MaxAndMin(10,20)
fmt.Printf("max = %d,,min = %d",max,min)
}
- 普通函数调用流程
package main
import "fmt"
func funnc(c int) {
fmt.Println("c =",c)
}
func funnb(b int) {
funnc(b-1)
fmt.Println("b= ",b)
}
func funna(a int) {
funnb(a-1)
fmt.Println("a = ",a)
}
func main() {
funna(3)
fmt.Println("main执行了")
}