Golang从入门到精通(十):Golang函数
来源:互联网 发布:淘宝店铺购物车营销 编辑:程序博客网 时间:2024/06/05 08:48
函数
函数是结构化编程中最小的模块单元,日常开发过程中,将复杂的算法过程分解为若干个小任务(代码块),使程序的结构性更清晰,程序可读性提升,易于后期维护和让别人读懂你的代码。编写多个函数的主要目的是将一个需要很多行代码的复杂问题分解为一系列简单的任务(那就是函数)来解决。在实际编程中,我们把重复性的任务抽象成一个函数。
和所有的编程语言一样,Go语言支持各种风格的函数。在Go语言中,当函数执行到代码块最后一行}
之前或者return
语句的时候会退出,其中 return 语句可以带有零个或多个参数;这些参数将作为返回值供调用者使用。简单的 return 语句也可以用来结束 for 死循环,或者结束一个Go协程(goroutine)
。
定义语法
Go语言中函数基本组成:关键字func、函数名、参数列表、返回值、函数体和返回语句。
语法如下:
func 函数名(参数列表) (返回值列表) { // 函数体}
这里需要强调的是,Go语言函数的返回值类型和变量定义的数据类型一样,都要遵循Go语言的“后置原则”放在后面,这一点和C语言函数定义有显著不同。
另外,Go语言函数定义中如果参数列表中若干个相邻参数的类型相同,则可以在参数列表中省略前面的变量类型声明。
func Add(a, b int) int { //这里a和b都是int类型 // 函数体}
最后,Go语言函数定义中左花括号的位置被强制规范,如果左花括号放置不规范,golang编译器会报编译错误。
//错误!!!左括号必须紧跟在括号后面func hello(){ //左括号不能另起一行}
多值返回
Go语言的函数可以返回不止一个结果,即支持“多值返回”。
Go语言函数多值返回一般用于处理错误。比如在IO操作时候,不一定每次都能成功:可能文件不存在或者磁盘损坏无法读取文件。所以一般在函数调用发生错误时返回一个附加的结果作为错误值,习惯上将错误值作为最后一个结果返回。
func SumProductDiff(i, j int) (int, int, int) { return i+j, i*j, i-j}
不定参数
如果你对Python比较熟悉,你会知道Python函数参数个数可以是不确定的。和Python类似,Go语言函数也支持可变的参数个数。
在参数列表的最后类型名称前面使用省略号“…”来表示声明一个变长函数,调用该函数的时候可以传递该类型任意数目的参数。
func 函数名(args ...Type) (返回值列表) { // 函数体}
代码示例
我们在这里写三个函数,依次展示出函数最常态模样,多值返回和不定参数。
package mainimport( "fmt")func Add(i int, j int) (int) { //常规函数 return i+j}func Add_Multi_Sub(i, j int) (int, int, int) { //多值返回 return i+j, i*j, i-j}func sum(nums ...int) { //变参函数 total := 0 for _, num := range nums { total += num } fmt.Println(total)}func main(){ a, b := 2,3 arr := []int{1, 2, 3} var c int = Add(a,b) d,e,f := Add_Multi_Sub(a,b) fmt.Println(c,d,e,f) sum(arr...) //注意传参形式}
- Golang从入门到精通(十):Golang函数
- Golang从入门到精通(二十):Golang错误处理之error
- Golang从入门到精通(一):Golang介绍
- Golang从入门到精通(三):Golang数据类型
- Golang从入门到精通(八):Golang数组
- Golang从入门到精通(九):Golang字符串
- Golang从入门到精通(十一):Golang方法
- Golang从入门到精通(十四):Golang结构体
- Golang从入门到精通(十五):Golang指针
- Golang从入门到精通(十六):Golang接口
- Golang从入门到精通(十七):Golang反射
- Golang从入门到精通(二):Golang开发环境配置
- Golang从入门到精通(四):Golang变量定义和初始化
- Golang从入门到精通(五):Golang控制语句之if/else
- Golang从入门到精通(六):Golang控制语句之for
- Golang从入门到精通(七):Golang控制语句之switch
- Golang从入门到精通(十二):Golang复合数据之slice
- Golang从入门到精通(十三):Golang复合数据之map
- 349. Intersection of Two Arrays
- 20170913_chr_loginchr Struts2实现简单登陆功能
- .net写sqlserver分组聚合函数
- 如何选择机器学习算法?
- 第15周多线程_猜数字游戏
- Golang从入门到精通(十):Golang函数
- 如何理解Spring 的配置文件
- Python运维基础(4)正则表达式
- FreeBASIC学习笔记——第03章 运算符与表达式
- springcloud-zuul路由的使用
- 坑2:1.1.1将文本切分为语句
- altium designer布线调整时不自动删除旧线
- Centos7 搭建LAMP 环境
- HDOJ1785 You Are All Excellent