函数的基本写法

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. shell变量内字符替换和变量字符修改

    vi test.sh a= #将${a}里的第一个123替换为321 b=${a//}; echo "echo variable a" echo $a echo "ech ...

  2. Nginx绑定IP,解决session共享

    1.Nginx通过负载均衡IP地址固定绑定,解决Session共享           upstream note.java.itcast.cn{    ip_hash;        server ...

  3. 对Ajax返回的json数据做处理报错

    这个错误出现的原因是我再返回数据为json时,我页面的Ajax没有指定dataType: 'json'

  4. linux常用命令和字符串乱码

    top :动态实时显示cpu.内存.进程等使用情况(类似windows下的任务管理器) ps aux 查看所有进程 ps aux|grep java 查看java进程 kill -9 进程号 :强制杀 ...

  5. HTML的文档设置标记

    1.格式标记 <br/> 强制换行标记 <p> 换段落标记 换段落,由于多个空格和回车在HTML中会被等效为一个空格,所以HTML中要换段落就要用<p>,<p ...

  6. 操作系统-多用户如何理解(Linux)

    单用户.多用户.单任务.多任务,这么多种操作系统容易让人迷糊.其实这种初看你会觉得理解了一点,但其实你仔细研究会发现,多用户到底讲的是什么鬼? 多任务比较简单,就是应用程序都要放置到内存上去给CPU调 ...

  7. 四种常见的APP分类界面布局设计案例学习

    相信各位对于APP设计,已经很熟练啦.如何在熟练的基础上提高我们界面的优美度,或者是进行APP界面的迭代设计. 重构APP设计布局是我们必须要经历的一个过程. 在之前,学习UI设计的时候,经常要接触到 ...

  8. JS高级---函数作为返回值使用

    函数作为返回值使用 function f1() { console.log("f1函数开始"); return function () { console.log("函数 ...

  9. 大数据-HBase

    HBase HBase(Hadoop Database)基于Google的BigTable论文,依赖HDFS进行存储.适合存储大体量数据.HBase是高可靠性(数据安全).高性能(存取效率).面向列. ...

  10. IntelliJ IDEA 2017.3尚硅谷-----取消更新