Go語言編程(八)之函數

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

   函數構成代碼執行的邏輯結構。在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語言中支援多傳回值函數。

如果調用方調用了一個具有多傳回值的方法,但是卻不想關心其中的某個傳回值,可以簡單地用一個底線來跳過這個傳回值。

匿名函數和閉包

匿名函數是指不需要定義函數名稱的一種函數實現方式。



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.