Go语言编程(八)之函数

JoeySheng · · 752 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

   函数构成代码执行的逻辑结构。在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语言中支持多返回值函数。

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

匿名函数和闭包

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




有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:JoeySheng

查看原文:Go语言编程(八)之函数

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

752 次点击  
加入收藏 微博
上一篇:Go-数组
下一篇:golang:errors
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传