Go语言编程(八)之函数

   函数构成代码执行的逻辑结构。在Go语言中,函数的基本组成为:关键字func、函数名、参数列表、返回值、函数体和返回语句。

函数定义

   使用一个最简单的加法函数来进行详细说明:

package main
import (
    "errors"
    "fmt"
)
func Add(a int, b int) (ret int, err error) {
    if a < 0 || b < 0 {
        err = errors.New("Should be non-negative numbers!")
        return
    }
    return a + b, nil // 支持多返回值
}
如果参数列表中若干个相邻的参数类型相同,比如上面例子中的a和b,则可以在参数列表中省略前面变量的类型声明,如下所示:

func Add(a, b int)(ret int, err error){
    // 
}
如果返回值列表中多个返回值的类型相同,也可以用同样的方式合并。

如果一个函数只有一个返回值,也可以这么写:

func Add(a, b int) int {
    // 
}
函数调用

函数调用非常简单,只要事先导入该函数所在的包,就可以直接按照如下方式调用函数:

import "mymath"    
c := mymath.Add(1,2)
注意一点,小写字母开头的函数只在本包内可见,大写字母开头的函数才能被其他包使用。这个规则也适用于类型和变量的可见性。

不定参数

不定参数是指传入的参数个数为不定数量。为了做到这点,首先需要将函数定义为接受不定参数类型:

func myfunc(args ...int) {
    for _, arg := range args {
        fmt.Println(arg)
    }
}
这段代码的意思是,函数myfunc()接受不定数量的参数,这些参数的类型全部是int,所以它可以用如下方式调用:

myfunc(2, 3, 4)
myfunc(1, 3, 7, 13)
形如...type格式的类型只能作为函数的参数类型存在,并且必须是最后一个参数。

之前的例子中将不定参数类型约束为int,如果你希望传任意类型,可以指定类型为interface{}。下面是Go语言标准库中fmt.Printf()的函数原型:

func Printf(format string, args ...interface{}) {
    //
}
以下是一个完整的例子:

// varg1
package main
 
import (
    "fmt"
)
 
func MyPrintf(args ...interface{}) {
    for _, arg := range args {
        switch arg.(type) {
        case int:
            fmt.Println(arg, "is an int value.")
        case string:
            fmt.Println(arg, "is a string value.")
        case int64:
            fmt.Println(arg, "is an int64 value.")
        default:
            fmt.Println(arg, "is an unknown type.")
        }
    }
}
 
func main() {
    var v1 int = 1
    var v2 int64 = 234
    var v3 string = "hello"
    var v4 float32 = 1.234
 
    MyPrintf(v1, v2, v3, v4)
}

多返回值

Go语言中支持多返回值函数。

如果调用方调用了一个具有多返回值的方法,但是却不想关心其中的某个返回值,可以简单地用一个下划线来跳过这个返回值。

匿名函数和闭包

匿名函数是指不需要定义函数名称的一种函数实现方式。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值