函数的基本写法

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. LED Keychain-A Tool To Drive Specific Market Segments

    LED keychain are an excellent tool to drive specific market segments. They can focus on a small grou ...

  2. BandwagonHost VPS CentOS7系统启用EPEL源

    BandwagonHost默认安装好了EPEL源,只是默认没有启用,所以很多软件都无法安装.我们需要手动启用一下,才能安装里面的软件. # vim /etc/yum.repos.d/epel.repo ...

  3. loj6277 数列分块入门题1

    裸题分块. #include <bits/stdc++.h> using namespace std; ],b[],n,m,t1,t2,t3,t4,sq; int main(){ ios: ...

  4. 如何在macOS下安装geoserver

    macOS 下的编译包 如果是使用安装文件,请查看官网文档,如果想要部署在已有的tomcat服务下,请查看网页压缩包章节. Web archive. An alternate way of insta ...

  5. 文本中自动出现的 &#8203

    文本中自动出现的 &#8203   所借鉴原页面地址:https://blog.csdn.net/judyc/article/details/53097142 因判断容器内字符长度来做其它处理 ...

  6. Spring作用域和BeenFactory

    1.Spring Bean实例作用域: ① singleton:   IOC容器仅创建一个Bean实例,IOC容器每次返回的是同一个Bean实例. ② prototype:   IOC容器可以创建多个 ...

  7. 解决 IDEA 无法提示导入 java.util.Date 的问题

    之前有一段时间在使用IDEA的时候,发现通过快捷键Alt + Enter导入并没有提示有java.util.Date的包,仅仅只有java.sql.Date的包.于是每次使用都需要通过手写import ...

  8. 题解【洛谷P5958】[POI2017]Sabotaż

    题面 考虑树形 \(\text{DP}\). 设 \(dp_i\) 为使 \(i\) 变成叛徒的最大值,同时 \(dp_i\) 也是使 \(i\) 不变成叛徒的最小值. 然后考虑如何转移状态. 如果 ...

  9. 插件与App的跳转,及路由的关系

    在SDK中 无法直接跳App 的界面,这个时候需要使用 路由,或者通过 NSClassFromString 的 presentViewController 来跳转. 直接贴代码: UIViewCont ...

  10. ArcGIS10:ArcGIS version not specified. You must call RuntimeManager.Bind before creating any ArcGIS

    [网络转载] 今天将ArcGIS系列的软件从ArcGIS9.3.1升级到ArcGIS10,然后就使用VS创建一个简单的AE应用程序,然后拖放一个toolbar.LicenseControl以及MapC ...