函数声明

函数声明包括函数名,形参列表,返回值列表(可选),函数体组成

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语言学习-函数的更多相关文章

  1. Go语言学习——函数二 defer语句

    函数 package main import "fmt" // 函数:一段代码的封装 func f1(){ fmt.Println("Hello 中国!") } ...

  2. R语言学习 第四篇:函数和流程控制

    变量用于临时存储数据,而函数用于操作数据,实现代码的重复使用.在R中,函数只是另一种数据类型的变量,可以被分配,操作,甚至把函数作为参数传递给其他函数.分支控制和循环控制,和通用编程语言的风格很相似, ...

  3. Go语言学习笔记七: 函数

    Go语言学习笔记七: 函数 Go语言有函数还有方法,神奇不.这有点像python了. 函数定义 func function_name( [parameter list] ) [return_types ...

  4. C语言学习<输入输出函数,函数的调用>

    #include <stdio.h> /* 输入输出函数的学习 函数的调用 2017.05.25 soulsjie */ //输入连个数字求最大值 void main(){ int Max ...

  5. 大一C语言学习笔记(5)---函数篇-定义函数需要了解注意的地方;定义函数的易错点;详细说明函数的每个组合部分的功能及注意事项

    博主学习C语言是通过B站上的<郝斌C语言自学教程>,对于C语言初学者来说,我认为郝斌真的是在全网C语言学习课程中讲的最全面,到位的一个,这个不是真不是博主我吹他哈,大家可以去B站去看看,C ...

  6. C语言学习019:函数指针

    在C语言中,函数名也是指针变量,比如创建了一个add(int n,int m)的函数的同时也创建了一个名为add的指针变量,因此我们可以把函数指针当作一种类型为它赋值.当作参数传递等操作 C语言创建函 ...

  7. 【学习笔记】【C语言】函数

    一. 什么是函数 任何一个C语言程序都是由一个或者多个程序段(小程序)构成的,每个程序段都有自己的功能,我们一般称这些程序段为“函数”.所以,你可以说C语言程序是由函数构成的. 比如你用C语言编写了一 ...

  8. C语言学习笔记 (009) - 对函数的进一步讨论

    一.给main函数传参: # include <stdio.h> int main(int argc,char **argv){ printf(]); ; } 二.指向函数指针变量的定义 ...

  9. c语言学习笔记(8)——函数

    学完c语言的函数可以理解面向过程的语言 函数是c语言的重点 一.为什么需要函数? 1.避免了重复性操作 2.有利于程序的模块化(每一个功能可以用不同函数去实现) 二.什么叫做函数? 逻辑上:能够完成特 ...

随机推荐

  1. Android 中查看内存的使用情况集常用adb命令

    http://blog.csdn.net/bigconvience/article/details/35553983 http://blog.csdn.net/duantihi/article/det ...

  2. android handlerThread

    一.handlerThread产生的背景

  3. setInterval的用法

    function show1(){    console.log("每隔1秒显示一次");}function show2(str){    console.log(str);}se ...

  4. kafka系列一、kafka安装及部署、集群搭建

    一.环境准备 操作系统:Cent OS 7 Kafka版本:kafka_2.10 Kafka官网下载:请点击 JDK版本:1.8.0_171 zookeeper-3.4.10 二.kafka安装配置 ...

  5. Python3学习笔记15-迭代器与生成器

    生成器 如果创建一个有很多元素的列表,但是只需要访问前几个元素,后面的元素占着的空间就白白浪费了 在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间. 在Pytho ...

  6. 如何查看centos系统cpu/内存使用情况

    1.查看硬盘 [mushme@investide ~]$ df -ah 文件系统              容量  已用 可用 已用% 挂载点 /dev/cciss/c0d0p1     123G   ...

  7. 一台电脑,两个及多个git账号配置

    1. 生成两[三]个ssh公钥私钥 方法参照:http://www.cnblogs.com/fanbi/p/7772812.html第三步骤 假定其中一个是id_rsa, 另一个时id_rsa_two ...

  8. jquery之源码

    1.插件扩展机制 所有的Jquery代理对象的实例,都是扩展自$.fn对象的 意味着只要我们继续扩展$.fn这个对象的功能,就相当于扩展了所有的Jquery代理对象的实例的功能 代码 var $bod ...

  9. Oracle12c 性能优化攻略:攻略1-1:创建具有最优性能的数据库

    一:章节前言 本章着眼于影响表中数据存储性能的数据库特性. 表的性能部分取决于在创建之前所应用的数据库特性.例如:在最初创建数据库时采用的物理存储特性以及相关的表空间都会在后来影响表的性能.类似地,表 ...

  10. python下图像读取方式以及效率对比

    https://zhuanlan.zhihu.com/p/30383580 opencv速度最快,值得注意的是mxnet的采用多线程读取的方式,可大大加速