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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

無法理解 go 函數(shù)調(diào)用語法

無法理解 go 函數(shù)調(diào)用語法

Go
UYOU 2021-12-27 17:03:27
我在這里找到了這個例子:func(*myHandler) ServeHTTP(writer http.ResponseWriter, request *http.Request) {    // What does this line do??    if h, ok := route[request.URL.String()]; ok {        h(writer, request)        return    }    io.WriteString(writer, "my server: " + request.URL.String())}我對這一行感到非常困惑:if h, ok := route[request.URL.String()]; ok { h(writer, request) }首先,ok在將其分配給的結(jié)果后聲明如何在語法上有效route()?第二,如果h是由 返回的route(),如何在ok???的定義中使用?我對此感到非常困惑。地鼠們,請幫忙。
查看完整描述

2 回答

?
拉風(fēng)的咖菲貓

TA貢獻1995條經(jīng)驗 獲得超2個贊

看看Go 之旅中的這個頁面。它解釋說:


就像for,該if語句可以以在條件之前執(zhí)行的短語句開始。


鑒于你的例子:


h, ok := route[request.URL.String()]; ok { ... }

簡短的聲明是h, ok := route[request.URL.String()]。在;后商標(biāo)的簡短聲明的結(jié)尾。在ok隨后的條件。如果為真,則執(zhí)行代碼塊{...}。在該代碼塊中,您可以使用在短語句中分配的所有變量。


首先,ok在將其分配給的結(jié)果后聲明如何在語法上有效route()?


ok賦值后不聲明。它是一個布爾值,用于條件中。


第二,如果h is returned byroute() , how can it be used in the definition ofok`???


這不是 的定義ok。它是if語句的代碼塊。


考慮這種替代的,幾乎等效的寫作風(fēng)格:


h, ok := route[request.URL.String()]

if ok {

    h(writer, request)

    return

}

這很清楚,對吧?我們只是將原始代碼拆分為兩步。但這不一樣。以這種方式編寫時,h和ok變量在if語句之后可見。這是不可取的。將變量的可見性(也稱為live time)最小化是一種很好的做法。變量可見的時間越長,它可能被意外誤用的漏洞窗口就越長。Go 的這種語法真是太棒了,天才,而且我不知道任何其他語言if可以實現(xiàn)這種語句。



查看完整回答
反對 回復(fù) 2021-12-27
?
MYYA

TA貢獻1868條經(jīng)驗 獲得超4個贊

首先:您應(yīng)該完成 Go Tour - 特別是地圖部分:https : //tour.golang.org/moretypes/16

這里的“逗號,好的”習(xí)語旨在檢查映射中是否存在密鑰。對不存在的鍵進行查找會導(dǎo)致恐慌(并且可能會使您的應(yīng)用程序崩潰)。

if h, ok := route[request.URL.String()]; ok { h(writer, request) }

  • 如果request.URL.String()存在,設(shè)置h并設(shè)置ok為true。

  • 如果ok為真,則調(diào)用函數(shù)h

  • 否則,將 URL 寫入響應(yīng)(并且什么也不做)。


查看完整回答
反對 回復(fù) 2021-12-27
  • 2 回答
  • 0 關(guān)注
  • 185 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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