Go语言入门-函数function类型探索

Go语言入门-函数-function

定义

Go语言中函数面向过程编程中最小的模块单元,具备输入、输出的功能,完成从输入到输出的转换,主要是把业务逻辑或者算法分解成具备单一功能,独立解耦的程序块。

函数签名

函数的签名包括:关键字 “func”、函数名称、函数参数、函数返回值。
Go语言的函数定义格式:


//多个返回值,需要用括号包裹起来
func functionName([parameterList]) ([returnTypes]) {
   
    ...
    body
    ...
}

//返回值只有一个可以省略返回值需要包裹的括号
func functionName([parameterList]) returnType {
   
    ...
    body
    ...
}
  • 关键字func用来标示函数的定义声明
  • functionName-函数名:首字母不是能数字,同一个包里不能出现重复(即使参数返回值不同)
  • parameterList-参数: 在定义时, 用来限定函数的输入的占位符,需要指定输入参数的类型,也可以指定参数的默认变量(形参),调用时可以直接传入变量(实际参数),参数是可选的
  • returnTypes-返回值:在定义时,用来限定函数的输出,需要指定输出参数的类型,在调用时主要做右值,赋值给调用方输出结果,当函数没有返回值时可以不需要returnTypes
  • body-函数块:用来处理代码逻辑块。

函数参数

  • 参数类型简写
    当两个或多个连续的函数命名参数是同一类型,则除了最后一个类型之外,其他都可以省略。

  • 普通函数定义

//普通函数定义 a,b 形式参数
func testAdd(a int, b int)  {
   
}


func main() {
   
    var c, d int
    //普通函数调用 c,d实际参数
    testAdd(c, d)
}

a int, b int 为形式参数列表
var c, d int 为形式参数

  • 参数类型简写
//省略a的类型 
func testAdd(a, b int)  {
   
}

//等价于

func testAdd(a int, b int)  {
   
}
  • 变长形参
    当函数的输入不固定时,通过在最后一个参数名增加 [… + 参数类型] 来定义改函数可以接收不定长的参数。
//strs ...string 相当于是形式切片
func parseParams(strs ...string) {
   
    fmt.Printf("strs Type %T\n", strs)
    for i, str:= range strs {
   
        fmt.Printf("param [%d] = [%s]\n", i, str)
    }
    fmt.Println("parseParams done")
}

func main() {
   
    parseParams("a", "b", "c")
    parseParams("a", "b", "c", "d")
    parseParams("a", "b", "c", "d", "e")
}
/**
output:
strs Type []string
param [0] = [a]
param [1] = [b]
param [2] = [c]
parseParams done
strs Type []string
param [0] = [a]
param [1] = [b]
param [2] = [c]
param [3] = [d]
parseParams done
strs Type []string
param [0] = [a]
param [1] = [b]
param [2] = [c]
param [3] = [d]
param [4] = [e]
parseParams done
 */

strs Type []string 可以看出变长的参数实际上对应参数类型的切片

函数形参

是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传入的参数.形参可以当多函数局部变量。因此不能在函数中在定义同名变量。

func testFuncScope(a int) {
   
    var a int //'a' redeclared in this block --编译报错
    fmt.Println(a)
}
函数实参

是在使用函数使用实际要输入的参数,目的是把对应变量的值传递给形式参数。

//普通函数定义 a,b 形式参数
func testAdd(a int, b int)  {
   
}
func main() {
   
    var c, d int
    //普通函数调用 c,d实际参数
    testAdd(c, d)
}

以上示例中 a、b是形式参数,c、d是实际参数。当函数调用时c、d会传递给函数内部的实际形参变量中。

函数实际参数赋值给形式参数(函数局部变量)都是值传递。也就意味着要函数修改传入的实际参数变量的值,只能通过传递该参数变量的地址才能修改。当然传递进去的地址本质也是值拷贝。虽然引用类型看上去传引用,本质也是传递对应数据接口的指针。

函数返回值

函数返回值,当在函数定义时,定义了返回值的类型和变量,那么意味着在函数定义中不能出现同名变量。可以理解为定义的返回值变量也是局部变量。

单返回值
  • 示例1
    单个返回值,函数定义的时候没有指定函数返回值变量,那么在调用时直接返回a的副本给调用发。–值传递。
//验证函数返回值
//返回值没有指定1个返回值初始区部变量
func testReturn1() int {
   
    var a int
    return a
}

返回值变量,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值