00:00” 初尝¶
整起来先! - 嗯嗯嗯,现在可以计时了: 00:00
安装¶
根据: Getting Started - The Go Programming Language
- 选择对应操作系统的版本
- 快速完成安装
$ /usr/local/bin/go version
go version go1.0.1
- 当然,正常的话,是直接 go version 檢查的,,,
根据 Downloads - Google App Engine — Google Developers 下载对应系统的对应SDK
- 比如说笔者就是: go_appengine_sdk_darwin_amd64-1.6.5.zip
$ /opt/sbin/google_appengine_go/go version
go version go1 (appengine-1.6.5)
Hollo World¶
一切语言,好象都流行从 Hollo World! 开始, Go 也一样
参考: Go 指南
package main
import "fmt"
func main() {
fmt.Println("Hollo, 世界")
}
- 使用标准 Go 运行:
$ /usr/local/bin/go run hollo.go
Hollo, 世界
$ /opt/sbin/google_appengine_go/go run hollo.go
Hello, 世界
效果一致! 不过,俺是要丢到 GAE 里运行的,所以要:
本地测试开发服务器¶
参考: 开始Go 的官方文档
- 准备好目录:
urisaok/
+- hollo
| `- hollo.go
`- app.yaml
- 初始化 app.yaml
application: urisago1
version: 1
runtime: go
api_version: go1
handlers:
- url: /.*
script: _go_app
- 照抄 hello.go
package hello
import (
"fmt"
"net/http"
)
func init() {
http.HandleFunc("/", handler)
}
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "Hello, world!")
}
- 运行 GAE 的SDK 中内置开发用服务器:
$ /opt/sbin/google_appengine_go/dev_appserver.py urisaok/
WARNING 2012-05-11 06:42:46,354 urlfetch_stub.py:111] No ssl package found. urlfetch will not be able to validate SSL certificates.
WARNING 2012-05-11 06:42:46,485 rdbms_mysqldb.py:74] The rdbms API is not available because the MySQLdb library could not be loaded.
INFO 2012-05-11 06:42:47,209 appengine_rpc.py:160] Server: appengine.google.com
INFO 2012-05-11 06:42:47,239 appcfg.py:582] Checking for updates to the SDK.
INFO 2012-05-11 06:42:48,350 appcfg.py:600] The SDK is up to date.
Note
(~_~)
- dev_appserver.py 要运行在应用目录之上
- 比如说,俺的开发目录是: ~/Works/go-lang/2GAE/urisaok
- 那么运行 SDK 就应该在: ~/Works/go-lang/2GAE/
- 否则 app.yaml 是找不到的,,,
用 tmux 分割窗口,就可以同时看到 dev_appserver.py 运行日志,以及测试的输出, 如 插图.0-1 用 cURL 测试接口

插图.0-1 用 cURL 测试接口
嗯嗯嗯,看起来和代码写的不一样? 因为...
// ...
func help(w http.ResponseWriter, r *http.Request) {
c := appengine.NewContext(r)
c.Infof("ZQ as::logging for debug as [INFO]")
fmt.Fprint(w, usageHelp)
}
const usageHelp = `
URIsA ~ KSC 4 GAE powdered by go1
{12.04.26}
`
// 如下,可以随时将好奇的运行时数据,吼到 dev_server.py 的运行输出中
c.Infof("ZQ as::logging for debug as [INFO]")
- 并使用了 Constant expressions ~ 常量表达式
- 声明多行文本来输出,比在单行里手工增加 \n \t 什么的格式符要直觉的多...
- PS:
- 而且 GAE 的 SDK 为本地开发调试,内置了非常友愛的功能, 插图.0-2 dev_server.py 会自动编译变动过的代码再运行

插图.0-2 dev_server.py 会自动编译变动过的代码再运行
- 注意观察上方的日志输出
- 一但代码有变动, dev_server.py 能感知到,并先尝试编译再重启!
- 如果没有变动,第二次访问,就没有 building 行为了,,,
部署上线!¶
使用 SDK 内置的部署工具: appcfg.py
$ /opt/sbin/google_appengine_go/appcfg.py update urisaok/
Application: urisago1; version: 1
Host: appengine.google.com
Starting update of app: urisago1, version: 1
Getting current resource limits.
Scanning files on local disk.
Cloning 5 application files.
Uploading 1 files and blobs.
...
Checking if deployment succeeded.
Deployment successful.
Checking if updated app version is serving.
Completed update of app: urisago1, version: 1
随时可以将当前成果部署到 GAE 的应用集群中!
- 当然,首先要激活 GAE 服务~ 使用自个儿的 Gmail 帐号
- 并创建对应的应用,如 插图.0-3 GAE中”我的应用”列表界面 所示

插图.0-3 GAE中”我的应用”列表界面
- 这里的应用名,必须和 app.yaml 中配置的严格一致!
application: urisago1
version: 1
runtime: go
api_version: go1
handlers:
- url: /.*
script: _go_app
然后,就可以访问 GAE 中的应用了,,,
- 如 插图.0-4 对比线上 GAE 应用测试 所示

插图.0-4 对比线上 GAE 应用测试
7:01” 小结¶
不出意外的话, 七分钟 用在这个阶段,很足够了!
dev_server.py 运行起本地应用
`->修订代码
^ `-> cURL 测试
| |
+-----------/
See also
(^.^)
- 如 Hello, World! - Google App Engine — Google Developers 中所述
- _go_app 是个魔法词,会自动找到指定目录中的 *.go 进行编译尝试...