函数的基本写法

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)

最新文章

  1. 使用Docker搭建Java Web运行环境
  2. Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理6
  3. 面向对象cookie增删查
  4. Codeforces Round #200 (Div. 2) E. Read Time(二分)
  5. 捉BUG记(To Catch a Bug)
  6. Golang学习 - io 包
  7. 引用自定义的framework
  8. 山东省2016acm省赛
  9. SharePoint2010添加webpart找不到内容编辑器
  10. HDU 3639 Hawk-and-Chicken(良好的沟通)
  11. HDU 5613 Baby Ming and Binary image
  12. 安卓模拟器tools修改
  13. Jmeter - foreach控制器之嵌套使用
  14. Bootstrap3 排版-地址
  15. 回忆曾经的SSM框架实现文件上传
  16. svg标签
  17. Beego开源项目 收藏
  18. 使用 MVVMLight 命令绑定(转)
  19. struts系列:返回json格式的响应
  20. Network---3694poj(桥与LCA)

热门文章

  1. URL简介&HTTP协议
  2. 占位 RK
  3. python调用HEG工具批量处理MODIS数据
  4. 计蒜客 - A1603.天上的星星
  5. 《TCP/IP入门经典》摘录--Part 1
  6. Django教程(2)
  7. COMMUNITY DETECTION_python-louvain
  8. java基础异常处理
  9. pyodbc 一些内容
  10. 优酷1080p的kux格式文件转码