golang 包和函数小结

go的每一个文件都是属于一个包的,也就是说go是以包的形式来管理文件和目录结构的

包的作用:

区分相同名字的函数、变量和标识符

当程序文件很多时,可以很好的管理项目

控制函数变量等的访问范围,即作用域

 

函数说明:

func 函数名(参数列表)(返回值类型列表){

语句。。。

return 返回值列表

}

1.如果返回多个值时,在接受时,可以用_ 表示占位忽略该值

2 如果返回值列表只有一个,返回值类型列表可以不写

3.函数的返回值类型列表,可以提前声明好返回参数名

例如:func get()(a int, b int){...}参数名要么都写,要么都不写

4.在go中,函数也是一种数据类型

func count(n1 int,n2 int)int{
	return n1 + n2
}
	//函数作为数据类型
	f := count
	res := f(1,2)
	fmt.Printf("1+2=%v\n",res)// 输出1+2=3

 5.函数既然是一种数据类型,当然可以作为参数使用

func cal(f func(int,int)int, n1 int,n2 int)int{
	return f(n1,n2)
}
	//函数作为参数
	res = cal(count,10,20)
	fmt.Printf("10+20=%v\n",res)// 输出10+20=30

 6.可以将func(int,int)int使用type来重定义一个简化的类型名

type funcType func(int,int)int

//func cal(f func(int,int)int, n1 int,n2 int)int{
func cal(f funcType, n1 int,n2 int)int{
	return f(n1,n2)
}

 7.Go支持可变参数

func(args... interface{}){...}//支持0到多个参数

func(arg0 interface{}.args... interface{}){...}//支持1到多个参数

其中args是切片,可以用for range遍历

func sum(args... int) int{
	var res int
	for _,v := range args{
		res += v
	}
	return res
}

	res = sum(1,2,3,4,5,6,7)
	fmt.Println("sum 1-7 is",res) //sum 1-7 is 28

 8. 匿名函数使用(定义函数是只想使用一次,那就在需要调用的地方定义)

	//匿名函数
	res = func(args... int)int{
		var res int
		for _,v := range args{
			res += v
		}
		return res
	}(1,2,3,4,5)

	fmt.Println("sum 1-5 is",res) //sum 1-5 is 15

 同时也可以作为变量使用

	//匿名函数
	f2 := func(args... int)int{
		var res int
		for _,v := range args{
			res += v
		}
		return res
	}

	fmt.Println("sum 1-5 is",f2(1,2,3,4,5)) //sum 1-5 is 15

  9.闭包:闭包就是一个函数和与其相关的应用环境组合的一个整体(实体)

func AddUpper() func(int)int{
	var n int = 10 //相当于一个环境变量
	return func(x int)int{
		n += x
		return n
	}
}
	//闭包使用
	f3 := AddUpper()//f3 其实就是AddUpper的返回值的那个函数的实体
	/*
		n 已经被初始化为10
		f3 = func(x int)int{
		n += x //每一次调用f3 n就回增加
		return n
		}
	*/
	fmt.Println("AddUpper(100)= ",f3(100))//output : AddUpper(100)=  110
	fmt.Println("AddUpper(100)= ",f3(100))//output : AddUpper(100)=  210
	fmt.Println("AddUpper(100)= ",f3(100))//output : AddUpper(100)=  310

 

posted @ 2020-04-02 17:43  醉深梦始  阅读(257)  评论(0)    收藏  举报