美文网首页
Go语言基础——函数

Go语言基础——函数

作者: 北枫晴天 | 来源:发表于2018-07-04 04:19 被阅读0次

    Go函数的特性

    不支持:嵌套、函数重载、默认值参数
    支持:可变变参、多返回值、命名返回值参数、匿名函数、闭包
    特别注意:函数可以作为一种类型使用

    1.1、函数定义

    func name(parameter-list)(result-list) {
        body
    }
    

    1.2可变参数函数

    可变参数函数就是指函数的最后一个参数可以接受任意个参数。这类函数在最后一个 参数的类型前面添加有一个省略号"..."。在函数里面这个参数实质上变成了一个对应参数类型的切片。

    func Minimumint(first int, rest ...int) int {
        for _, x := range rest {
            if x < first 
            first = x
        }
        return first
    }
    

    1.3多返回值函数

    Go语言支持一个函数能够返回多个结果。

    func findLinks(url string) ([]stning, error) {
        //func body
        return links, err
    }
    

    调用一个多返回值函数,如果调用者要使用这些返回值,则必须显式地将返回值赋给变量。
    如:links, err := findLinks(url)

    忽略其中一个返回值可以将它赋给一个空标识符。
    如:links, _:= findLinks(url) // 忽略错误信息

    返回一个多值结果可以是调用另一个多值返回的函数:

    func findLinksLog(url string) ([]string, error) { 
        log.Printf("findLinks %s", url) 
        return findLinks(url)
    }
    

    1.4命名返回值参数

    Go语言支持返回参数想入参一样进行命名,命名后的返回参数可用作为函数的局部变量使用,并且可用使用return直接返回。

    func f(a, b, c int) (x, y, z int) {
        x = a * b
        y = b * c
        z = c * a
        return //不需要指定返回的变量
    }
    

    1.5 init()函数和 main()函数

    Go语言为特定目的保留了两个函数名:init()函数(可以出现在任何的包里)和main () 函数(只在main包里)。这两个函数既不可接收任何参数,也不返回任何结果。
    init ()函数和main ()函数是自动执行的,所以我们不应该显式调用它们。

    Go程序的启动顺序

    Go程序的初始化和执行总是从main包开始;
    如果main包里导入了其他的包,则会按顺序将它们包含进main包里;
    一个包实际上只会被导入 —次,当一个 包被导入时,如果它自己还导入了其他的包,则还是先将其他的包导入进来,然后再创建这个 包的一些常量和变量。
    后续就是调用init()函数了(如果有多个就调用多次),最终所有的 包都会被导入到main包里(包括这些包所导入的包等),此时main这个包的常量和变量也会 被创建,init()函数会被执行(如果有或者多个的话);
    最后,main包里的main()函数会被执行,程序开始运行。
    启动过程参考下图:


    Go程序启动过程.png

    1.6无函数体函数声明

    在Go的应用中,有可能会看到有些函数的声明没有函数体,说明该函数使用了Go以外的语言实现,这样的声明定义了函数签名。

    func Sin(x float64) float64 //使用汇编语言实现
    

    相关文章

      网友评论

          本文标题:Go语言基础——函数

          本文链接:https://www.haomeiwen.com/subject/btusuftx.html