GAE for Go,Go Runtime Environment
选择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 最多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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |