1. 程式人生 > >go 函式介紹

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:用來做錯誤處理