函数声明

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

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. PHP - CentOS下开发运行环境搭建(Apache+PHP+MySQL+FTP)

    本文介绍如何在 Linux下搭建一个 PHP 环境.其中 Linux 系统使用是 CentOS 7.3,部署在阿里云服务器上.   1,连接登录服务器 拿到服务器的 ip.初始密码以后.我们先通过远程 ...

  2. High level GPU programming in C++

    https://github.com/prem30488/C2CUDATranslator http://www.training.prace-ri.eu/uploads/tx_pracetmo/GP ...

  3. linux统计某个特定文件名的大小总和【原创】

    [hch@EAISRVBJ2 log]$find ./ -name "test_chs_00*"|xargs du -ck|grep total|awk 'BEGIN{sum=0} ...

  4. nodejs 在线学习课堂

    http://ww***/class/5359f6f6ec7452081a7873d8

  5. mysql通过centos本地命令行还原数据库出现乱码问题

    将sql文件上传到centos系统中,还原mysql数据库,发现是乱码 mysql -h10.11.8.62 -uroot -p dbtest </data/dbsql/dbtest.sql 数 ...

  6. S5PV210串口

    串口设置之输入输出字符 S5PV210 UART相关说明        通用异步收发器简称UART,即UNIVERSAL ASYNCHRONOUS RECEIVER AND TRANSMITTER,它 ...

  7. pyspark遇到报错:_PYSPARK_DRIVER_CONN_INFO_PATH

    1.  环境 : centos,启动pyspark,执行如下python命令: import pyspark from pyspark import SparkContext from pyspark ...

  8. 实现自己的Koa2

    这部分的代码在https://github.com/zhaobao1830/koa2中demo文件夹中 Koa就是基于node自带的http模块,经过封装,监听端口,实现ctx(上下文)管理,中间件管 ...

  9. vue系列之生命周期

    代码: <body> <div id="app"> {{message}} </div> <script type="text/ ...

  10. Slave SQL_THREAD如何重放Relay log

    复制的介绍: 根据日志定义的模式不一样,可以分为:Statement(SBR)模式,Row(RBR)格式或者是MIXED格式,记录最小的单位是一个Event,binlog日志前4个字节是一个magic ...