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

一、函数的声明

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. C++类的构造函数后面加一个冒号的含义

    最近在看侯捷老师讲解的C++知识,他讲到在构造函数加一个冒号初始化值的方法,会使代码更大气,在此记录一下使用方法 构造函数冒号后的初始化class complex{public: complex(do ...

  2. WPF 获取主线程

    WPF线程获取UI线程   WPF中只能是UI线程才可以改变UI控件相关,当采用多线程工作时,可用以下代码获取 UI线程进行操作: App.Current.Dispatcher.Invoke((Act ...

  3. Lambda Expressions and Functional Interfaces: Tips and Best Practices

    转载自https://www.baeldung.com/java-8-lambda-expressions-tips 1. Overview   Now that Java 8 has reached ...

  4. 阿里云搭建elk

    参考了阿里云搭建ELK日志平台安装过程. 系统环境 阿里云ECS 2C2G CentOS 7.6 请确保机器配置至少4G!!! 配置秘钥 1.下载并安装公共签名密钥 [root@aliplay ~]# ...

  5. windows 10 + tensorflow-gpu 环境搭建

    安装过程可基本按照ubuntu装法,参考https://www.cnblogs.com/xbit/p/9768238.html 其中: conda配置文件:C:\Users\Administrator ...

  6. Ubuntu16.04 + OpenCV源码 + Qt5.10 安装、配置

    在VMWare中配置安装Ubuntu16.04.没有什么特别的地方,正常安装即可. 安装最新版qt,此时5.10.按照普通QT教程安装(需要勾选gcc),无须sudo,此时不用管OpenCV.地址:h ...

  7. 运行uni-app到微信开发者工具

    1.工具及环境 HBuilder X 微信开发者工具 Node.js,测试:node -v(node安装) 和 npm -v(自带的npm也安装成功) 2.创建uni-app项目: 在点击工具栏里的文 ...

  8. ks.cfg文件相关

    原文转自:https://www.cnblogs.com/itzgr/p/10029631.html作者:木二 目录 一 图形化生成ks.cfg文件 二 ks.cfg文件相关项解析 一 图形化生成ks ...

  9. MySQL-存储引擎-MERGE

    MERGE存储引擎是一组Myisam表的组合,这些Myisam表必须结构完全相同,MERGE表本身并没有数据,对MERGE类型的表可以进行查询.更新.删除操作,这些操作实际上是对内部的Myisam表进 ...

  10. 华为分析X HUAWEI Ads,上线深度转化事件回传功能,让ROI 看得见!

    华为分析X HUAWEI Ads,上线深度转化事件回传功能,让ROI 看得见! 随着移动应用生态的流量成本攀升.行业竞争加剧,越来越多的广告商希望通过精准投放来获取更高质量的深度转化用户,比如二手车. ...