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

一、函数的声明

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
}

最新文章

  1. VS的安装
  2. Android 坐标系统
  3. hdoj 5326 Work
  4. 利用dex2jar反编译apk
  5. Cobar介绍及配置
  6. Android Action Bar 详解篇 .
  7. linux学习方法之六
  8. powerpc e500系列,linux初始化的tlb汇编,添加人肉代码注释
  9. android:ViewPager动画摘要
  10. Logger日志管理工具类
  11. JavaScript根据经纬度获取距离信息
  12. 聊聊真实的 Android TV 开发技术栈
  13. java中过多if-else分支语句的优化方案
  14. Unty中通过镜像优化HDRI全景图体积
  15. JDK5.0 特性-线程同步装置之Semaphore
  16. 【转】每天一个linux命令(10):cat 命令
  17. Linux如何用yum安装软件或服务
  18. 怎样设置table中td的高度为1px
  19. nexus helm proxy 集成&&问题解决
  20. CSS——div居中,window.open(0

热门文章

  1. Commons-Collections(二)之map
  2. Servlet、ServletContext与ServletConfig的详解及区别
  3. ElasticSearch之配置文件详解
  4. Spring boot中注册Servlet
  5. Python - 面向对象编程 - 新式类和旧式类
  6. NOIP模拟14「队长快跑·影魔·抛硬币」
  7. SpringBoot-自动配置分析-图解
  8. 【曹工杂谈】Maven IOC容器的下半场:Google Guice
  9. 常见shell脚本测试题 for/while语句
  10. 云真机兼容性自动化工具测试解决方案_www.alltesting.cn