欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

go語言跨域請求 go語言跨平臺

go語言--Goroutines

1、goroutine:在go語言中,每一個并發(fā)的執(zhí)行單元叫做goroutine,如果一個程序中包含多個goroutine,對兩個函數(shù)的調(diào)用則可能發(fā)生在同一時刻

站在用戶的角度思考問題,與客戶深入溝通,找到珠暉網(wǎng)站設(shè)計與珠暉網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:網(wǎng)站設(shè)計、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、域名注冊網(wǎng)站空間、企業(yè)郵箱。業(yè)務(wù)覆蓋珠暉地區(qū)。

2、main goroutine:當一個程序啟動時,其主函數(shù)即在一個單獨的goroutine中運行,我們叫他為main gorountine

3、go goroutine:新的goroutine會用go語句來創(chuàng)建,go+函數(shù)名,go語句會使其語句中的函數(shù)在一新創(chuàng)建的goroutine中運行,而go語句本身會迅速地完成

4、goroutine的退出:主函數(shù)返回時,所有的goroutine都會被直接打斷,程序退出,除了從主函數(shù)退出或者終止程序之外,沒有其他方法能夠讓一個goroutine來打斷另一個的執(zhí)行,但是可以通過另一種方式來實現(xiàn)這個目的,通過goroutine之間的通信來讓一個goroutine請求其他的goroutine,并讓請求的goroutine自行結(jié)束執(zhí)行

GO語言(十三):使用 Go 和 Gin 開發(fā) RESTful API(下)

當客戶端在 發(fā)出POST請求時/albums,您希望將請求正文中描述的專輯添加到現(xiàn)有專輯數(shù)據(jù)中。

為此,您將編寫以下內(nèi)容:

1、編寫代碼

a.添加代碼以將專輯數(shù)據(jù)添加到專輯列表。

在此代碼中:

1)用于Context.BindJSON 將請求正文綁定到newAlbum。

2) album將從 JSON 初始化的結(jié)構(gòu)附加到albums 切片。

3)向響應(yīng)添加201狀態(tài)代碼,以及表示您添加的專輯的 JSON。

b.更改您的main函數(shù),使其包含該router.POST函數(shù),如下所示。

在此代碼中:

1)將路徑中的POST方法與 /albumspostAlbums函數(shù)相關(guān)聯(lián)。

使用 Gin,您可以將處理程序與 HTTP 方法和路徑組合相關(guān)聯(lián)。這樣,您可以根據(jù)客戶端使用的方法將發(fā)送到單個路徑的請求單獨路由。

a.如果服務(wù)器從上一節(jié)開始仍在運行,請停止它。

b.從包含 main.go 的目錄中的命令行,運行代碼。

c.從不同的命令行窗口,用于curl向正在運行的 Web 服務(wù)發(fā)出請求。

該命令應(yīng)顯示添加專輯的標題和 JSON。

d.與上一節(jié)一樣,使用curl檢索完整的專輯列表,您可以使用它來確認添加了新專輯。

該命令應(yīng)顯示專輯列表。

當客戶端向 發(fā)出請求時GET /albums/[id],您希望返回 ID 與id路徑參數(shù)匹配的專輯。

為此,您將:

a.在您在上一節(jié)中添加的函數(shù)下方postAlbums,粘貼以下代碼以檢索特定專輯。

此getAlbumByID函數(shù)將提取請求路徑中的 ID,然后找到匹配的專輯。

在此代碼中:

(1)Context.Param用于從 URL 中檢索id路徑參數(shù)。當您將此處理程序映射到路徑時,您將在路徑中包含參數(shù)的占位符。

(2)循環(huán)album切片中的結(jié)構(gòu),尋找其ID 字段值與id參數(shù)值匹配的結(jié)構(gòu)。如果找到,則將該album結(jié)構(gòu)序列化為 JSON,并將其作為帶有200 OK HTTP 代碼的響應(yīng)返回。

如上所述,實際使用中的服務(wù)可能會使用數(shù)據(jù)庫查詢來執(zhí)行此查找。

(3)如果找不到專輯,則返回 HTTP 404錯誤。

b.最后,更改您的main,使其包含對router.GET的新調(diào)用,路徑現(xiàn)在為/albums/:id ,如以下示例所示。

在此代碼中:

(1)將/albums/:id路徑與getAlbumByID功能相關(guān)聯(lián)。在 Gin 中,路徑中項目前面的冒號表示該項目是路徑參數(shù)。

a.如果服務(wù)器從上一節(jié)開始仍在運行,請停止它。

b.在包含 main.go 的目錄中的命令行中,運行代碼以啟動服務(wù)器。

c.從不同的命令行窗口,用于curl向正在運行的 Web 服務(wù)發(fā)出請求。

該命令應(yīng)顯示您使用其 ID 的專輯的 JSON。如果找不到專輯,您將收到帶有錯誤消息的 JSON。

恭喜!您剛剛使用 Go 和 Gin 編寫了一個簡單的 RESTful Web 服務(wù)。

本節(jié)包含您使用本教程構(gòu)建的應(yīng)用程序的代碼。

GO語言(二十七):管理依賴項(下)-

當您對外部模塊的存儲庫進行了 fork (例如修復(fù)模塊代碼中的問題或添加功能)時,您可以讓 Go 工具將您的 fork 用于模塊的源代碼。這對于測試您自己的代碼的更改很有用。

為此,您可以使用go.mod 文件中的replace指令將外部模塊的原始模塊路徑替換為存儲庫中 fork 的路徑。這指示 Go 工具在編譯時使用替換路徑(fork 的位置),例如,同時允許您保留import 原始模塊路徑中的語句不變。

在以下 go.mod 文件示例中,當前模塊需要外部模塊example.com/theirmodule。然后該replace指令將原始模塊路徑替換為example.com/myfork/theirmodule模塊自己的存儲庫的分支。

設(shè)置require/replace對時,使用 Go 工具命令確保文件描述的需求保持一致。使用go list命令獲取當前模塊正在使用的版本。然后使用go mod edit命令將需要的模塊替換為fork:

注意: 當您使用該replace指令時,Go 工具不會像添加依賴項中所述對外部模塊進行身份驗證。

您可以使用go get命令從其存儲庫中的特定提交為模塊添加未發(fā)布的代碼。

為此,您使用go get命令,用符號@指定您想要的代碼 。當您使用go get時,該命令將向您的 go.mod 文件添加一個 需要外部模塊的require指令,使用基于有關(guān)提交的詳細信息的偽版本號。

以下示例提供了一些說明。這些基于源位于 git 存儲庫中的模塊。

當您的代碼不再使用模塊中的任何包時,您可以停止將該模塊作為依賴項進行跟蹤。

要停止跟蹤所有未使用的模塊,請運行g(shù)o mod tidy 命令。此命令還可能添加在模塊中構(gòu)建包所需的缺失依賴項。

要刪除特定依賴項,請使用go get,指定模塊的模塊路徑并附加 @none,如下例所示:

go get命令還將降級或刪除依賴于已刪除模塊的其他依賴項。

當您使用 Go 工具處理模塊時,這些工具默認從 proxy.golang.org(一個公共的 Google 運行的模塊鏡像)或直接從模塊的存儲庫下載模塊。您可以指定 Go 工具應(yīng)該使用另一個代理服務(wù)器來下載和驗證模塊。

如果您(或您的團隊)已經(jīng)設(shè)置或選擇了您想要使用的不同模塊代理服務(wù)器,您可能想要這樣做。例如,有些人設(shè)置了模塊代理服務(wù)器,以便更好地控制依賴項的使用方式。

要為 Go 工具指定另一個模塊代理服務(wù)器,請將GOPROXY 環(huán)境變量設(shè)置為一個或多個服務(wù)器的 URL。Go 工具將按照您指定的順序嘗試每個 URL。默認情況下,GOPROXY首先指定一個公共的 Google 運行模塊代理,然后從模塊的存儲庫直接下載(在其模塊路徑中指定):

您可以將變量設(shè)置為其他模塊代理服務(wù)器的 URL,用逗號或管道分隔 URL。

Go 模塊經(jīng)常在公共互聯(lián)網(wǎng)上不可用的版本控制服務(wù)器和模塊代理上開發(fā)和分發(fā)。您可以設(shè)置 GOPRIVATE環(huán)境變量。您可以設(shè)置GOPRIVATE環(huán)境變量來配置go命令以從私有源下載和構(gòu)建模塊。然后 go 命令可以從私有源下載和構(gòu)建模塊。

GOPRIVATE或環(huán)境變量可以設(shè)置為匹配模塊前綴的全局模式列表,這些GONOPROXY前綴是私有的,不應(yīng)從任何代理請求。例如:

golang 控制重定向

在Client的字段中,有一個 CheckRedirect ,此字段就是用來控制重定向的函數(shù),如果沒有定義此字段的話,將會使用默認的 defaultCheckRedirect 方法。

默認的轉(zhuǎn)發(fā)策略是最多轉(zhuǎn)發(fā)10次。

在轉(zhuǎn)發(fā)的過程中,某一些包含安全信息的Header,比如 Authorization 、 WWW-Authenticate 、 Cookie 等,如果轉(zhuǎn)發(fā)是跨域的,那么這些Header不會復(fù)制到新的請求中。

http的重定向判斷會默認處理以下狀態(tài)碼的請求:

301 (Moved Permanently)

302 (Found)

303 (See Other)

307 (Temporary Redirect)

308 (Permanent Redirect)

301、302和303請求將會改用Get訪問新的請求,而307和308會使用原有的請求方式。

那么,我們?nèi)绾稳タ刂浦囟ㄏ虻拇螖?shù),甚至是禁止重定向呢?這里其實就需要我們自己去實現(xiàn)一個CheckRedirect函數(shù)了,首先我們來看看默認的defaultCheckRedirect方法:

第一個參數(shù)req是即將轉(zhuǎn)發(fā)的request,第二個參數(shù) via是已經(jīng)請求過的requests。可以看到其中的邏輯是判斷請求過的request數(shù)量,大于等于10的時候返回一個error,這也說明默認的最大重定向次數(shù)為10次,當此函數(shù)返回error時,即是重定向結(jié)束的時候。

所以如果需要設(shè)置重定向次數(shù),那么復(fù)制一份這個函數(shù),修改函數(shù)名字和其中if判斷的數(shù)字,然后在生成Client時設(shè)定到Client即可:

或者:

禁止重定向則可以把判斷數(shù)字修改為0。最好相應(yīng)地修改errors中提示的信息。

gorilla/websocket使用教程

最近打算為我的網(wǎng)站添加一個服務(wù)器資源監(jiān)視功能,需要服務(wù)端主動向前端推動資源占用數(shù)據(jù)。這時Http則不能達到要求。所以自然想到采用websocket。以前使用SpringBoot時使用websocket很簡單,只需要將ServerEndpointExporter注入到bean容器并配合相應(yīng)注解即可創(chuàng)建一個websocket服務(wù)。這里要感謝各位前輩的封裝讓我們能盡快實現(xiàn)相應(yīng)的功能,但本次出于學(xué)習(xí)目并不是公司項目(效率穩(wěn)定性至上)同時使用的開發(fā)語言為Golang,其web開發(fā)生態(tài)也不會像Java那樣豐富,最后選擇了開源實現(xiàn) gorilla/websocket 項目地址

執(zhí)行 go get github.com/gorilla/websocket 添加依賴

我們知道websocket由http升級而來,首先會發(fā)送附帶Upgrade請求頭的Http請求,所以我們需要在處理Http請求時攔截請求并判斷其是否為websocket升級請求,如果是則調(diào)用 gorilla/websocket 庫相應(yīng)函數(shù)處理升級請求。

首相要創(chuàng)建Upgrader實例,該實例用于升級請求

其中 CheckOringin 是一個函數(shù),該函數(shù)用于攔截或放行跨域請求。函數(shù)返回值為 bool 類型,即 true 放行, false 攔截。如果請求不是跨域請求可以不賦值,我這里是跨域請求并且為了方便直接返回 true

此時已經(jīng)成功升級為websocket連接并獲得一個conn實例,之后的發(fā)送接收操作皆有conn完成其類型為websocket.Conn。

首先向客戶端發(fā)送消息使用 WriteMessage(messageType int, data []byte) ,參數(shù)1為消息類型,參數(shù)2消息內(nèi)容

示例:

接受客戶端消息使用 ReadMessage() 該操作會阻塞線程所以建議運行在其他協(xié)程上。該函數(shù)有三個返回值分別是,接收消息類型、接收消息內(nèi)容、發(fā)生的錯誤當然正常執(zhí)行時錯誤為 nil。一旦連接關(guān)閉返回值類型為-1可用來終止讀操作。

示例:

同時可以為連接設(shè)置關(guān)閉連接監(jiān)聽,函數(shù)為 SetCloseHandler(h func(code int, text string) error) 函數(shù)接收一個函數(shù)為參數(shù),參數(shù)為nil時有一個默認實現(xiàn),其源碼為:

可以看到作為參數(shù)的函數(shù)的參數(shù)為int和string類型正好和前端的close(long string)對應(yīng)即前端調(diào)用close(long string)關(guān)閉連接后兩個參數(shù)會被發(fā)送給后端并最終被 func(code int, text string) error 所使用。

示例:

則斷開連接時將打印code和text

注意:要想使斷連處理生效必須要有 ReadMessage() 操作否則不會觸發(fā)斷連處理操作。

以上是常用基礎(chǔ)操作點擊 官方API手冊 學(xué)習(xí)更多。

最后:大幻夢森羅萬象狂氣斷罪眼\ (??) /

go-跨域請求

協(xié)議+域名+端口號都相同才是同域

在 HTML 中,a, form, img, script, iframe, link 等標簽以及 Ajax 都可以指向一個資源地址,而所謂的跨域請求就是指:當前發(fā)起請求的域與該請求指向的資源所在的域不一樣。

如果對跨域請求不做限制,會有安全隱患

跨源資源共享 Cross-Origin Resource Sharing(CORS) 是一個新的 W3C 標準,它新增的一組HTTP首部字段,允許服務(wù)端其聲明哪些源站有權(quán)限訪問哪些資源。換言之,它允許瀏覽器向聲明了 CORS 的跨域服務(wù)器,發(fā)出 XMLHttpReuest 請求,從而克服 Ajax 只能同源使用的限制。

在使用go語言寫測試服務(wù)的時候遇到了前端跨域請求問題,只需在go中加入

http跨域:

當前標題:go語言跨域請求 go語言跨平臺
瀏覽地址:http://www.chinadenli.net/article20/doojsjo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供解決方案面包屑導(dǎo)航微信小程序App設(shè)計軟件開發(fā)手機網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設(shè)