go 函數介紹
阿新 • • 發佈:2019-01-13
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 函數介紹