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


转载于:https://my.oschina.net/liudiwu/blog/210506

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值