Golang小白学习Go——第二天函数(The Way To Go)

函数

注:函数不能嵌套,但匿名函数可以嵌套在函数中

函数声明

// 函数声明
func functionName(paraName type, paraName type, ...)(returnName type, returnName type, ...){}

// eg:
func Add(x int, y int)(z int){
	z = x + y
	return
}

函数多个形参名或返回值的类型相同时,可以一起声明。

func functionName(a, b, c int, d, e, f string){
	do something
}

函数传递参数时,必须按照形参的顺序依次传递。

切片(slice)、字典(map)、通道(channel)、接口(interface)这些传递的都是指针。

声明传递指针的形参

func funcName(a *type) int {
	do something
}

对于Go而言,传递参数时,均是值拷贝,区别是拷贝的是值还是指针。

传递变长参数

若函数的最后一个形参采用 arg … type 的形式,那么这个函数就可以处理变长参数。变长参数能够以索引的形式读取数据。变长参数存储可以理解为数组。

func funcName(arg ...type)(return list){
	do something
    return 
}

// eg:
func myFunction(s ...int)(a int){
    do something
    return 
}

函数作为参数

函数可以作为其他函数的参数,然后在其他函数中调用,这叫回调。

// 回调实例
package main

import "fmt"

func main(){
	callBack(Add)
}

func Add(a int, b int){
	fmt.Printf("The sum of %d and %d is :%d", a, b, a + b)
}

func callBack(f func(int, int)){
	f(2, 3)
}

匿名函数

匿名函数是指没有定义名字符号的函数。

func(param list)(return list){
	return ...
}

//eg:
func(a, b int) int{
	return a + b
}

匿名函数可以直接调用、可以赋值给变量、可以作为返回值、可以作为函数的参数。

defer关键字

defer关键字作用是将某一语句推迟到函数返回之前执行。

闭包

你可能感兴趣的:(golang,学习,开发语言)