函数的基本写法

  1. func add(a int, b int) int {
  2. return a + b
  3. }

如果2个参数的类型一样,可以简写为

  1. func add(a, b int) int {
  2. return a + b
  3. }

  

多个返回值

  1. func add_substract(a int, b int) (int, int) {
  2. return a + b, a - b
  3. }

  

忽略多个返回值中的某一个

  1. func add_substract(a, b int) (int, int) {
  2. return a + b, a - b
  3. }
  4.  
  5. n1, _ := add_substract(3, 4)

  

定义函数类型

  1. func add(a int, b int) int {
  2. return a + b
  3. }
  4.  
  5. func sub(a, b int) int {
  6. return a - b
  7. }
  8.  
  9. type Cal func(int, int) int
  10.  
  11. func do(f Cal, a, b int) int {
  12. return f(a, b)
  13. }
  14.  
  15. func main() {
  16. n1 := do(add, 3, 5)
  17. n2 := do(sub, 5, 3)
  18. fmt.Println("n1 =", n1)
  19. fmt.Println("n2 =", n2)
  20. }

  

不定参数的场景

不定参数函数的形参可以为不定参数,或者为切片。

但是这是2种不同的函数类型。

  1. func get_sum(data ...int) {
  2. sum := 0
  3. for _, v := range data {
  4. sum += v
  5. }
  6. fmt.Println(sum)
  7. return
  8. }
  9.  
  10. func main() {
  11. fmt.Println("Hello World!")
  12.  
  13. get_sum(1, 2, 3)
  14. slice := make([]int, 3)
  15. slice[0] = 1
  16. slice[1] = 2
  17. get_sum(slice...)
  18. }

  

运行结果

  1. Hello World!
  2. 6
  3. 3
  4. 成功: 进程退出代码 0.

  

defer函数

defer函数的主要作用为了保证资源的回收和释放。

当defer函数放在return之后时,不会被执行。

当defer函数所在的程序调用了os.Exit(),不管是Exit(0),Exit(1),defer都不会被执行。

defer函数后面的()里面是为了放实参的。

  1. func main() {
  2. fmt.Println("Hello World!")
  3.  
  4. defer func(x int) {
  5. fmt.Println("defer x=", x)
  6. }(1)
  7.  
  8. fmt.Println("test end")
  9.  
  10. // os.Exit(0)
  11. os.Exit(1)
  12. }

  

运行结果

  1. Hello World!
  2. test end
  3. exit status 1
  4. 错误: 进程退出代码 1.

  

多个defer函数放在一起,最后的defer先执行。(defer充分贯彻落实FILO)

go基础_函数的更多相关文章

  1. JS基础_函数的简介

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. php基础_函数和类

    ①函数 1.函数名不区分大小写,变量名区分大小写. 2.require()和include() 区别:函数加载失败后,require给出一个致命错误,include只是一个警告. ②类 1.构造方法 ...

  3. Python基础_函数闭包、调用、递归

    这节的主要内容是函数的几个用法闭包,调用.递归. 一.函数闭包 对闭包更好的理解请看:https://www.cnblogs.com/Lin-Yi/p/7305364.html 我们来看一个简单的例子 ...

  4. Python基础_函数2

    在介绍完函数的大体概念如定义.传参.作用域之后,本节主要介绍函数的几个细节部分. 一. print()函数与return的区别. 相同点:print与return都是向用户在输出界面上展示结果 不同点 ...

  5. 14.Java基础_函数/函数重载/参数传递

    Java函数和函数重载 /* 函数定义: public static 返回类型 func(参数){ 方法体: } 函数重载 在调用时,Java虚拟机会通过参数的不同来区分同名的函数 满足: 1.多个函 ...

  6. JS基础_函数作用域

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. JS基础_函数的返回值

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  8. JS基础_函数的参数

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. JS基础_函数作用域练习

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

随机推荐

  1. linux - 从网上下载文件到服务器

    命令格式 wget URL地址 实例 wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.33-linux-glibc2.5-x86 ...

  2. js及jsp.java查错的几种方式

    一.js 1.console.log("你想输出的内容"); 2.alert("你想输出的内容"); 3.debugger;(记得打开F12) 4.快速找到js ...

  3. sql语言分类及区别、显示和隐示提交的指令

    SQL的发展是从1974年开始的,其发展过程如下: 1974年-----由Boyce和Chamberlin提出,当时称SEQUEL. 1976年-----IBM公司的Sanjase研究所在研制RDBM ...

  4. 清理 /dev/vda1 系统磁盘

    df-h检查一台服务器磁盘使用空间,发现磁盘已经使用了100% 思路是: 1.cd /usr 2.du -sh * 看哪个目录占用空间大 3.重复前两步,根据实际情况删除或者移走 4.日志的话可以运行 ...

  5. LaTeX竖立公式符号

    1.LaTeX技巧668:LaTeX如何实现直立积分号 \usepackage{amsmath,amssymb} \DeclareSymbolFont{EulerExtension}{U}{euex} ...

  6. orcad常用库文件

    ORCAD CAPTURE元件库介绍 AMPLIFIER.OLB amplifier 共182个零件,存放模拟放大器IC,如CA3280,TL027C,EL4093等. ARITHMETIC.OLB ...

  7. 创建本地yum源仓库

    更新本地yum源 yum仓库服务端配置如下 : 1. 创建yum仓库目录 mkdir -p /data/yum_data/ cd /data/yum_data/ #可以上传rpm包到此目录,此目录下面 ...

  8. JS高级---一个神奇的原型链

    一个神奇的原型链 <script> var divObj=document.getElementById("dv"); console.dir(divObj); //d ...

  9. python之路之css

    方式三 方式四 <style type="text/css"> a:link{ color: red; } a:visited { color: blue; } a:h ...

  10. Mybaits(11)延迟加载

    一.概述 1.概念 就是在需要用到数据时才去进行加载,不需要用的数据就不加载数据.延迟加载也称为懒加载. 2.优缺点 优点:先从单表查询,需要时再从关联表去关联查询,大大提高数据库性能,因为查询单表要 ...