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

相关文章
相关标签/搜索