GAE for Go,Go Runtime Environment

選擇Go運行時環境 git


在app.yaml的開頭加上以下字段: github

runtime: go golang

api_version: go1 web


域名 數據庫


能夠經過:http://你的appID.appspot.com訪問你的網站 api

若是有次級域名,爲:次級域名.你的appID.appspot.com 緩存

代碼 服務器


App Engine Go API使用標準http包來做爲go程序和App Engine的中介 app

你的程序不該包含main函數,對request的回覆應寫在init函數裏 函數

包名也不該爲main,同時不可建立或讀取文件

Request


如下header被google服務器攔截並處理了:

Accept-Encoding

Connection

Keep-Alive

Proxy-Authorization

TE

Trailer

Transfer-Encoding

此外,若是域名不是appspot.com或*.appspot.com,下面的header也會被移除:

Strict-Transport-Security

注意:和Request實體相關的header不會處理,好比Content-MD5的值可能錯誤(由於google修改了header,但不會修改該值);

若是request的header有Content-Encoding,google也不會修改它,這時須要你根據該header自行對body解碼。

App Engine還添加了以下的Header:

X-AppEngine-Country 訪問者的國家

X-AppEngine-Region 訪問者的地區

X-AppEngine-City 訪問者的城市

X-AppEngine-CityLatLong 訪問者的經緯值


Response


google服務器會在handler返回後,將ResponseWriter緩存的內容發送給訪問者,App Engine不支持單個request返回流式的數據(所以Hijacker接口是不能用的),且返回的數據不能超過32mb

如下header會被google服務器刪除重設:

Connection

Content-Encoding

Content-Length

Date

Keep-Alive

Proxy-Authenticate

Server

Trailer

Transfer-Encoding

Upgrade

此外,若是域名不是appspot.com或*.appspot.com,下面的header也會被移除:

Strict-Transport-Security

以管理員賬戶訪問網站是,google服務器會添加以下的header:

X-AppEngine-Estimated-CPM-US-Dollars

X-AppEngine-Resource-Usage

X-AppEngine-BlobKey // 可選

X-AppEngine-BlobRange //可選

若是設置了Set-Cookie這個header,google將會設置或修改以下的header:

Cache-Control

Expires

Vary


超時


若是你的程序不能在60秒內回覆request,google將會停止該次訪問


沙箱


你的web程序是在一個沙箱裏運行的,所以你不能操做文件系統;不能調用系統API,必須即時的回覆request

應用的一些限制


單個文件最大32 mb,總大小不得超過1 gb

最多10000個文件,每一個目錄最多1000個文件

request和response的大小不得超過32 mb

request等待回覆的時間不得超過30 s

環境信息


App Engine經過appengine.Context接口提供給使用者運行時的環境信息

該接口的Debugf、Infof、Warningf、Errorf、Criticalf方法能夠進行log

log的信息能夠在管理員控制檯查看,或者使用"appcfg.py request_logs"下載

數據存儲和服務


google不容許程序操做文件系統,做爲替代,提供了多個數據庫:

Datastore

Blobstore

Memcache

以及其餘一些服務:

Channel

Task Queue

URL Fetch

Google Accounts


如何運行一個go appengine程序


在本地運行服務

1)進入寫好的應用目錄(必須有一個app.yaml配置文件),在console裏運行"goapp serve"

2)也能夠在console裏運行"dev_appserver.py myapp"

3)運行"dev_appserver.py --port=xxxx myapp"可指定端口

Users服務

func appengine.NewContext(*http.Request) appengine.Context

返回對應當前請求的上下文環境,該值不透明,但不少App Engine API用到它

func user.Current(appengine.Context) *user.User

返回產生此請求的訪問者的信息,如未登陸google,則會返回nil

func user.CurrentOAuth(appengine.Context, string) *user.User

返回產生此請求的訪問者的信息,該信息由受信任的第三方機構提供

func user.LoginURL(appengine.Context, redirect string) (string, error)

返回一個登陸頁面,該頁面會在登陸成功後,重定向到redirect指定的頁面

Datastore服務

參見:github.com/golang/appengine

參見:github.com/golang/appengine/user

參見:github.com/golang/appengine/datastore

相關文章
相關標籤/搜索