函数就是一块执行特定任务的代码,在输入源的基础上通过一些算法生成预期的输出。

一、函数的声明

Go 语言中的函数声明语法如下:

func 函数名(参数名 类型,参数名 类型)(返回值1类型,返回值2类型){
函数体内容
return 返回值1,返回值2
}

注意:函数中的参数列表和返回值不是必须的

二、函数的定义方式

1、有参数无返回值

func add(a int, b int) {
fmt.Println(a + b)
}

2、有参数无返回值,有多个相同类型参数

func add(a, b int) {
fmt.Println(a + b)
}

3、有参数无返回值,有多个相同类型参数,也有不同类型

func add(a, b int, msg string) {
fmt.Println(a + b)
fmt.Println(msg)
}

4、多个参数,一个返回值

func add(a, b int) int {
return a + b
}

5、多个参数,多个返回值

func add(a, b int) (int, int) {
return a + b, a * b
}

6、命名返回值

func add(a, b int) (c int, d int) {
c = a + b
d = a * b
return // 这个时候不需要在写c,d了
}

7、函数返回值为函数(函数是一等公民,函数可以赋值给变量)

func test() func() {
return func() {
fmt.Println("我是返回函数")
}
}

8、函数返回值为函数,返回的函数带参数

func test() func(msg string) {	// 类型只要有不一样的地方,就不是一个类型
return func(msg string) {
fmt.Println(msg)
}
}

9、函数返回值为函数,返回的函数带参数,带返回值

func test() func(a,b int) int{
return func(a,b int) int {
return a+b
}
}

10、函数参数为函数类型,返回值为带参数,带返回值的函数类型

package main

import "fmt"

func main() {
var c = f
a,b := test(c)(3,4)
fmt.Println(a, b)
} func test(f func()) func(a, b int) (int, int) {
return func(a, b int) (int, int) {
f()
return a + b, a * b
}
} func f() {
fmt.Println("我是函数参数")
}

11、闭包函数:定义在函数内部,对外部作用域有引用

闭包函数就是多了一种函数传参的方法

func test(age int) func()  {
a := func() {
fmt.Println(age)
}
return a // a就是闭包函数
}

12、匿名函数(定义在函数内部的函数,不能是有名函数,头等函数)

var a func()
a = func (){
fmt.Println("我是匿名函数")
}
a()

13、空白符( _ 在Go中被用作空白符,可以用来表示任何类型的任何值)

package main

import "fmt"

func main() {
_, b := test(3, 5)
fmt.Println(b) // 返回 15
} func test(a, b int) (int, int) {
return a + b, a * b
}

Go语言之函数的更多相关文章

  1. C语言pow函数编写

    C语言pow函数编写 #include<stdio.h> double chaoba(double f,double q); //声明自定义函数 void main(void) { dou ...

  2. C语言-自定义函数

    C语言自定义函数 --1-- 自定义函数定义 1.1 无参无返回值函数 1.2 无参有返回值函数 1.3 有参无返回值函数 1.4 有参有返回值函数 --2-- 函数的参数 2.1 形式参数介绍和使用 ...

  3. C语言printf()函数:格式化输出函数

    C语言printf()函数:格式化输出函数 头文件:#include <stdio.h> printf()函数是最常用的格式化输出函数,其原型为:     int printf( char ...

  4. C语言的函数

    "函数"在英文的翻译是"function",无论在自然科学还是计算机科学都是这个词,而"function"的本意是"功能" ...

  5. c语言main函数返回值、参数详解(返回值是必须的,0表示正常退出)

    C语言Main函数返回值 main函数的返回值,用于说明程序的退出状态.如果返回0,则代表程序正常退出:返回其它数字的含义则由系统决定.通常,返回非零代表程序异常退出. 很多人甚至市面上的一些书籍,都 ...

  6. Go语言示例-函数返回多个值

    Go语言中函数可以返回多个值,这和其它编程语言有很大的不同.对于有其它语言编程经验的人来说,最大的障碍不是学习这个特性,而是很难想到去使用这个特性. 简单如交换两个数值的例子: package mai ...

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

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

  8. 【转载】 c语言inline函数的使用

    c语言inline函数的使用 转载自:http://blog.chinaunix.net/uid-21843265-id-3056446.html 大学在教科书上学习过inline函数,定义为inli ...

  9. 【C语言】函数和自定义函数

    函数,我之前也提到过一点点内容.其实函数是很好理解的,但是写起来又十分麻烦. 一.     函数引入 我们知道,C源程序是由函数组成的.请看下面的简单函数例子 #include <stdio.h ...

  10. c语言中函数的简单介绍

    c语言中函数的介绍: 函数,简单的说就是代码的打包.存放在一个地方,当需要的时候调用. 函数分类: 1.无参无返回值函数 void func() 2.无参有返回值函数  int func() 3.有参 ...

随机推荐

  1. 十五:JDBC学习入门

    一.JDBC相关概念介绍 1.1.数据库驱动 这里的驱动的概念和平时听到的那种驱动的概念是一样的,比如平时购买的声卡,网卡直接插到计算机上面是不能用的,必须要安装相应的驱动程序之后才能够使用声卡和网卡 ...

  2. yum 和 epel 的详解

    一.概览 1.什么是repo文件 repo文件是Fedora中yum源(软件仓库)的配置文件,通常一个repo文件定义了一个或者多个软件仓库的细节内容,例如我们将从哪里下载需要安装或者升级的软件包,r ...

  3. mzy git学习,git推送到远程库(八)

    git在同步到远程库 关于git中多个用户切换的事情: 完全使用账户密码策略连接远程库: 之前一直尝试在本地切换多个用户,发现一直不行,很奇怪?后面发现必须要去win10的凭据管理器删除当前git的凭 ...

  4. Mybatis原理和代码剖析

    参考资料(官方) Mybatis官方文档: https://mybatis.org/mybatis-3/ Mybatis-Parent : https://github.com/mybatis/par ...

  5. sublime text build system automatic ctrl/cmd+B自动选择 python2 或 python3

    背景 我同时安装了 python2 和 python3 时,python 指向 python2,python3 才是 python3 默认情况下,在 Sublime 内 Ctrl/Cmd + B 运行 ...

  6. How to check type of files without extensions in python? 不通过文件扩展名,怎样知道文件类型?

    有一个命令 file 可以用 $ file fuck fuck.png: PNG image data, 1122 x 750, 8-bit colormap, non-interlaced pyth ...

  7. 复习&反思

    阴间题目 半夜 糖果 Cicada 与排序 排列 Cover 玩具 夜莺与玫瑰 God Knows 简单的填数 反思 20210826 Lighthouse,Miner,Lyk Love painti ...

  8. TCP可靠传输原理

    停止等待协议 "停止等待"就是发送方在发送完一个分组后停止发送,等待接收方的确认后再继续发送. 超时重传 发送方在等待一定时间后如果还没有收到接收方的确认,此时发送方将认定分组没有 ...

  9. openswan协商流程之(二):main_inI1_outR1()

    主模式第二包:main_inI1_outR1() 文章目录 主模式第二包:main_inI1_outR1() 1. 序言 2. `main_inI1_outR1()`处理流程图 3. `main_in ...

  10. 《NAT穿越(NAT-T)RFC3947文档》记录