go语言—普通函数

go语言是编译型语言,所以函数的编写顺序是无关紧要的,为了可读性建议把main()函数写在文件的前面,其它函数按照被调用顺序编写

1、普通函数的定义

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

  • 函数:由字母、数字、下划线组成,在同一个包内函数名不能重名
  • 参数:局部变量,值由函数调用者提供,多个参数用逗号隔开
  • 返回值由返回值变量和变量类型组成,也可以只写返回值类型,多个返回值必须用括号包裹并使用逗号分隔,如果没有返回值括号可以省略
func intSum(x int, y int) int {
	return x + y
}
fmt.Println(intSum(3,2))

代码说明:

  • 3和2是调用时传入的实数,函数返回一个int类型的值,返回值也可以被命名
  • 如果一个函数包含返回值,那么函数必须以return语句结尾,除非函数明显无法运行到结尾处
  • 函数在调用时必须按照形参声明顺序提供实参,go语言中形参和返回值的变量名对于函数调用者而言没有意义
  • 函数中实参通过值传递方式进行传递,函数的形参是实参的拷贝,对形参进行修改不会影响实参。
  • 如果实参是引用类型,如指针、切片、map等实参可能会由于函数的间接引用而改变

2、函数参数

2.1、类型简写
函数的参数中如果相邻变量的类型相同,则可以省略类型

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

2.2、可变参数

  • 可变参数指函数的参数数量不固定,可变参数通过在参数名后加…来标识
  • 可变参数是作为函数的最后一个参数
  • 本质上函数的可变参数是通过切片来实现的
func intSum2(x...int) int {
	fmt.Println(x) //x是可变参数,切片类型
	sum := 0
	for _, v := range x { //遍历x的值
		sum = sum + v
	}
	return sum
}

ret1 := intSum2()
ret2 := intSum2(10)
ret3 := intSum2(10, 20)
ret4 := intSum2(10, 20, 30)
fmt.Println(ret4)

[10 20 30]
60

  • 固定参数搭配可变参数使用时,可变参数要放在固定参数的后面
func intSum3(x int, y ...int) int {
	fmt.Println(x, y)
	sum := x // 将x赋值给sum
	for _, v := range y { // 遍历切片y的值
		sum = sum + v
	}
	return sum
}

ret7 := intSum3(100, 10, 20)
ret8 := intSum3(100, 10, 20, 30)

fmt.Println(ret8) 

100 [10 20 30]
160

3、函数返回值

通过return向外输出返回值

3.1、多返回值
函数如果有多个返回值必须用()将所有返回值包裹起来

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

3.2、返回值命名

  • 函数定义时可以给返回值命名,并在函数体中直接使用,就使用return返回
  • 命名的返回值变量的默认值为类型的默认值,即数值为 0,字符串为空字符串,布尔为 false、指针为 nil 等
func calc(x, y int) (sum, sub int) {
	sum = x + y
	sub = x - y
	return
}
func someFunc(x string) []int { //返回值类型为切片
	if x == "" {
		return nil // nil可以是一个有效的返回
	}
	...
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值