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

 

posted @ 2019-01-13 10:53  A-a  阅读(213)  评论(0编辑  收藏  举报