文章目录
 函数分类没有参数, 没有返回值有参数, 没有返回值有返回值未知参数数量多返回值
  函数的作用域函数的进阶参数为函数匿名函数闭包闭包的练习
  
 
 
 
函数分类
 
没有参数, 没有返回值
 
func a() {}
 
有参数, 没有返回值
 
func b(a 
int, b 
string) {}
func c(a
, b 
string) {}
 
有返回值
 
func d(a 
int, b 
int) (ret 
int) { 
	
	ret 
= a 
+ b
	
return 
}
func e(a 
int) int {
	return 1
}
 
未知参数数量
 
func cal(a 
...int) int {
	ret 
:= 0
	for _,v 
:= range a 
{
		ret 
+= v
	
}
	return ret
}
func cal2(a 
int, b 
...int) int {
	ret 
:= a
	
for _,v 
:= range b 
{
		ret 
+= v
	
}
}
 
多返回值
 
func cal(a
, b
, int) (int, int) {
	sum 
:= a
+b
	sub 
:= a
-b
	
return sum
, sub
}
 
 
函数的作用域
 
package main
import "fmt"
var a 
= 100 
var b 
= 99
func funcA() {
	
	a 
:= 101
	fmt
.Println(a
, b
) 
}
func main() {
	funcA() 
}
 
 
函数的进阶
 
参数为函数
 
package main
import "fmt"
func sum(x
, y 
int) int {
	return x 
+ y
}
func sub(x
, y 
int) int {
	return x 
- y
}
func cal(x
, y 
int, z 
func(int, int) int) int { 
	return z(x
, y
)
}
func main() {
	ret1 
:= cal(1, 2, sum
) 
	fmt
.Println(ret1
)
	
	ret2 
:= cal(2, 1, sub
)
	fmt
.Println(ret2
)
}
 
 
匿名函数
 
noneFunc 
:= func() {
	fmt
.Println("noneFunc")
}
noneFunc()
func() {
	fmt
.Println("noneFunc")
}()
 
 
闭包
 
package main
func a(name 
string) func() {
	return func() {
		fmt
.Println("hello", name
)
	}
}
func main() {
	
	a("Tim")()
	
	r 
:= a("Tim")
	r()
}
 
 
闭包的练习
 
package main
import (
	"fmt"
	"strings"
)
func check(filename
, suffix 
string) string {
	if !strings
.HasSuffix(filename
, suffix
) {
		filename 
= filename 
+ ".txt"
	}
	return filename
}
func check1(filename
, suffix 
string) func() string {
	return func() string {
		if !strings
.HasSuffix(filename
, suffix
) {
			filename 
= filename 
+ ".txt"
		}
		return filename
	
}
}
func main() {
	
	fmt
.Println(check("at", "txt"))
	fmt
.Println(check1("abc", ".txt")())
}