您好,登錄后才能下訂單哦!
本篇內容主要講解“如何使用Go語言中的普通的函數”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“如何使用Go語言中的普通的函數”吧!
在 Go 語言中普通函數的定義格式為 func [函數名](入參)(出參),如下:
func callFuncA(x, y string) (s string, err error) { return x + y, nil } func main() { callFuncA("炸", "煎魚") }
在示例代碼中聲明了一個函數名為 callFuncA 的方法,他只允許在包內調用,因此首字母為小寫。
其具有兩個入參,分別是 x 和 y,類型都為 string。而出參為變量 s 和 err,類型分別為 string 和 error。
另外在函數體內返回值時,也可以采用快捷返回的方式:
func callFuncA(x, y string) (s string, err error) { s = x + y return }
在出參時所聲明的變量名稱,是可以應用到自身函數的。因此若直接執行 return 則會隱式返回已經聲明的出參變量。
在函數定義時,其入參還支持可變參數的語法:
func callFuncA(x ...string) (s string, err error) { s = strings.Join(x, ",") return } func main() { fmt.Println(callFuncA("炸", "煎魚")) }
在入參變量上聲明為 x ...string,則表示變量 x 是 string 類型的可變變量,能夠在入參時傳入多個 string 參數。
可變變量所傳入的格式為切片(slice)類型,該類型我們會在后面的章節進行講解,你可以理解為不受長度限制的動態數組:
[0: 炸 1: 煎魚]
一般對可變變量的常見后續操作多是循環遍歷處理,又或是進行拼接等操作。
Go 語言也默認支持匿名函數的聲明,聲明的方式與普通函數幾乎一樣:
func main() { s := func(x, y string) (s string, err error) { return x + y, nil } s("炸", "煎魚") }
匿名函數可以在任意地方聲明,且不需要定義函數名,如果在函數體后馬上跟 () 則表示聲明后立即執行:
func main() { s, _ := func(x, y string) (s string, err error) { return x + y, nil }("炸", "煎魚") }
而在所有的函數類使用中,有一點非常重要,那就是函數變量作用域的理解:
func main() { x, y := "炸", "煎魚" s, _ := func() (s string, err error) { return x + y, nil }() fmt.Println(s) }
該匿名函數沒有形參,函數內部沒有定義相應的變量,此時其讀取的是全局的 x、y 變量的值,輸出結果是 “炸煎魚”。
func main() { x, y := "炸", "煎魚" _, _ = func(x, y string) (s string, err error) { x = "吃" return x + y, nil }(x, y) fmt.Println(x, y) }
該匿名函數有形參,但是在函數內部又重新賦值了變量 x。那么最終外部所輸出的變量 x 的值是什么呢?輸出結果是 “炸 煎魚”。
為什么明明在函數內已經對變量 x 重新賦值,卻依然沒有改變全局變量 x 的值呢?
其本質原因是作用域不同,函數內部所修改的變量 x 是函數內的局部變量。而外部的是全局的變量,所歸屬的作用域不同。
在結合結構體(struct)的方式下,可以聲明歸屬于該結構體下的方法:
type T struct{} func NewT() *T { return &T{} } func (t *T) callFuncA(x, y string) (s string, err error) { return x + y, nil } func main() { NewT().callFuncA("炸", "煎魚") }
具體的函數的使用方法與普通函數一樣,無其他區別。
而與結構體有關的值傳遞、引用傳遞的方法調用將在具體后面的章節再展開。
Go 語言本身有支持一些內置函數,這些內置函數的調用不需要引用第三方標準庫。內置函數的作用是用于配合 Go 語言的常規使用,數量非常少。如下:
用于獲取某些類型的長度和容量:len、cap。
用于創建并分配某些類型的內存:new、make。
用于錯誤處理機制(異常恐慌、異常捕獲):panic、recover。
用于復制和新增切片(slice):copy、append。
用于簡單輸出信息:print、println。
用于處理復數:complex、real、imag。
針對每個內置函數的真實使用場景,我們會在后續的章節再進一步展開,因為每個內置函數本質上都對應著各類型的使用場景。
到此,相信大家對“如何使用Go語言中的普通的函數”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。