go基础_函数
函数的基本写法
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基础_函数的更多相关文章
- JS基础_函数的简介
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- php基础_函数和类
①函数 1.函数名不区分大小写,变量名区分大小写. 2.require()和include() 区别:函数加载失败后,require给出一个致命错误,include只是一个警告. ②类 1.构造方法 ...
- Python基础_函数闭包、调用、递归
这节的主要内容是函数的几个用法闭包,调用.递归. 一.函数闭包 对闭包更好的理解请看:https://www.cnblogs.com/Lin-Yi/p/7305364.html 我们来看一个简单的例子 ...
- Python基础_函数2
在介绍完函数的大体概念如定义.传参.作用域之后,本节主要介绍函数的几个细节部分. 一. print()函数与return的区别. 相同点:print与return都是向用户在输出界面上展示结果 不同点 ...
- 14.Java基础_函数/函数重载/参数传递
Java函数和函数重载 /* 函数定义: public static 返回类型 func(参数){ 方法体: } 函数重载 在调用时,Java虚拟机会通过参数的不同来区分同名的函数 满足: 1.多个函 ...
- JS基础_函数作用域
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- JS基础_函数的返回值
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- JS基础_函数的参数
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- JS基础_函数作用域练习
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
随机推荐
- nginx 部署php项目 404
服务器重启了一下 然后访问程序报错404的情况 文件存在位置没有问题 niginx配置根目录没有问题 最后检查到端口的时候发现php-fpm的9000端口未打开 service php-fpm res ...
- 为什么要使用NoSQL数据库
NoSQL概念 随着web2.0的快速发展,非关系型.分布式数据存储得到了快速的发展,它们不保证关系数据的ACID特性(原子性.一致性.隔离性.持久性,一个支持事务的数据库,必需要具有这四种特性,否则 ...
- Jmeter-基础实战
一.测试需求:测试20个用户访问web网站在负载达到30QPS时的平均响应时间 QPS:Query Per Second 每秒查询率.是一台查询服务器每秒能够处理的查询次数.在因特网上,作为域名系统服 ...
- Chrome 提标 您的浏览器限制了第三方Cookie...解决方法
最近升级Chrome后会出现 您的浏览器限制了第三方Cookie,这将影响您正常登录,您可以更改浏览器的隐私设置,解除限制后重试. 解决方法: chrome://flags/ 把这句复制到浏览器回车 ...
- Hibernate的理论知识点
转自网络 一. 对象持久化的理论 1.对象持久化:内存中的对象转存到外部持久设备上,在需要的时候还可以恢复. 2.对象持久化的原因(目标): 物理: 1) 内存不能持久,需要在硬盘上持久保存 //(物 ...
- 连续张量理解和contiguous()方法使用,view和reshape的区别
连续张量理解和contiguous()方法使用,view和reshape的区别 待办 内存共享: 下边的x内存布局是从0开始的,y内存布局,不是从0开始的张量 For example: when yo ...
- 注释web.xml
注释掉红框里的内容
- css+div上下左右自适应居中
主要记录自己日常积累的布局相关的东西,持续更新中. 1.登录框上下左右自适应居中 以前想要把登录表单始终放置在页面的中间,花了不少心思,一直以来用的解决方法都是用js,感觉有点麻烦不是很好,于是在网上 ...
- linux环境jacoco接入
我们通常会将测试覆盖率分为两个部分,即“需求覆盖率”和“代码覆盖率”. 需求覆盖:指的是测试人员对需求的了解程度,根据需求的可测试性来拆分成各个子需求点,来编写相应的测试用例,最终建立一个需求和用例的 ...
- python之路异常
一.基本异常处理 1.基本异常处理 inp=input("请输入内容.:") try: num=int(inp) print(num) except Exception as e: ...