Golang function 函数详解

本文详细介绍了Golang的函数机制,包括函数定义、可变参数、错误处理(如error类型和错误处理策略)、闭包、defer函数的使用,以及panic和recover的交互。通过示例,阐述了如何在Golang中实现函数的多种功能和异常处理,以提高代码的可读性和鲁棒性。
摘要由CSDN通过智能技术生成

前言

对于任何语言而言,函数都是结构化编程中的重要一环,通过函数机制,可以把一个大的模块分解成多个小任务,让代码结构更清晰,可复用性大大提高。

本文将介绍如何定义,调用函数,如何定义和接收函数错误,以及 golang 特有的可变参数,闭包,defer,panic 和 recover 等机制。

函数定义

Golang 的函数基本组成为:函数名,入参列表,函数体,返回参数列表。

func function_name( [parameter list] ) [return_types] {
   
   // 函数体
}

// 如:
// func find_max(num1, num2 int) int {}
// func swap(x, y string) (string, string) {}

如果一个函数所有的返回值都有显式的变量名,那么该函数的return语句可以省略操作数。这称之为 bare return,但是不建议使用这种方法,会导致程序的可读性变差。

func CountWordsAndImages(url string) (words, images int, err error) {
   
	// 函数体
	return          // 等价于 return words, images, err
}

words, images, err := CountWordsAndImages("/test/test.go")
//...

注意:

  1. 每一次函数调用都必须按照声明顺序为所有参数提供实参(参数值)。在函数调用时,Golang 没有默认参数值,也没有任何方法可以通过参数名指定形参。
  2. 默认情况下,Golang 使用的是值传递,因此函数的形参是实参的拷贝, 在调用过程中对形参进行修改不会影响实参。 如果需要在函数中修改变量,需要传入变量的指针。
  3. 跟 Golang 的变量命名规则一致,如果函数名的首字母为大写,函数为可导出函数,可以在包外被调用,如果为小写,则只能在本包内调用。
  4. Golang 的函数可以有多个返回值,调用时需要依次接收,如果有某个回参不需要被使用,必须要在对应位置使用 blank identifier _ 接收。
  5. 函数作为 Golang 中的 first class values,拥有类型,并且可以被赋值给其他变量,本身也可以作为函数的入参和回参。

可变参数

参数数量可变的函数称为为可变参数函数。例如 fmt.Printf() 函数,首先接收一个必备的参数,之后接收任意个数的后续参数。

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

在声明可变参数函数时,只能把可变参数作为参数列表的最后一个参数,在参数类型之前加上省略符号 ...,这表示该函数会接收任意数量的该类型参数。如:

func sum(vals...int) int {
   
    total := 0
    for _, val := range vals {
   
        total += val
    }
    return total
}

fmt.Println
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值