函数的基本写法

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

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

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

  

多个返回值

func add_substract(a int, b int) (int, int) {
return a + b, a - b
}

  

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

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

  

定义函数类型

func add(a int, b int) int {
return a + b
} func sub(a, b int) int {
return a - b
} type Cal func(int, int) int func do(f Cal, a, b int) int {
return f(a, b)
} func main() {
n1 := do(add, 3, 5)
n2 := do(sub, 5, 3)
fmt.Println("n1 =", n1)
fmt.Println("n2 =", n2)
}

  

不定参数的场景

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

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

func get_sum(data ...int) {
sum := 0
for _, v := range data {
sum += v
}
fmt.Println(sum)
return
} func main() {
fmt.Println("Hello World!") get_sum(1, 2, 3)
slice := make([]int, 3)
slice[0] = 1
slice[1] = 2
get_sum(slice...)
}

  

运行结果

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

  

defer函数

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

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

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

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

func main() {
fmt.Println("Hello World!") defer func(x int) {
fmt.Println("defer x=", x)
}(1) fmt.Println("test end") // os.Exit(0)
os.Exit(1)
}

  

运行结果

Hello World!
test end
exit status 1
错误: 进程退出代码 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. 彻底禁用Chrome插件停用开发者模式提示插件version.dll

    下载后将dll文件放在和Chrome.exe同目录然后重启浏览器即可. 文件下载地址:https://download.csdn.net/download/ganquanzhong/11987360

  2. git中设置代理

    说明:在某种原因下,整个网络都是使用代理的情况下,需要使用git clone,这时就需要设置代理了. 在没有设置代理的时候,直接克隆报错  Failed to connect to gitee.com ...

  3. php处理复选框

    1.HTML <form action="getData.php" method="post" enctype="multipart/form- ...

  4. Python之QRCode

    目录 一.基本介绍 介绍 QRCode二维码版本展示 QRCode方法 常用函数 二.安装QRCode 三.基本案例 生成普通二维码: 生成带有图片的二维码: 四.制作动态二维码 安装 myqr 和 ...

  5. mysql cmd 常用命令

    环境变量配置配置好以后,打开cmd 连接:mysql -h主机地址 -u用户名 -p用户密码 (注:u与root可以不用加空格,其它也一样) 断开:exit (回车) 创建授权:grant selec ...

  6. Java基础面试题总结二

    1,什么是字符串常量池? 字符串的分配,和其他的对象分配一样,耗费高昂的时间与空间代价.JVM为了提高性能和减少内存开销,在实例化字符串常量的时候进行了一些优化.为 了减少在JVM中创建的字符串的数量 ...

  7. intermediate-python-for-data-science

    目录 matplotlib plot Scatter Plot histogram Customization Dictionaries, Part 1 Create dictionary dicti ...

  8. OpenShift 4.3环境中创建基于Go的Operator

    详细步骤可以参考官方文档 https://docs.openshift.com/container-platform/4.3/operators/operator_sdk/osdk-getting-s ...

  9. .net 文件接口的封装,写日志,创建文件log

    public class FileSupport { public static FileSupport Instance = new FileSupport(); public static str ...

  10. linux修改主机名(hostname)

    修改/etc/sysconfig/network文件并重启