挥一挥衣袖,不带走一片云彩
在大部分人的眼中,编程可能是一份严谨的脑力劳动,可在我看来编程工作也可以认为是一项创造艺术的工作,如果总是把掌握多少编程语言的知识点作为衡量的目标,那么从事这项工作的就失去了创造的意义,针对一部分编程水平较高的工程师而言,如果日常的工作一味的从事低端、重复的体力编程工作,随着时间的推移,大概率会对眼前的工作产生倦意,那么最后的结果不是从眼前的这家公司离开就是投向一个新的行业领域。在编程的这个领域,大部分的从业者日常的工作基本围绕着应用软件的研发而展开,少部分可能从事研发一些较为底层的系统软件。但现实是无论是应用层软件还是系统软件的研发人员在特殊国情的包裹下,从业者无不是在有限的职业时间内为自己谋取最大的利益,可能昨天身边坐着的同事,明天就可能挥一挥衣袖,不带走一片云彩。
函数
1、定义:函数是一块执行特定任务的代码的集合。
go语言中函数的申明通用语法如下:
func functionname(parametername type) return type {
//函数体
}
2、函数的分类
go语言中的函数可划分为三类:普通的带有名字的函数、匿名函数或者lambda函数、方法
//普通函数
func greeting() {
//函数体
}
//匿名函数
func (parametername type) {
//函数体
}
//方法
func (receivename receivetype) functionname() {
//函数体
}
3、函数的参数和返回值
函数能够接收参数供自己使用,也可以返回一个或者多个值,与其他主流编程语言所不同,go语言能够进行多值返回,也可以安值或者引用进行参数传递。
//安值传递
func add(a, b int) int {
return a + b
}
//按指针传递
func add(a, b int, reply *int) {
*reply = a * b
}
4、函数中传递变长参数
//变参函数
func functionname(a, b, args ... type) {
//函数体
}
//举个栗子
func main() {
x := min(1, 3, 2, 0)
fmt.Printf("The minimum is: %d\n", x)
slice := []int{7,9,3,5,1}
x = min(slice...)
fmt.Printf("The minimum in the slice is: %d", x)
}
func min(s ...int) int {
if len(s)==0 {
return 0
}
min := s[0]
for _, v := range s {
if v < min {
min = v
}
}
return min
}
5、递归函数
定义:所谓递归简单而言就是自己调用自己。
//经典案例
func main() {
result := 0
for i := 0; i <= 10; i++ {
result = fibonacci(i)
fmt.Printf("fibonacci(%d) is: %d\n", i, result)
}
}
func fibonacci(n int) (res int) {
if n <= 1 {
res = 1
} else {
res = fibonacci(n-1) + fibonacci(n-2)
}
return
}
6、函数作为参数
函数也可以作为参数进行传递,然后在其他函数的内部进行调用,一般称之为回调。
//举个栗子
func main() {
callback(1, Add)
}
func Add(a, b int) {
fmt.Printf("The sum of %d and %d is: %d\n", a, b, a+b)
}
func callback(y int, f func(int, int)) {
f(y, 2) // this becomes Add(1, 2)
}
7、闭包
闭包:当一个函数所访问的变量定义在函数的外部时,就称这样的匿名函数为闭包。
//举个栗子
func main() {
a := 5
func() {
fmt.Println("a =", a)
}()
}
8、内置函数
go语言中拥有一些不需要导入操作就可以使用的内置函数常见的内置函数有:close、len、make、cap、new、 append、copy、panic、recover...
总结
函数作为作为编程语言中重要的一环,可以说如果掌握好了函数的相关知识,那么基本上这门语言的学习已经成功了一大半,剩下的学习基本上是围绕这这门编程原因特有的特点而展开,或者围绕着这门语言的生态进行学习,针对go这样的编程语言来讲,函数的相关知识点是必须要掌握的,如果还没有掌握的扎实,建议还是先夯实基础,然后在进行后续的学习。