GO语言-函数【GO学习之路】

270 阅读3分钟

02.jpeg

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第8天,点击查看活动详情

前言

本文就进入GO语言函数世界,对比看与Java 的函数有和异同。

本文大纲

GO语言-函数D7.png

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!