這篇文章將為大家詳細講解有關Golang中函數作為值與類型是什么意思,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
創新互聯公司-專業網站定制、快速模板網站建設、高性價比覃塘網站開發、企業建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式覃塘網站制作公司更省心,省錢,快速模板網站建設找我們,業務覆蓋覃塘地區。費用合理售后完善,十多年實體公司更值得信賴。
在 Go 語言中,我們可以把函數作為一種變量,用 type 去定義它,那么這個函數類型就可以作為值傳遞,甚至可以實現方法,這一特性是在太靈活了,有時候我們甚至可以利用這一特性進行類型轉換。作為值傳遞的條件是類型具有相同的參數以及相同的返回值。
Go 語言的類型轉換基本格式如下:
type_name(expression)
舉個例子:
package main import "fmt" type CalculateType func(int, int) // 聲明了一個函數類型 // 該函數類型實現了一個方法 func (c *CalculateType) Serve() { fmt.Println("我是一個函數類型") } // 加法函數 func add(a, b int) { fmt.Println(a + b) } // 乘法函數 func mul(a, b int) { fmt.Println(a * b) } func main() { a := CalculateType(add) // 將add函數強制轉換成CalculateType類型 b := CalculateType(mul) // 將mul函數強制轉換成CalculateType類型 a(2, 3) b(2, 3) a.Serve() b.Serve() } // 5 // 6 // 我是一個函數類型 // 我是一個函數類型
如上,聲明了一個 CalculateType 函數類型,并實現 Serve() 方法,并將擁有相同參數的 add 和 mul 強制轉換成 CalculateType 函數類型,同時這兩個函數都擁有了 CalculateType 函數類型的 Serve() 方法。
package main import "fmt" type CalculateType func(a, b int) int // 聲明了一個函數類型 // 加法函數 func add(a, b int) int { return a + b } // 乘法函數 func mul(a, b int) int { return a * b } func Calculate(a, b int, f CalculateType) int { return f(a, b) } func main() { a, b := 2, 3 fmt.Println(Calculate(a, b, add)) fmt.Println(Calculate(a, b, mul)) } // 5 // 6
如上例子,Calculate 的 f 參數類型為 CalculateType,add 和 mul 函數具有和 CalculateType 函數類型相同的參數和返回值,因此可以將 add 和 mul 函數作為參數傳入 Calculate 函數中。
// HandleFunc registers the handler function for the given pattern // in the DefaultServeMux. // The documentation for ServeMux explains how patterns are matched. func HandleFunc(pattern string, handler func(ResponseWriter, *Request)) { DefaultServeMux.HandleFunc(pattern, handler) }
// HandleFunc registers the handler function for the given pattern. func (mux *ServeMux) HandleFunc(pattern string, handler func(ResponseWriter, *Request)) { mux.Handle(pattern, HandlerFunc(handler)) }
type HandlerFunc func(ResponseWriter, *Request) // ServeHTTP calls f(w, r). func (f HandlerFunc) ServeHTTP(w ResponseWriter, r *Request) { f(w, r) }
剛開始看到這段源碼的時候,真的有點懵逼了,這段源碼的目的是為了將我們的 Handler 強制實現 ServeHTTP() 方法,如下例子:
func sayHi(w http.ResponseWriter, r *http.Request) { io.WriteString(w, "hi") } func main() { http.HandlerFunc("/", sayHi) http.ListenAndserve(":8080", nil) }
因為 HandlerFunc 是一個函數類型,而 sayHi 函數擁有和 HandlerFunc 函數類型一樣的參數值,因此可以將 sayHi 強制轉換成 HandlerFunc,因此 sayHi 也擁有了 ServeHTTP() 方法,也就實現了 Handler 接口,同時,HandlerFunc 的 ServeHTTP 方法執行了它自己本身,也就是 sayHi 函數,這也就可以看出來了,sayHi 就是 Handler 被調用之后的執行結果。
關于Golang中函數作為值與類型是什么意思就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
文章題目:Golang中函數作為值與類型是什么意思
本文來源:http://m.newbst.com/article48/jpjgep.html
成都網站建設公司_創新互聯,為您提供網站導航、網站建設、關鍵詞優化、網站維護、網站收錄、品牌網站制作
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯