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