07 - Go 函数(上):定义、参数、返回值与实战技巧

张开发
2026/5/4 7:30:50 15 分钟阅读
07 - Go 函数(上):定义、参数、返回值与实战技巧
文章目录 07 - Go 函数上定义、参数、返回值与实战技巧为什么要使用函数函数的基本定义参数详解必须掌握多参数简写不同类型参数参数是值传递重点返回值详解核心重点单返回值多返回值Go 特色忽略返回值返回 error开发必备命名返回值面试高频可变参数...实战案例必须掌握 求数组最大值 封装计算逻辑小结建议收藏⭐ 最后说一句 07 - Go 函数上定义、参数、返回值与实战技巧在学习 Go 语言的过程中函数Function是必须牢牢掌握的核心基础之一。无论是日常开发、框架源码阅读还是面试函数都是高频出现的知识点。很多人刚学时觉得函数很简单但一到实际使用就会遇到各种问题多返回值怎么优雅使用命名返回值到底有什么用...可变参数是怎么回事为什么 Go 推荐返回 error 本文带你从 0 到 1 吃透 Go 函数基础并配合实战案例让你真正掌握。为什么要使用函数在没有函数之前代码可能是这样的packagemainimportfmtfuncmain(){a:10b:20fmt.Println(ab)c:30d:40fmt.Println(cd)}输出30 70 问题代码重复可读性差难以维护✅ 使用函数优化packagemainimportfmtfuncadd(a,bint)int{returnab}funcmain(){fmt.Println(add(10,20))fmt.Println(add(30,40))}输出30 70 优势代码复用逻辑清晰易于维护函数的基本定义Go 中函数定义格式如下func函数名(参数列表)返回值类型{// 函数体}示例funcadd(aint,bint)int{// 因为a,b都是int所以可以简写func add(a, b int) intreturnab}调用方式result:add(1,2)fmt.Println(result)// 输出结果3参数详解必须掌握多参数简写Go 支持相同类型参数的简写funcadd(a,bint)int{returnab} 等价于funcadd(aint,bint)int不同类型参数funcprintInfo(idint,namestring){fmt.Println(id,name)}参数是值传递重点packagemainimportfmtfuncchange(aint){fmt.Println(three:,a)a100fmt.Println(four:,a)}funcmain(){x:10fmt.Println(one:,x)change(x)fmt.Println(two:,x)}输出one: 10 three: 10 four: 100 two: 10 说明Go 默认是值传递函数内部修改不会影响外部变量返回值详解核心重点单返回值packagemainimportfmtfuncsum(a,bint)int{returnab}funcmain(){fmt.Println(sum(1,2))}输出3多返回值Go 特色funccalc(a,bint)(int,int){returnab,a-b}调用x,y:calc(10,5)fmt.Println(x,y)忽略返回值x,_:calc(10,5)_表示忽略变量非常常用packagemainimportfmtfunccalc(a,bint)(int,int){sum:ab diff:a-breturnsum,diff}funcmain(){x,y:calc(5,10)fmt.Println(x,y)z,_:calc(5,10)fmt.Println(z)}输出15 -5 15返回 error开发必备Go 中常见写法funcdivide(a,bint)(int,error){ifb0{return0,fmt.Errorf(除数不能为0)}returna/b,nil}调用res,err:divide(10,0)iferr!nil{fmt.Println(发生错误,err)return}else{fmt.Println(结果是,res)} 这是 Go 的错误处理标准模式packagemainimportfmtfuncdivide(a,bint)(int,error){ifb0{return0,fmt.Errorf(除数不能为0)}returna/b,nil}funcmain(){res,err:divide(10,0)iferr!nil{fmt.Println(发生错误,err)return}else{fmt.Println(结果是,res)}}输出错误 除数不能为0命名返回值面试高频packagemainimportfmtfunccalc(a,bint)(sumint,diffint){sumab diffa-breturn//看这里只有一个return}funcmain(){x,y:calc(5,10)fmt.Println(x,y)}输出15 -5 特点返回值提前声明return可以省略变量⚠️ 注意不要滥用functest()(resint){res100return} 虽然简洁但可读性可能变差团队开发需谨慎可变参数…当参数个数不固定时可以使用...packagemainimportfmtfuncsum(nums...int)int{total:0for_,v:rangenums{totalv}returntotal}funcmain(){fmt.Println(sum():,sum())fmt.Println(sum(1):,sum(1))fmt.Println(sum(1, 2):,sum(1,2))fmt.Println(sum(1, 2, 3):,sum(1,2,3))}输出sum(): 0 sum(1): 1 sum(1, 2): 3 sum(1, 2, 3): 6 本质nums是一个 slice切片实战案例必须掌握 求数组最大值packagemainimportfmtfuncmax(nums...int)int{iflen(nums)0{return0}maxVal:nums[0]for_,v:rangenums{ifvmaxVal{maxValv}}returnmaxVal}funcmain(){fmt.Println(max())fmt.Println(max(1))fmt.Println(max(1,2))fmt.Println(max(1,2,3))fmt.Println(max(1,2,3,4))fmt.Println(max(50,66,55,77,99,65,22,35,35,69,5,65,485,548))}输出0 1 2 3 4 548 封装计算逻辑packagemainimportfmtfunccalc(a,bint)(int,int,int,int){returnab,a-b,a*b,a/b}funcmain(){sum,sub,mul,div:calc(10,2)fmt.Println(Sum:,sum)fmt.Println(Subtraction:,sub)fmt.Println(Multiplication:,mul)fmt.Println(Division:,div)}输出Sum: 12 Subtraction: 8 Multiplication: 20 Division: 5小结建议收藏⭐本文我们系统学习了 Go 函数的基础知识✅ 函数的定义与调用✅ 参数写法简写 / 多类型✅ 返回值单返回 / 多返回✅ error 处理规范开发必备✅ 命名返回值面试重点✅ 可变参数...的使用 最后说一句函数看起来简单但它是 Go 后续学习的基础接口interface并发goroutine中间件设计都会用到函数的高级特性

更多文章