FetchUrl/GetURL関数を作成するには適切な方法はありますか?コマンドラインから動作し、URLを取得するカスタム方法でgoogleアプリケーションエンジンから動作します。appengineのクロスプラットフォームgoコード
URLのデータを取得して処理するための基本コードがあります。私は自分のデスクトップ上で使用するコードから呼び出すことができ、コードはアプリエンジンにデプロイすることができます。
うまくいけば、私に知らせて邪悪を明確にしてください。
FetchUrl/GetURL関数を作成するには適切な方法はありますか?コマンドラインから動作し、URLを取得するカスタム方法でgoogleアプリケーションエンジンから動作します。appengineのクロスプラットフォームgoコード
URLのデータを取得して処理するための基本コードがあります。私は自分のデスクトップ上で使用するコードから呼び出すことができ、コードはアプリエンジンにデプロイすることができます。
うまくいけば、私に知らせて邪悪を明確にしてください。
ローカルマシンとAppEngine環境の両方で動作するコードがある場合は、何もしません。
AppEngine上で別のやり方で行う必要があるか、または異なる必要がある場合は、環境を検出し、さまざまな環境に異なるコードを書き込む必要があります。
この検出とコードの選択は、build constraintsを使用すると最も簡単です。 .go
ファイルの先頭に特別なコメント行を置くことができ、環境に応じてコンパイルされ、実行されない場合があります。
The Go Blog: The App Engine SDK and workspaces (GOPATH)からの引用:"appengine"
:
のApp Engine SDKは、新しいビルド制約用語を紹介します。
のファイルは、App Engine SDKによって作成され、goツールでは無視されます。 GOツールは喜んでそれを構築する一方、逆に、
// +build !appengine
を指定したファイルは、App EngineのSDKによって無視されます。
たとえば、2つの別々の.go
ファイルをAppEngineとローカル(AppEngine以外の)環境用に作成できます。 (同じパラメータリストを使用して)両方で同じ関数を定義するので、コードがどの環境に構築されていても、関数は1つの宣言を持ちます。それが使用されていない地元のenvの実装におけるので、第二パラメータ(*http.Request
が)のみ(Context
を作成することができるようにするために)AppEngineのために必要であることを
func GetURL(url string, r *http.Request) ([]byte, error)
注:私たちは、この署名を使用します。 (nil
でも可能です)。
標準的な環境とAppEngineの両方で利用可能で、HTTP GET要求を行うために使用できるhttp.Client
タイプを利用することができます。 http.Client
の値はAppEngineで異なる方法で取得できますが、一度値がhttp.Client
になると同じ方法で処理できます。だから我々はhttp.Client
を受け取り、残りをすることができる共通のコードを持つでしょう。あなたが行ってきました
// 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
}
golang/appengine
プロジェクト自体にいくつかの手がかりを得ることができます。
たとえば、remote_api/client.go
は、ユーザーの運用アプリケーションにリモートで接続するためのクライアントを提供します。
:
url_local.go
:url_gae.go
:url_common.go
実装例は次のようになります。例を含めることによって、その答えについてはそれ以上のものがあります。私は '+ + build'を使用する能力を知らなかった。本当にありがとう。 – Jacob