golang基础-函数是变量、自定义type、命名返回值、可变参、defer、匿名
2017-10-22 20:09
465 查看
函数是一个变量类型
package main import("fmt" ) func main() { c := add fmt.Println(c) sum := c(10, 20) fmt.Println(sum) } func add(a, b int) int { return a + b }
输出如下:
0x488a00 30
自定义一个type类型函数model
package main import("fmt" ) //定义一个type类型,func(int,int) int 构造一种方法的模型 type methodModel func(int,int) int func add(a int ,b int) int { return a+b } //接受一个类似methodModel方法的具体方法 func operator(entity methodModel,a int,b int)int{ return entity(a,b) } func main() { var a int = 1 var b int = 2 c:= add sum := operator(c,a,b) fmt.Printf("%d\n",sum) }
输出3
命名返回值、忽略返回值
1、值传递2、引用传递
注意1:无论是值传递,还是引用传递,传递给函数的都是变量的副本
不过,值传递是值的拷贝。引用传递是地址的拷贝
map、slice、chan、指针、interface默认以引用的方式传递
package main import("fmt" ) func add(a, b int) (c int) { c = a + b return } func calc(a, b int) (sum int, avg int) { sum = a + b avg = (a +b)/2 return } func main() { var a int = 1 var b int = 2 c := add(a,b) fmt.Println(c) sum,_ := calc(a,b) fmt.Println(sum) sum1,avg1 := calc(a,b) `` mt.Println(sum1,avg1) }
输出如下:
3 3 3 1
可变参数
package main import("fmt" ) func add(a int,args ... int)(result int) { result = a for i:=0;i<len(args);i++{ result += args[i] } return } func main() { sum := add(1,2,3) fmt.Print(sum) }
输出如下:6
defer用途
当函数返回时,执行defer语句。因此,可以用来做资源清理多个defer语句,按先进后出的方式执行
defer语句中的变量,在defer声明时就决定了
package main import("fmt" ) func add(a int,b int) int{ defer fmt.Println("defer method") return a + b } func main() { defer fmt.Println("defer main1") defer fmt.Println("defer main2") sum := add(1,2) fmt.Print(sum,"\n") defer fmt.Println("defer method after") }
输出如下:
defer method 3 defer method after defer main2 defer main1
匿名函数
package main import("fmt" ) //匿名函数1 var ( result = func(a int,b int) int{ return a + b } ) //非匿名函数 func sum1(a int,b int)int { return a + b } //匿名函数2 func sum2(a int ,b int) int { tempMethod := func(a int ,b int) int { return a + b } return tempMethod(a,b) } func sum3(a int ,b int ) int { resultTemp := func(a int ,b int )int { return a + b }(a,b) return resultTemp } func main() { sum := result(1,2) fmt.Println(sum) method:=sum1 fmt.Println(method(3,4)) fmt.Println(sum2(4,6)) fmt.Println(sum3(7,9)) }
输出如下:
3 7 10 16
相关文章推荐
- linux shell学习笔记二---自定义函数(定义、返回值、变量作用域)介绍
- 自定义函数基础-返回值,单值、多值
- linux shell 自定义函数方法(定义、返回值、变量作用域)
- [Golang]一道考察defer与命名返回值的题目
- Python自定义函数基础:获取函数单返回值和多返回值
- PHP入门教程之自定义函数用法详解(创建,调用,变量,参数,返回值等)
- Python开发基础-Day6-函数参数、嵌套、返回值、对象、命名空间和作用域
- PHP入门教程之自定义函数用法详解(创建,调用,变量,参数,返回值等)
- linux shell 自定义函数方法(定义、返回值、变量作用域)
- python基础之函数参数、嵌套、返回值、对象、命名空间和作用域
- (3)JavaScript基础(基本语法:变量与数据类型、类型转换、运算符、流程控制、函数、对象、自定义对象、原型)
- keil(MDK)中出现error: #513: a value of type "int" cannot be assigned to an entity of type "char *",即函数返回值无法赋值给对应变量的错误
- Python函数中的变量和函数返回值
- 郝斌的C语言基础 159-161 通过函数完成对结构体变量的输入输出
- C语言基础学习基本数据类型-变量的命名
- C++基础积累(1)using namespace potter 自定义命名空间和使用
- Python3学习(一)-基础、数据类型、变量、字符串和编码、list&tuple、if、for、while、dict、set、函数与参数
- js自定义函数名不可以命名为click
- java基础七(成员变量 局部变量 匿名对象 封装 设计原则 private this 构造方法 static)
- 结构体变量作为函数的参数和返回值 .