Chinaunix首页 | 论坛 | 博客
  • 博客访问: 162363
  • 博文数量: 29
  • 博客积分: 1477
  • 博客等级: 上尉
  • 技术积分: 578
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-23 10:42
文章分类
文章存档

2015年(1)

2014年(4)

2013年(3)

2012年(1)

2011年(1)

2009年(19)

我的朋友

分类: 系统运维

2012-05-25 23:06:26

本文介绍了在本机搭建Google app engine的go语言(golang)开发环境的方法。
1. 下载SDK和文档
你需要两个文件,一个是SDK,是一个本地的开发包。另一个是google app engine的文档,里面有google app engine的相关api。
GAE Go SDK下载
Linux 64-bit        28.7 MB        
Linux 32-bit        29.0 MB        
Mac OS X 64-bit        27.0 MB        
Mac OS X 32-bit        27.4 MB        
GAE 文档下载

国内网盘下载
鉴于国内的网络状态,代码辛苦下载到一半被重置链接是很有可能,故而提供坚果云网盘的下载连接:
  
2. 安装SDK
SDK的运行需要python 2.x版本的支持。python的安装本文不做介绍。
该SDK只需解压即可工作,无需安装。但使用中需要mysql的支持,否则会出错,该部分内部参考troubleshooting。
3. Hello world HTTP服务器
目录结构及代码
创建一个文件夹mapp,在下面再创建一个文件夹hello,在hello里创建文件hello.go,在myapp文件夹下创建文件app.yaml,整个目录树的结构如下:
myapp/
  app.yaml
  hello/
    hello.go

hello.go内容如下:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
package hello
 
import (
    "fmt"
    "net/http"
)
 
func init() {
    http.HandleFunc("/", handler)
}
 
func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprint(w, "Hello, world!")
}
app.yaml的内容如下:
1
2
3
4
5
6
7
8
application: helloworld
version: 1
runtime: go
api_version: go1
 
handlers:
- url: /.*
  script: _go_app

代码解析
hello.go的代码与一个正常的go语言本地版本区别有两处,一是包名称为hello,而不是main,二是主函数的名字不是main而是init。作为一个云平台,GAE需要自己控制程序的运行,因为main函数由GAE定义,而你的程序从哪个函数开始运行你只需告诉GAE就行了。GAE会调用你的程序,并在你的程序出现安全问题时结束它。
app.yaml是一个配置文件:
application:你的应用的ID
version:你的应用的版本
runtime:你的应用使用的语言
api_version:现在只能为go1,为api的版本。
handlers:- url: /.*所有的URL都由你的程序处理。
_go_app:是一个magic string,它由dev_appserver.py识别
代码测试
命令:/path/to/google_appengine/dev_appserver.py myapp/
如果命令成功执行的话,直接在浏览器访问:,就可以看到打印的hello world了。
如果命令执行不成功的话,你还得跟着我troubleshooting。
经过troubleshooting如果成功的话,结果会是这样:


troubleshooting
问题:WARNING: The rdbms API is not available because the MySQLdb library could not be loaded.
答案:出现这个问题说明你的python没有mysql支持。
  1. 安装mysql: sudo apt-get install libmysqlclient15-dev
  2.   安装pip:sudo apt-get install python-pip
  3.   安装mysql-python: sudo pip install mysql-python
问题:Error Unknown url handler type. ......in "../myapp/app.yaml", line 8, column 11
答案:上述app.yaml脚本的第八行script前面要有两个空格,- url在-和url之间有一个空格,每个冒号后面有一个空格。
yaml格式的要求太严格了,一定要按规则写。
问题:Allow dev_appserver to check for updates on startup? (Y/n): 
答案:问你要不要检查更新,随你吧,我选的n。更新时万一又被reset链接就麻烦了。
yaml文件规则
关于app.yaml文件,可以参考https://developers.google.com/ap ... on/config/appconfig
便利性开发
我们运行命令在本地打开你的应用,当你修改代码时,不必关了重新打开一下,SDK会检测你代码的改,并自动重新编译。在保持程序运行的情况下,修改代码中的hello world为其他字符串,刷新浏览器吧~。
4. 部署代码到GAE上
注册GAE的网址是:,在注册完成后,你会得到一个应用ID,你的应用所有的网址是,编译你的app.yaml文件,将application域的值改为你的应用ID。
上传你的应用的命令是:appcfg.py update myapp/ appcfg.py会分析你的app.yaml配置文件,按照里面指定的id,上传到你的应用空间里。
如果一切顺利的话,访问:即可以看到你的应用结果。
1用户服务集成了google的用户账户,你可以在应用中直接调用google的账户服务来管理你应用的账户。 本文继承了Google app engine Go语言开发环境搭建中的代码,在其基础上作修改而成。 [mw_shl_code=java,true]package hello import ( \"appengine\" \"appengine/user\" \"fmt\" \"net/http\" ...|2go语言的http包处理表单。本文继承了Google app engine Go语言开发环境搭建中的代码,在其基础上作修改而成。 [mw_shl_code=java,true]package hello import ( \"fmt\" \"html/template\" \"net/http\" ) func init() { http.HandleFunc(\"/\", root) http.HandleFunc(\"/sign ...|3如果你有一个大型应用的话,数据可能会存在多台主机了,互相之间的数据通信麻烦得要死,不过有GAE的话你就不用管,这些东西都交给google处理好了。 本文继承了Google app engine Go语言开发环境搭建中的代码,在其基础上作修改而成。 该程序完成的是一个简单的网络留言本,根目录处理程序将留言组织成Greating结构,post给 ...
阅读(5746) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~