Go编程学习第六天


函数

一、函数定义

在go语言中函数定义格式如下:

func 函数名([参数列表]) [返回值类型]{
     函数主体
}//中括号内是可选参数

eg:
func GetSum(num1 int, num2 int) int { result := num1 + num2 return result }

二、值传递和引用传递

值传递:在函数调用过程中将实参拷贝一份到函数中,这样在函数中如果对参数进行修改,将不会影响到实参
引用传递:在函数调用过程中将实参的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实参。
示例代码:

func paramFunc(a int, b *int, c []int) {
	a = 100
	*b = 100
	c[1] = 100

	fmt.Println("paramFunc:")
	fmt.Println(a)
	fmt.Println(*b)
	fmt.Println(c)
}

func main() {
	a := 1
	b := 1
	c := []int{1, 2, 3}
	paramFunc(a, &b, c)//此处将b的地址传到调用函数,其结果是改变b的值

	fmt.Println("main:")
	fmt.Println(a)
	fmt.Println(b)
	fmt.Println(c)
}

三、变长参数

当在编写函数时不知道传递参数多少可以使用变长参数,在GO语言中变长参数必须放置在函数参数的最后一个
eg:常调用的fmt中的printf函数

func Printf(format string, a ...interface{}) (n int, err error) {
	return Fprintf(os.Stdout, format, a...)
}

四、多返回值

通过返回函数调用结果和错误值,来看函数是否调用成功
eg:

func div(a, b float64) (float64, error) {
	if b == 0 {
		return 0, errors.New("The divisor cannot be zero.")
	}
	return a / b, nil
}

func main() {
	result, err := div(1, 2)
	if err != nil {
		fmt.Printf("error: %v", err)
		return
	}
	fmt.Println("result: ", result)
}

五、命名返回值

即给返回值命名,eg:

func div(a, b float64) (result float64, err error) { 

六、匿名函数

没有名字的函数,可以直接调用,保存到变量,作为参数或者返回值。

七、闭包

一个函数与这个函数外部变量的一个封装
代码如下(示例):

func add() func(int) int { //定义add函数,然后在函数内返回一个匿名函数
	n := 10
	str := "string"   //n,str和匿名函数构成了闭包,也就是从这里初始化后,之后再调用不会重新赋初值
	return func(x int) int {
		n = n + x
		str += strconv.Itoa(x)
		fmt.Print(str, " ")
		return n
	}
}

func main() {
	f := add()
	fmt.Println(f(1))
	fmt.Println(f(2))
	fmt.Println(f(3))

	f = add()
	fmt.Println(f(1))
	fmt.Println(f(2))
	fmt.Println(f(3))
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值