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:用来做错误处理

  • 相关阅读:
    机器学习(深度学习)
    机器学习(六)
    机器学习一-三
    Leetcode 90. 子集 II dfs
    Leetcode 83. 删除排序链表中的重复元素 链表操作
    《算法竞赛进阶指南》 第二章 Acwing 139. 回文子串的最大长度
    LeetCode 80. 删除有序数组中的重复项 II 双指针
    LeetCode 86 分割链表
    《算法竞赛进阶指南》 第二章 Acwing 138. 兔子与兔子 哈希
    《算法竞赛进阶指南》 第二章 Acwing 137. 雪花雪花雪花 哈希
  • 原文地址:https://www.cnblogs.com/ctztake/p/10262073.html
Copyright © 2011-2022 走看看