go语言学习-函数
函数声明
函数声明包括函数名,形参列表,返回值列表(可选),函数体组成
func test(parameters) (returns) {
// ...
}
其中 parameters 就是函数的形参列表,描述了函数的参数名和参数类型,可以没有参数但是这个括号不可以省略; returns就是返回值列表,描述了函数返回值的变量名(可选)和类型, 如果函数返回一个没有名字的参数或者没有返回值,就可以不要括号
这里的参数和返回值的类型都不能省略,不过可以简写(如果有的话)
例如:
func add(x int, y int) int {
return x + y;
}
// 可以简写成
func add(x, y int) int {
return x + y;
}
这里需要注意的是函数调用都必须按照声明顺序为所有的参数提供实参.并且Go语言的函数没有默认值,也不能通过参数名指定形参,因此形参和返回值的变量名对于函数调用者是没有用处的,只是在函数内部使用
参数的传递方式
如果实参是引用类型,如指针,slice,map,function,channel等类型,在函数内部进行修改,就会影响到传入的实参;
其他类型的实参是传递的是值的拷贝,对其修改不会影响函数外部。
变长参数
语法:
func test(x int, ns ...int) {
//...
}
就是在参数类型前面加上三个点 “…”,这里需要注意的地方是这个变参本质上是一个slice,可在函数内部直接访问,并且一个函数只能有一个变长参数,并且只能在最后的位置
例如:
func add(x int, nums ...int) int {
for i := range nums {
x += nums[i]
}
return x
}
上面就是实现n个数的加法
同时在调用变参函数是,也可以将slice作为实参,不过需要展开,就是在slice后面加 “…”
调用方式:
add(10, 20, 30) // 60
// 也可以使用slice
s := []int{10, 20, 40}
add(10, ...s) // 80
多返回值
Go语言的函数支持多个返回值
func test() (int, int) {
return 1, 2
}
此时就返回两个值,就需要有两个变量来接收,也可以使用 _ 接收来忽略某个参数
同时我们还可以为返回值起个名字
func test() (x int, y, int) {
x = 10
y = 10
return
}
此时就可以使用return 隐式的返回参数了,会自动返回对应名字的参数,注意这里的返回值的名字不会影响函数外部.
匿名函数
go也支持匿名函数,可以直接赋值给变量,或者当做结构体的字段等
var add = func(x, y int) {
return x + y;
}
// 然后就可以使用变量名调用
add(10, 20) // 30
函数的特点总结
- 函数声明包括函数名,形参列表,返回值列表(可选),函数体组成
- 不支持参数默认值
- 如果实参是引用类型,如指针,slice,map,function,channel等类型,进行修改,就回影响实参;
- 其他类型的实参是传递的是值的拷贝,对其修改不会影响函数外部
- 支持变长参数
- 支持多返回值
go语言学习-函数的更多相关文章
- Go语言学习——函数二 defer语句
函数 package main import "fmt" // 函数:一段代码的封装 func f1(){ fmt.Println("Hello 中国!") } ...
- R语言学习 第四篇:函数和流程控制
变量用于临时存储数据,而函数用于操作数据,实现代码的重复使用.在R中,函数只是另一种数据类型的变量,可以被分配,操作,甚至把函数作为参数传递给其他函数.分支控制和循环控制,和通用编程语言的风格很相似, ...
- Go语言学习笔记七: 函数
Go语言学习笔记七: 函数 Go语言有函数还有方法,神奇不.这有点像python了. 函数定义 func function_name( [parameter list] ) [return_types ...
- C语言学习<输入输出函数,函数的调用>
#include <stdio.h> /* 输入输出函数的学习 函数的调用 2017.05.25 soulsjie */ //输入连个数字求最大值 void main(){ int Max ...
- 大一C语言学习笔记(5)---函数篇-定义函数需要了解注意的地方;定义函数的易错点;详细说明函数的每个组合部分的功能及注意事项
博主学习C语言是通过B站上的<郝斌C语言自学教程>,对于C语言初学者来说,我认为郝斌真的是在全网C语言学习课程中讲的最全面,到位的一个,这个不是真不是博主我吹他哈,大家可以去B站去看看,C ...
- C语言学习019:函数指针
在C语言中,函数名也是指针变量,比如创建了一个add(int n,int m)的函数的同时也创建了一个名为add的指针变量,因此我们可以把函数指针当作一种类型为它赋值.当作参数传递等操作 C语言创建函 ...
- 【学习笔记】【C语言】函数
一. 什么是函数 任何一个C语言程序都是由一个或者多个程序段(小程序)构成的,每个程序段都有自己的功能,我们一般称这些程序段为“函数”.所以,你可以说C语言程序是由函数构成的. 比如你用C语言编写了一 ...
- C语言学习笔记 (009) - 对函数的进一步讨论
一.给main函数传参: # include <stdio.h> int main(int argc,char **argv){ printf(]); ; } 二.指向函数指针变量的定义 ...
- c语言学习笔记(8)——函数
学完c语言的函数可以理解面向过程的语言 函数是c语言的重点 一.为什么需要函数? 1.避免了重复性操作 2.有利于程序的模块化(每一个功能可以用不同函数去实现) 二.什么叫做函数? 逻辑上:能够完成特 ...
随机推荐
- adb shell dumpsys meminfo [packagename] 输出内容的含义
Private Dirty:私有的脏内存页(还在使用中)的大小: Private Clean:私有的干净内存页(现在未使用了)的大小: 以上这二者相加,便是应用曾经申请过的内存空间大小.Priva ...
- Maven私服
1.关于中央仓库注意事项地址: 目前来说: http://repo1.maven.org/maven2/是真正的 Maven 中央仓库的地址,该地址内置在Maven 的源码中,其他的都是镜像.索引: ...
- 如何调整cell的大小
一般情况下,我们使用tableview的时候从来没有设置过cell的大小(w,h).位置(x,y)等,而是系统直接给我们自动生成,但是有的时候我们可能会改动cell的大小及位置,比如:在适配ios6跟 ...
- CMake 示例
1.需求 [1].使用第三方动/静太库 [2].本身代码部分编译为动/静态库 [3]多项目管理 原文转自:http://blog.csdn.net/shuyong1999/article/detail ...
- python之模块array
>>> import array#定义了一种序列数据结构 >>> help(array) #创建数组,相当于初始化一个数组,如:d={},k=[]等等 array( ...
- K中心点算法之PAM
一.PAM聚类算法: 选用簇中位置最中心的对象,试图对n个对象给出k个划分:代表对象也被称为是中心点,其他对象则被称为非代表对象:最初随机选择k个对象作为中心点,该算法反复地用非代表对 ...
- nodejs async series 小白向
async.series({ flag1:function(done){ //flag1 是一个流程标识,用户自定义 //逻辑处理 done(null,"返回结果&qu ...
- 如何用nodejs创建一个webservice
Posted on March 25th, 2012 under Express.js, Node.jsTags: Express.js, git, GitHub, node.js Looking f ...
- __dirname与__filename
(1) __filename变量 node.js中,在任何模块文件内部,可以使用__filename变量获取当前模块文件的带有完整绝对路径的文件名. 在应用程序根目录下新建app.js文件,其中代码如 ...
- Centos7中查看IP并启动网卡
1.开机,输入用户名root和密码 2.查看IP地址:ip addr 3.使用vi编辑器打开配置文件,注意vi后面有空格: vi /etc/sysconfig/network-scripts/ifcf ...