第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

HandlerFunc(f)如何將函數(shù)轉(zhuǎn)換為接口類型?

HandlerFunc(f)如何將函數(shù)轉(zhuǎn)換為接口類型?

Go
catspeake 2021-04-04 17:19:22
在檢查以下代碼時(shí),對類型從函數(shù)轉(zhuǎn)換為接口存有疑問。代碼http_hello.go:package mainimport (    "fmt"    "log"    "net/http")// hello http,func helloHttp() {    // register handler,    http.Handle("/", http.HandlerFunc(helloHandler))    // start server,    err := http.ListenAndServe(":9090", nil)    if err != nil {        log.Fatal("ListenAndServe:", err)    }}// handler function - hello,func helloHandler(w http.ResponseWriter, r *http.Request) {    fmt.Fprintf(w, "Hello, you've requested: %s\n", r.URL.Path)}func main() {    helloHttp()}上面的代碼有效。(然后,我嘗試編寫一個(gè)小程序來檢查這是否是一項(xiàng)常規(guī)功能,但無法正常工作,請檢查以下代碼)func_to_intf.go:package mainimport (    "fmt")// an interface,type Adder interface {    add(a, b int) int}// alias of a function signature,type AdderFunc func(int, int) int// a simple add function,func simpleAdd(a, b int) int {    return a + b}// call Adder interface to perform add,func doAdd(a, b int, f Adder) int {    return f.add(a, b)}func funcToIntf() {    fa := AdderFunc(simpleAdd)    fmt.Printf("%#v, type: %T\n", fa, fa)    a, b := 1, 2    sum := doAdd(a, b, fa)    fmt.Printf("%d + %d = %d\n", a, b, sum)}func main() {    funcToIntf()}輸出:./func_to_intf.go:30:14:不能在faAdd的參數(shù)中使用fa(AdderFunc類型)作為Adder類型:AdderFunc沒有實(shí)現(xiàn)Adder(缺少add方法)問題http.HandlerFunc(helloHandler)得到type的值http.Handler,因?yàn)檫@是http.Handle()期望值,這是正確的嗎?如果是,則意味著它將函數(shù)轉(zhuǎn)換為接口類型的值,這是怎么發(fā)生的?這是go的內(nèi)置功能嗎?我做了一個(gè)測試(func_to_intf.go如上),似乎沒有。還是http.HandlerFunc通過特殊的實(shí)現(xiàn)來實(shí)現(xiàn)?
查看完整描述

3 回答

?
慕的地6264312

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超6個(gè)贊

http.HandlerFunc是一種http.Handler通過提供方法滿足接口的類型http.ServeHTTP(ResponseWriter, *Request)

http.HandlerFunc(helloHandler) 是類型轉(zhuǎn)換,用于轉(zhuǎn)換具有相同基礎(chǔ)基本類型但方法集不同的類型。


查看完整回答
反對 回復(fù) 2021-04-19
?
慕蓋茨4494581

TA貢獻(xiàn)1850條經(jīng)驗(yàn) 獲得超11個(gè)贊

正如文檔所說:

HandlerFunc類型是一個(gè)適配器,允許將普通功能用作HTTP處理程序。如果f是具有適當(dāng)簽名的函數(shù),則HandlerFunc(f)是調(diào)用f的處理程序。

因此,它不是一個(gè)函數(shù),而是一個(gè)包裝器類型,聲明為:

type HandlerFunc func(ResponseWriter, *Request)

但是Go允許(而且,這是它最大的功能之一),僅通過定義require方法就可以使任何新聲明的類型實(shí)現(xiàn)任何可能的接口。因此,該類型通過定義方法來HandlerFunc實(shí)現(xiàn)接口。該實(shí)現(xiàn)只調(diào)用包裝的函數(shù)。HandlerServeHttp


查看完整回答
反對 回復(fù) 2021-04-19
  • 3 回答
  • 0 關(guān)注
  • 335 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號