Go语言函数

http://www.jb51.net/article/56831.htm

Go语言中的函数有系统函数和自定义函数。

1、系统函数

系统函数就是Go语言自带的函数,系统函数一般根据功能封装在不同的包内,比如Print、Printf、Println都在fmt包内,Abs、Sin都在math包内,Listen、Dial都在net包内等等。如果要使用系统函数,就要引入相关的包。看下面代码:

package main

import "fmt"
import "math"

func main() {
    a := math.Abs(-1)
    fmt.Println(a)
}

其实程序的最初入口main函数其实也是定义在一个包内,就叫main包。

注意:如果没有使用包内的资源而导入这个包,这在Go语言是不允许的,系统会报出错误信息。

2、自定义函数

Go语言中的函数和C最大的不同点在于可以返回多个值。

函数格式:

自定义函数使用关键词func,定义的格式如下:

func 函数名(参数1 参数1类型, 参数2 参数2类型,...) (返回值类型1,返回值类型2,...) {
    函数体
    return var1, var2 ....
}
  • 函数名:就是函数的名称, 由字母、数字、下划线组成,其中首个字母不能为数字。在同一个包内,函数名称不能重名。
  • 参数:声明参数要指明类型,如果所有参数一致,则只要在最后加上1个类型声明就可以了。
  • 返回值:其中var1,var2,…的数据类型要分别和返回类型1,返回类型2,…相同。如果只有一个返回值,在声明返回值类型时可以不用小括号。

求两个数的和的函数示例:

func Sum(a, b int) int { //这边a, b是都是int型,所有在最后加上一个int就可以了
    return a + b
}

指明返回值名称的函数示例:

Go语言中的函数还有一个有意思的特性,如果在返回值类型声明中,直接指明返回值名称,那么在return语句中就不需要显示返回参数。如下例:

func Power(a int) (result int) { 
    result = a * a
    return 
}

上例中指明了返回值的名称,所以在函数中可以不用声明result就直接使用,在函数返回时直接return就可以了。注意:如果指明返回值名称,即使只有一个返回值,也要用小括号括起来。

多个返回值的函数示例:

这个函数是用来求一个整形数组中的最小值和最大值的。

func ExtremumInArray(array []int) (int, int) {
    if len(array) < 1 {
        return 0, 0
    }
    min := array[0]
    max := array[0]
    for _, v := range array {
        if v < min {
            min = v
        } else if v > max {
            max = v
        }
    }
    return min, max
}

调用时,用逗号分隔返回的变量就可以了。

min, max := ExtremumInArray(array)
### Go语言函数的使用与特性 Go语言中的函数是其核心特性之一,支持多种用法和特性,包括但不限于高阶函数、闭包、多返回值等。以下是关于Go语言函数特性的详细介绍: #### 1. 函数的基本定义与调用 Go语言中的函数可以通过`func`关键字定义。一个最简单的函数既没有参数也没有返回值[^3]。例如: ```go package main import "fmt" func sayHello() { fmt.Println("Hello, Go!") } func main() { sayHello() } ``` #### 2. 高阶函数 Go语言支持将函数作为参数传递或返回函数,这种特性被称为高阶函数[^4]。以下是一个示例,展示了如何将函数作为参数传递: ```go package main import "fmt" func operate(a, b int, op func(int, int) int) int { return op(a, b) } func main() { sum := operate(4, 2, func(x, y int) int { return x + y }) fmt.Println("Sum:", sum) } ``` 上述代码中,匿名函数被作为参数传递给`operate`函数,并在其中执行逻辑。 #### 3. 多返回值 Go语言支持函数返回多个值,这在其他语言中并不常见[^4]。例如: ```go package main import "fmt" func swap(x, y string) (string, string) { return y, x } func main() { a, b := swap("Hello", "World") fmt.Println(a, b) } ``` #### 4. 闭包 闭包是指可以捕获外部变量的函数Go语言支持闭包,允许函数访问其作用域之外的变量[^5]。例如: ```go package main import "fmt" func counter() func() int { x := 0 return func() int { x++ return x } } func main() { increment := counter() fmt.Println(increment()) // 输出 1 fmt.Println(increment()) // 输出 2 } ``` #### 5. 可变参数函数 Go语言支持定义可变参数的函数,通过`...interface{}`实现[^2]。例如: ```go package main import "fmt" func myfunc(args ...interface{}) { for _, arg := range args { fmt.Println(arg) } } func main() { myfunc("Hello", 42, true) } ``` #### 6. 类型安全的任意类型传递 Go语言通过`interface{}`类型实现任意类型的数据传递,同时保持类型安全。例如: ```go package main import "fmt" func printValue(value interface{}) { fmt.Println(value) } func main() { printValue(42) printValue("Go语言") } ``` ### 总结 Go语言中的函数具有丰富的特性,包括高阶函数、闭包、多返回值、可变参数等。这些特性使得Go语言在处理复杂逻辑时更加灵活和高效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值