选择Go运行时环境
在app.yaml的开头加上如下字段:
runtime: go
api_version: go1
域名
可以通过:http://你的appID.appspot.com访问你的网站
如果有次级域名,为:次级域名.你的appID.appspot.com
App Engine Go API使用标准http包来作为go程序和App Engine的中介
你的程序不应包含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
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