写点什么

GO 学习之路 -6.GO 语言函数

作者:子不语Any
  • 2022-11-30
    湖南
  • 本文字数:1420 字

    阅读完需:约 5 分钟

GO学习之路-6.GO语言函数

前言

本文就进入 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 := 3fmt.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)
复制代码


发布于: 刚刚阅读数: 3
用户头像

子不语Any

关注

If not now,when? 2022-09-17 加入

安卓攻城狮

评论

发布
暂无评论
GO学习之路-6.GO语言函数_Go_子不语Any_InfoQ写作社区