zoukankan      html  css  js  c++  java
  • go 函数介绍

    1. 定义:有输入、有输出,用来执行一个指定任务的代码块

    func functionname([parametername type]) [returntype] { 
      //function body
    }
    //其中参数列表和返回值列表是可选

    无参数和返回值的函数

    func functionname() { 
      //function body
    }
    func test1() {
        fmt.Println("hello world")
    }

    有参数又返回值的函数

    func sumtwo(a int, b int) int {
        sum := a + b
        return sum
    }

    如何连续的一系列参数的类型是一样,前面的类型可以不写,例如:

    func add(a, b int) int { 
      return a + b
    }
    func sumsub(a, b int) (int, int) {
        sum := a + b
        sub := a - b
        return sum, sub
    }

    函数调用

    func add(a, b int) int { 
      return a + b
    }
    func main() { 
      sum := add(2, 3)
    } 

    多返回值和可变参数

    多返回值

    func calc(a, b int) (int, int) { 
      sum := a + b
      sub := a - b
      return sum, sub
    }
    func main() { 
      sum, sub := add(2, 3)
    } 

    对返回值进行命名

    func calc(a, b int) (sum int, sub int) { 
      sum = a + b
      sub = a - b
      return
    }
    func main() { 
      sum, sub := add(2, 3)
    } 

    _标识符

    返回多个值的时候 有的值不想接受就可以用_

    func calc(a, b int) (sum int, sub int) { 
      sum = a + b
      sub = a - b
      return
    }
    func main() { 
      sum, _ := add(2, 3)
    } 

    可变参数

    // 可以传入0个或者多个参数 
    func calc_v1(b …int) (sum int, sub int) {   return }
    // a 必传 func calc_v2(a
    int, b …int) (sum int, sub int) {   return }
    // a,b 必传 func calc_v3(a
    int, b int, c …int) (sum int, sub int) {   return }
    func test4(b ...int) int {
        sum := 0
        for i := 0; i < len(b); i++ {
            sum += b[i]
        }
        return sum
    }

    defer语句

    defer 语句 在函数执行完以后才开始执行, 多个defer语句遵循 堆栈的原则,即后进先出,先进后出

    func calc_v1(b …int) (sum int, sub int) { 
      defer fmt.Println(“defer”)
      return
    }

    多个defer语句,遵循栈的特性:先进后出

    func calc_v1(b …int) (sum int, sub int) { 
      defer fmt.Println(“defer1”)
      defer fmt.Println(“defer2”)
      return
    }

    /*
    defer2
    defer1
    */

    defer 举例

    package main
    
    import "fmt"
    
    func defer1() {
        defer fmt.Println("----------------1")
        fmt.Println("-----------------2")
        fmt.Println("------------------3")
    }
    
    /*
    ------------------2
    -----------------3
    ----------------1
    */
    
    
    
    func testdefer1(){
        for i:=0; i<10; i++ {
            defer fmt.Printf("this is %d
    ", i)
        }
        fmt.Println("go-----------")
    }
    /*
    go-----------
    this is 9
    this is 8
    this is 7
    this is 6
    this is 5
    this is 4
    this is 3
    this is 2
    this is 1
    this is 0
    */
    
    func testdefer2(){
        i:=5
        defer fmt.Printf("defer test i=%d
    ",i)
        i=1000
        fmt.Println("over -----------")
    }
    /*
    over -----------
    defer test i=5
    */
    
    func main() {
        // defer1()
        testdefer1()
        // testdefer2()
    }

    内置函数

    1. close    主要用来关闭channel

    2.len:用来求长度,比如string、array、slice、map、channel

    3. new:用来分配内存,主要用来分配值类型,比如int、struct。返回的是指针

    4. make:用来分配内存,主要用来分配引用类型,比如chan、map、slice

    5. append:用来追加元素到数组、slice中

    6.panic和recover:用来做错误处理

  • 相关阅读:
    算法训练——整数平均值
    算法训练——字符删除
    算法训练——最大的算式
    flask_sqlalchemy查询时将date类型修改为datetime类型
    mysql更改时区
    python 省略号 三个点...的含义
    ubuntu系统安装gedit
    python操作hdfs总结
    流式上传下载
    python将文件夹打包
  • 原文地址:https://www.cnblogs.com/ctztake/p/10262073.html
Copyright © 2011-2022 走看看