zoukankan      html  css  js  c++  java
  • 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
    ", 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
    x-y=%d
    ",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
    ",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)
  • 相关阅读:
    Js实现继承的几种方式
    ES6-promise实现异步请求
    CSS重排和重绘
    jq在元素的后面插入内容
    yii2 Query Builder 查询打印sql语句
    js replace(a,b)替换指定字符
    linux 打印当前工作目录
    linux 查看磁盘空间
    linux查看大文件
    js-Cannot read property 'innerHTML' of null
  • 原文地址:https://www.cnblogs.com/fuyuteng/p/15137360.html
Copyright © 2011-2022 走看看