【Golang】函数

定义与调用

我们以一个求两数之和的函数例子,比较一下Java和Go在函数定义方面的不同之处。

Java代码:

int add(int a, int b) {
	return a + b
}

Go代码:

func add(a int, b int) int {
	return a + b
}

我们可以看到,Java把返回值的类型放在函数名前,而Go则将它放在了后面,除此之外,参数列表中形参名称和形参类型的前后顺序也不同。

而在函数调用时,Go与Java的语法差不多。

var sum = add(1, 2)

允许多返回值

如果想要一个函数有多个返回值的话,只需要把返回值的部分修改一下就可以。

func getMaxAndMin(a int, b int) (int, int) {
	if a < b {
		return b, a
	} else {
		return a, b
	}
}

调用时,需要同时获取到所有的返回值。

var max, min int
max, min = getMaxAndMin(5, 9)

有时候,我们只需要得到其中的一个值,比如如果想要得到两个数的最大值,如果还按照上述的写法,那么最小值变量便不会被使用到,这在Go中是不被允许的。

var max int
max, _ = getMaxAndMin(5, 9)

像这样,我们把最小值赋给了一个名为“_”的变量,于是程序就不会报错了。

我们也可以给返回值一个名称,这样的话,在程序最后,系统会自动返回这些值。

func getMaxAndMin(a int, b int) (max int, min int) {
	if a < b {
		max, min = b, a
	} else {
		max, min = a, b
	}
	return
}

当数组成为参数时

在Go语言中,向方法中传递的数组并不是一个指向原数组第一个元素的指针,而是一个新的数组。也就是说,这是值传递而非地址传递。

package main

import "fmt"

func main() {
	var a = [6]int{1, 2, 3}
	var b = change(a)
	fmt.Println(a)
	fmt.Println(b)
}

func change(a [6]int) ([6]int) {
	a[0] = 0
	return a
}

运行上传程序,我们发现两个数组中的值不同。

[1 2 3 0 0 0]
[0 2 3 0 0 0]

值得注意的是,在形参中,我们标明了数组长度,如果此时我们将一个长度不同的数组当做参数传入该函数,那么系统会认为这个数组的数据类型与参数类型不同,导致程序报错。

# command-line-arguments
.\main.go:7:16: cannot use a (type [7]int) as type [6]int in argument to change

如果想要直接修改原数组的话,就不能通过值传递了,而是通过传进原数组的地址。

package main

import "fmt"

func main() {
	var a = [6]int{1, 2, 3}
	change(&a)
	fmt.Println(a)
}

func change(a *[6]int) {
	(*a)[0] = 0 
}

运行该程序,我们发现原数组确实改变了。

[0 2 3 0 0 0]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值