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

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

appengine 的跨平臺 go 代碼

appengine 的跨平臺 go 代碼

Go
SMILET 2022-01-17 17:54:27
什么是合適的方式來創(chuàng)建 FetchUrl/GetURL 函數(shù),該函數(shù)從命令行工作,并通過谷歌應用程序引擎使用其自定義方式獲取 url。我有獲取和處理 URL 上的一些數(shù)據(jù)的基本代碼。我希望能夠從我在桌面上使用的代碼以及部署到應用引擎的代碼中調用它。希望這很清楚,如果沒有,請告訴我并澄清。
查看完整描述

2 回答

?
小怪獸愛吃肉

TA貢獻1852條經驗 獲得超1個贊

如果您有一些代碼在本地機器和 AppEngine 環(huán)境中都可以工作,那么您無需做任何事情。


如果您需要在 AppEngine 上做一些應該或必須做不同的事情,那么您需要檢測環(huán)境并為不同的環(huán)境編寫不同的代碼。


這種檢測和代碼選擇最容易使用構建約束來完成。您可以在.go文件的開頭放置一個特殊的注釋行,它可能會或可能不會編譯和運行,具體取決于環(huán)境。


引用Go 博客:App Engine SDK 和工作區(qū)(GOPATH):


App Engine SDK 引入了一個新的構建約束術語:"appengine". 指定的文件


// +build appengine

將由 App Engine SDK 構建并被 go 工具忽略。相反,指定文件


// +build !appengine

App Engine SDK 會忽略它們,而 go 工具會很高興地構建它們。


例如,您可以有 2 個單獨.go的文件,一個用于 AppEngine,一個用于本地(非 AppEngine)環(huán)境。在兩者中定義相同的函數(shù)(具有相同的參數(shù)列表),因此無論在哪個環(huán)境中構建代碼,該函數(shù)都會有一個聲明。我們將使用這個簽名:


func GetURL(url string, r *http.Request) ([]byte, error)

請注意,*http.Request僅 AppEngine 需要第二個參數(shù) ( )(以便能夠創(chuàng)建 a Context),因此在本地環(huán)境的實現(xiàn)中不使用它(甚至可以是nil)。


一個優(yōu)雅的解決方案可以利用http.Client在標準環(huán)境和 AppEngine 中都可用的類型,并且可以用于執(zhí)行 HTTP GET 請求。一個http.Client值可以在不同的AppEngine被收購,但一旦我們有一個http.Client值,我們可以繼續(xù)以同樣的方式。所以我們將有一個通用代碼來接收一個http.Client并可以完成其余的工作。


示例實現(xiàn)如下所示:


url_local.go:


// +build !appengine


package mypackage


import (

    "net/http"

)


func GetURL(url string, r *http.Request) ([]byte, error) {

    // Local GetURL implementation

    return GetClient(url, &http.Client{})

}

url_gae.go:


// +build appengine


package mypackage


import (

    "google.golang.org/appengine"

    "google.golang.org/appengine/urlfetch"

    "net/http"

)


func GetURL(url string, r *http.Request) ([]byte, error) {

    // Appengine GetURL implementation

    ctx := appengine.NewContext(r)

    c := urlfetch.Client(ctx)

    return GetClient(url, c)

}

url_common.go:


// No build constraint: this is common code


package mypackage


import (

    "net/http"

)


func GetClient(url string, c *http.Client) ([]byte, error) {

    // Implementation for both local and AppEngine

    resp, err := c.Get(url)

    if err != nil {

        return nil, err

    }

    defer resp.Body.Close()

    body, err := ioutil.ReadAll(resp.Body)

    if err != nil {

        return nil, err

    }

    return body, nil

}


查看完整回答
反對 回復 2022-01-17
?
小唯快跑啊

TA貢獻1863條經驗 獲得超2個贊

golang/appengine您可以在項目本身中獲得一些線索。

例如,它remote_api/client.go為客戶端提供遠程連接到用戶的生產應用程序。


查看完整回答
反對 回復 2022-01-17
  • 2 回答
  • 0 關注
  • 258 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號