go语言基础之函数

函数

函数定义

 

 

函数调用

1.无参无返回值

//定义
func sayHello() {
    fmt.Println("hello xiaopang")
}
//调用
sayHello()

 

2.有参数有返回值

//定义
func intSum(x int, y int) int {
    return x + y
}
func main(){
    //调用
    a := intSum(1, 2)
    fmt.Println(a)
}

 

3.定义返回值的

func A(x int, y int) (ret int) {
    ret = x + y //ret返回值已经声明不需要在定义,直接拿过来使用就行
    return
}
A(2, 2)

 

4.函数接收可变参数

//函数接收可变参数,在参数后面追加... 表示可变参数
// 可变参数在函数体中是切片类型
func intSum2(a ...int) {
    fmt.Println(a)
    fmt.Printf("%T\n", a)
}
intSum2(10, 20)

 

5.固定参数和可变参数同时出现,可变参数要放在最后

//go语言中没有默认参数
func intSum3(a int, b...int) int{
    ret := a
    for _,arg := range b{
        ret +=arg// 0+10  ret=10  10+20 ret=30  30+30 ret=60
    }
    fmt.Println(ret)
    return ret
}
//最少传一个值,因为固定参数不能为空,可变参数可以不传值
intSum3(10,10) //或intSum3(10,)

 

6.函数中参数类型简写

//函数中参数类型简写
func intSum4(x, y int) int {
    ret := x + y
    fmt.Println(ret)
    return ret
}

7.定义具有多个返回值的函数

//函数中定义多个返回值
func intSum5(x, y int) (sum, sub int) {
    sum = x + y
    sub = x - y
    fmt.Printf("x+y=%d\nx-y=%d\n",sum,sub)
    return sum,sub
}
intSum5(20,10)

defer延迟执行

//defer:延迟执行
func main() {
    fmt.Println("start...")
    //defer逆序执行,在函数即将返回的时候执行defer
    defer fmt.Println(1)
    defer fmt.Println(2)
    defer fmt.Println(3)
    fmt.Println("end...")
}

函数变量

作用域

1.全局变量

var num int = 10 //全局变量

//可以在函数中访问全局变量
func testGlobal() {
    fmt.Println("变量num", num)
    
}

2.局部变量

  • 函数中定义局部变量:if switch for等
    var num int = 100//全局变量
    func testGlobal() {
        num := 100 //局部变量
    
        //函数中使用变量步骤
        //1.先在函数内部查找局部变量
        //2.如果没有局部变量,就用全局变量
        fmt.Println("变量num", num)
        
    }

     

  • 语句块中局部变量
        //变量i此时只在for循环的语句块中生效
        for i:=0;i<10;i++{
            fmt.Println(i)//打印索引
        }
        fmt.Println(i)

     

函数可以作为变量

func testGlobal() {
    num := 100 //局部变量

    //函数中使用变量步骤
    //1.先在函数内部查找局部变量
    //2.如果没有局部变量,就用全局变量
    fmt.Println("变量num", num)
    
}
func main() {
    testGlobal()
    abc :=testGlobal
    abc()
    fmt.Printf("%T\n",abc)

函数可以作为参数

//一般函数固定参数x y
func add (x,y int) int {
    return x+y
}
//参数为函数类型的函数x,y为固定参数,op为函数类型参数
func calc(x,y int ,op func (int,int) int) int {
    return op(x,y)
}

func main() {
    r1 := calc(100,200,add)
    fmt.Println(r1)

 

posted @ 2021-08-13 14:47  努力乄小白  阅读(51)  评论(0编辑  收藏  举报