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

go 函數介紹

style nic () code 分配內存 元素 ++ std 類型

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

go 函數介紹