選擇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