golang第十四天,函数(上篇)

292 阅读3分钟

这是我参与8月更文挑战的第14天,活动详情查看:8月更文挑战

函数的概述

函数是什么,在其他编程语言都有函数,为了完成某个具体功能封装起来的集合
函数是执行特定任务的代码块。

函数的定义

func 函数名(参数) (返回值) {
    return xxx
}

func funcName(inpt1 type1, inpt2 type2) (outp1 type1, outp2 type2) {
    return value1, value2
}
  • func:函数由 func 开始声明
  • funcName:函数名称,函数名和参数列表一起构成了函数签名。
  • parametername type:参数列表,参数就像一个占位符,当函数被调用时,你可以将值传递给参数,这个值被称为实际参数。参数列表指定的是参数类型、顺序、及参数个数。参数是可选的,也就是说函数也可以不包含参数。
  • output1 type1, output2 type2:返回类型,函数返回一列值。return_types 是该列值的数据类型。有些功能不需要返回值,这种情况下 return_types 不是必须的。
  • 上面返回值声明了两个变量output1和output2,如果你不想声明也可以,直接就两个类型。
  • 如果只有一个返回值且不声明返回值变量,那么你可以省略包括返回值的括号(即一个返回值可以不声明返回类型)
  • 函数体:函数定义的代码集合。
  • 函数的定义及左大括号放在同一行
  • 多返回值
  • 忽略函数返回值

多返回实例演示

实例 1.1.定义一个函数[actionVariables],返回2个返回值,加和,相减,测试多返回值

func actionVariables(var1 int,var2 int)(int,int) {
func actionVariables(var1,var2 int)(int,int) {
    return var1 + var2,var1-var2
}

函数的参数如果一致,则可在最后一个参数中书写类型
函数返回值名称可指定,可忽略
指定函数返回值名称时,可直接return

1.2.如果2个参数或多个参数的类型一致,可把类型写在最后

func actionVariables(var1,var2 int)(int,int) {
    return var1 + var2,var1-var2
}

2.调用

var sum int
    var minus int
    sum,minus = actionVariables(1,2)
    fmt.Println(sum,minus)

实例2.1.定义一个函数[actionVariables2],测试函数多返回值时,设置有名与无名

func actionVariables2(var1,var2 int) (sum int,minus int) {
    sum = var1 + var2
    minus = var1 - var2
    //return sum,minus
    return
}

实例2.2.调用

sum,minus = actionVariables2(1,2)
    fmt.Println(sum,minus)

不定参数

可变参数…interface{}做为函数参数的使用,通过分析go系统自带的fmt.println讲解可变参数

// 1。定义函数[actionVariables3],可变参数,测试

func actionVariables3(args ...interface{}) {
    for _,value := range args {
        fmt.Println(key,value)
    }
}
 // 2.调用

actionVariables3(1,"我是波哥",3.14,true)

可变参数,类似于切片,go语言里有很多,可变参数是go语言的特性

//可变参数...interface{}做为函数参数的类型判断
//1.在函数[actionVariables3],增加功能,判断可变参数的类型

func actionVariables3(args ...interface{}) {
    for _,value := range args {
        switch value.(type) {
        case int:
            fmt.Println(value,"int")
        case string:
            fmt.Println(value,"string")
        case float64:
            fmt.Println(value,"float64")
        case bool:
            fmt.Println(value,"bool")
        default:
            fmt.Println(value,"unknow")
        }
    }
}
//2.调用
actionVariables3(1,"我是波哥",3.14,true)