携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第8天,点击查看活动详情
前言
本文就进入GO语言函数世界,对比看与Java 的函数有和异同。
本文大纲
1、声明函数
可以类比Java中函数的定义,就是执行指定任务的代码块。
声明函数的语法:
func funcName(parametername type1, parametername type2) (output1 type1, output2 type2) {
//这里是处理逻辑代码
...
//返回多个值
return value1, value2
}
- GO语言中,函数用
func为声明关键字 - funcName 为函数名称
- parametername type:表示参数名和参数类型
- output1 type1, output2 type2:返回值和返回值类型,GO语言中,可以有多个返回值
- 函数体:函数逻辑实现的代码块
2、函数参数
与其他编程语言一样,参数有形式参数和实际参数的区分。
- 形式参数:函数定义时,用于接收外部传入的数据,可简称为形参
- 实际参数:函数在调用时,传给形参的具体数据,可简称为实参
注意点: 在传值的时候,实参与形参必须一一对应:顺序,个数,类型
可变参
在GO语言中,函数支持可变参。
定义支持可变参的函数:
func funcName(arg ...type) {}
arg ...int 表示函数接受不定数量的参数。这里参数的类型全部是int。
参数传递
GO语言中,函数也存在值传递和引用传递
// 值传递示例
/* 声明函数变量 */
getSquareRoot := func(x float64) float64 {
return math.Sqrt(x)
}
/* 使用函数 */
fmt.Println(getSquareRoot(9))
// 引用传递
//简单的一个函数,实现了参数+1的操作
func add1(a *int) int { // 请注意,
*a = *a+1 // 修改了a的值
return *a // 返回新值
}
x := 3
fmt.Println("x = ", x) // 应该输出 "x = 3"
x1 := add1(&x) // 调用 add1(&x) 传x的地址
fmt.Println("x+1 = ", x1) // 输出 "x+1 = 4"
fmt.Println("x = ", x) // 输出 "x = 4"
- 传指针可使多个函数能操作同一个对象。
- 传指针较轻量级(8bytes),所以只传内存地址
3、函数返回值
就是函数被调用,执行后获得的结果。
在GO中,一个函数可以没有返回值,可以有一个返回值,还可以有多个返回值。
func SumAndProduct(A, B int) (add int, Multiplied int) {
add = A+B // 第一个返回值
Multiplied = A*B // 第二个返回值
return
}
空白标识符
Go中的空白标识符:"_"[下划线] 它可以代替任何类型的任何值。
空白标识符的用法:
//需求:rectProps函数返回的结果是面积和周长,只需返回面积,不需要周长。
//这里就可以用到空白标识符
func rectProps(length, width float64) (float64, float64) {
var area = length * width
var perimeter = (length + width) * 2
return area, perimeter
}
func main() {
area, _ := rectProps(10.8, 5.6) // perimeter is discarded
fmt.Printf("Area %f ", area)
}
4、函数作用域
作用域:变量可使用的范围。
局部变量 在函数内部定义的变量,叫做局部变量。
该变量的作用域只在该函数中。
全局变量 在函数外部定义的变量,叫做全局变量
所有的函数都可以使用,而且共享这一份数据
5、特殊函数
init函数
Go语言中,init函数是一个特殊的函数,它会在包完成初始化后自动执行,执行优先级高于main函数
func init() {
//在这里可以书写一些初始化操作
fmt.Println("init...")
}
func main() {
fmt.Println("main...")
}
new函数
new函数可以用来创建变量。表达式new(T)将创建一个T类型的匿名变量,初始化为T类型的默认值
p := new(int) // p 为 *int类型,只想匿名的int变量
fmt.Println(*p) // "0"
make函数
make函数经常用来创建切片、Map
m1 := map[string]int{}
m2 := make(map[string]int, 10)
在掘金(juejin.cn) 一起分享知识,Keep Learning!