网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
ret += arg
}
return
}
fmt.Println(funcSum1(s)) // 10
返回值
函数可以返回一个值,也可以返回多个值。
// 多返回值
func swap(x, y int) (int, int) {
return y, x
}
// 多返回值
fmt.Println(swap(1, 2)) // 2 1
如果有不需要的返回值,使用 _
将其忽略:
x, _ := swap(1, 2)
fmt.Println(x) // 2
支持命名返回值。使用命名返回值的话,直接使用 return
即可,后面不用跟返回值名。
前面不定参数的例子就是通过这种方式来写的:
func funcSum(args …int) (ret int) {
for _, arg := range args {
ret += arg
}
return
}
再来对比一下,如果不是采用命名返回值,应该怎么写:
func funcSum(args …int) int {
ret := 0
for _, arg := range args {
ret += arg
}
return ret
}
匿名函数
匿名函数是指不需要定义函数名的一种函数实现方式。可以直接赋值给函数变量,可以当作实参,也可以作为返回值,还可以直接调用。
// 匿名函数
sum := func(a, b int) int { return a + b }
fmt.Println(sum(1, 2)) // 3
作为参数:
// 匿名函数作为参数
func funcSum2(f func(int, int) int, x, y int) int {
return f(x, y)
}
fmt.Println(funcSum2(sum, 3, 5)) // 8
作为返回值:
// 匿名函数作为返回值
func wrap(op string) func(int, int) int {
switch op {
case “add”:
return func(a, b int) int {
return a + b
}
case “sub”:
return func(a, b int) int {
return a + b
}
default:
return nil
}
}
f := wrap(“add”)
fmt.Println(f(2, 4)) // 6
直接调用:
// 直接调用
fmt.Println(func(a, b int) int { return a + b }(4, 5)) // 9
总结
函数在之前的文章中已经使用过了,这篇再系统全面总结一下都有哪些需要注意的点。
包括函数定义,参数,返回和匿名函数。其实还有一个闭包,通过匿名函数来实现。但我感觉闭包使用的并不是很多,就没有写,感兴趣的同学可以自己搜搜看。
函数可以把复杂的程序分成更小的模块,使程序可读性更强,复用性更高,维护性更好。在开发过程中一定要具备将特定功能抽象成函数的能力,而不是将所有代码都写在一起,代码堆成一坨。这样的代码除了不好维护,重点是时间长了自己都不想看。
文章中的脑图和源码都上传到了 GitHub,有需要的同学可自行下载。
地址: https://github.com/yongxinz/gopher/tree/main/sc
Go 专栏文章列表:
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
1715363785684)]
[外链图片转存中…(img-RXeUwpQl-1715363785685)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!