函数
函数是语句序列的集合,能够将一个大的工作分解为小的任务,对外隐藏了实现细节
- 函数组成
- 函数名
- 参数列表(parameter-list)
- 返回值(result-list)
- 函数体(body)
func name(parameter-list) (result-list){
body
}
- 单返回值函数
func plus(a, b int) (res int){
return a + b
}
- 多返回值函数
func multi()(string, int){
return "name", 18
}
- 命名返回值
// 被命名的返回参数的值为该类型的默认零值
// 该例子中 name 默认初始化为空字符串,height 默认初始化为 0
func namedReturnValue()(name string, height int){
name = "xiaoming"
height = 180
return
}
- 参数可变函数
func sum(nums ...int)int{
fmt.Println("len of nums is : ", len(nums))
res := 0
for _, v := range nums{
res += v
}
return res
}
func main(){
fmt.Println(sum(1))
fmt.Println(sum(1,2))
fmt.Println(sum(1,2,3))
}
- 匿名函数
func main(){
func(name string){
fmt.Println(name)
}("禾木课堂")
}
- 闭包
func main() {
addOne := addInt(1)
fmt.Println(addOne())
fmt.Println(addOne())
fmt.Println(addOne())
addTwo := addInt(2)
fmt.Println(addTwo())
fmt.Println(addTwo())
fmt.Println(addTwo())
}
func addInt(n int) func() int {
i := 0
return func() int {
i += n
return i
}
}
- 函数作为参数
func sayHello(name string) {
fmt.Println("Hello ", name)
}
func logger(f func(string), name string) {
fmt.Println("start calling method sayHello")
f(name)
fmt.Println("end calling method sayHellog")
}
func main() {
logger(sayHello, "禾木课堂")
}
- 传值和传引用
func sendValue(name string) {
name = "hemuketang"
}
func sendAddress(name *string) {
*name = "hemuketang"
}
func main() {
// 传值和传引用
str := "禾木课堂"
fmt.Println("before calling sendValue, str : ", str)
sendValue(str)
fmt.Println("after calling sendValue, str : ", str)
fmt.Println("before calling sendAddress, str : ", str)
sendAddress(&str)
fmt.Println("after calling sendAddress, str: ", str)
}