Go语言之函数

前言:文本首先介绍在Go中函数的定义、调用、参数、返回值,之后将对函数的应用进行说明,最后简单介绍下内置函数

函数

在Go中,支持函数、匿名函数和闭包。

函数的定义

Go语言中,定义函数需要用到关键字func,其格式如下:

func 函数名(参数列表)(返回值列表){
   
	函数体
}

函数名:由字母、下划线、数字组成,规定开头第一个字母不能是数字,同时在同一个包内函数名不能重名。
参数列表:参数由参数变量 参数类型格式组成,多个参数之间用逗号,隔开。
返回值列表:返回值由返回值变量 返回值类型组成,规定可以只写返回值类型,但是有多个返回值的时候必须用小括号()将返回值包住,用逗号,分隔。
函数体:实现函数功能的代码块

函数示例:

//求和函数
func intSum(x int, y int) int {
   
	return x + y
}

变种:我们可以实现一个既没有参数传入也没有返回值的函数:

func voidFunc() {
   
	fmt.Println("void funcion")
}

函数的调用

在定义了函数之后,可以通过函数名()的方式调用函数,以上面两个函数示例:

func main() {
   
	voidFunc()
	ret := intSum(1, 1)
	fmt.Println(ret)
}

其输出如下:

void funcion
2

注意:在调用有返回值的函数的时候,可以不用接受函数的返回值。

函数的参数

函数参数的简写

在Go中,如果函数参数的相邻变量的类型相同,则可以省略前面的类型书写。
示例如下:

func intSum(x, y int) int {
   
	return x + y
}

在上面的代码中,函数intSum有两个参数,这两个参数相邻并且参数类型都为int,因此可以省略前面x的参数类型。

可变参数

可变参数是指函数中参数的数量不固定,在Go中可变参数可以通过在最后书写的参数后面增加...来表示。
示例如下:

func intSum(x ...int) int {
   
	fmt.Println(x)
	sum := 0
	for _, v := range x {
   
		sum += v
	}
	return sum
}

func main() {
   
	ret1 := intSum()
	fmt.Printf("ret1:%v\n", ret1)
	ret2 := intSum(10)
	fmt.Printf("ret2:%v\n", ret2)
	ret3 := intSum(10, 20)
	fmt.Printf("ret3:%v\n", ret3)
	ret4 := intSum(10, 20, 30)
	fmt.Printf("ret4:%v\n", ret4)
}

输出如下:

[]
ret1:0
[10]
ret2:10
[10 20]
ret3:30
[10 20 30]
ret4:60

**注意:**可变参数一定是放在所有固定参数之后;函数的可变参数是由切片实现的。

函数的返回值

在Go语言中,函数通过return来向函数外输出返回值。

多返回值

在Go中可以有多返回值,当存在多返回值的时候,规定必须在函数参数后面用()将所有返回值包起来。
示例如下:

func cal(x, y int) (int, int) {
   
	sum := x + y
	sub := x - y
	return sum, sub
}

返回值命名

在Go中,函数定义的时候可以给返回值命名,并且再命名之后可以直接使用这些命名返回值变量,最后通过return进行返回。
如下示例:

func cal(x, y int) (sum, sub int) {
   
	sum = x + y
	sub = x - y
	return sum, sub	//sum,sub在这里可以直接省略不写
}

返回值切片

在Go中,当返回值的类型为slice时,可以把返回值设定为nilnil可以看做一个有效的slice,而没必要去显示一个长度为0的切片。
示例如下:

func someFunc(x string) []int {
   
	if x == "" {
   
		return nil //没必要去返回[]int{}
	}
	...
}

函数应用

函数变量的作用域

全局变量

在Go中变量也分为全局变量和局部变量。全局变量定义在函数体之外,它定义之后在程序的整个运行周期都有效,并且再函数中也可以直接访问函数变量。
示例如下:

package main

import "fmt"

var n int64 = 998

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值