1. 定義:有輸入、有輸出,用來執行一個指定任務的代碼塊數組
func functionname([parametername type]) [returntype] { //function body } //其中參數列表和返回值列表是可選
無參數和返回值的函數app
func functionname() { //function body }
func test1() { fmt.Println("hello world") }
有參數又返回值的函數函數
func sumtwo(a int, b int) int { sum := a + b return sum }
如何連續的一系列參數的類型是同樣,前面的類型能夠不寫,例如:this
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 }
函數調用spa
func add(a, b int) int { return a + b } func main() { sum := add(2, 3) }
多返回值和可變參數指針
多返回值code
func calc(a, b int) (int, int) { sum := a + b sub := a - b return sum, sub } func main() { sum, sub := add(2, 3) }
對返回值進行命名blog
func calc(a, b int) (sum int, sub int) { sum = a + b sub = a - b return } func main() { sum, sub := add(2, 3) }
_標識符內存
返回多個值的時候 有的值不想接受就能夠用_string
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語句遵循 堆棧的原則,即後進先出,先進後出
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:用來作錯誤處理