选择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