Files
the-way-to-go_ZH_CN/eBook/20.3.md
Haigang Zhou 1573212775 第二十章和第二十一章的翻译 (#831)
Co-authored-by: Joe Chen <jc@unknwon.io>
2022-05-19 20:05:42 +08:00

111 lines
5.7 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 20.3 安装 Go App Engine SDK为 Go 部署的开发环境
## 20.3.1 安装
从下载页面下载合适你的系统的 GAE SDK 压缩文件https://cloud.google.com/appengine/downloads
例如:你的系统是 64 位的 Linux Ubuntu 11.10 系统,则下载 go_appengine_sdk_linux_amd64-1.6.1.zip 文件。
用 Archieve Manager 打开并且提取出到你选择的一个目录下(例如你的 home 目录):它会创造一个叫做 google_appengine 的文件,其包含了整个 AppEngine for Go 的开发环境。例如在 /home/user/google_appengine 或者 "install root"/google_appengine/goroot 目录下。
这个环境包含了您在本地开发、构建和测试您的应用程序所需的一切:它包括一个 AppEngine 服务器来测试您的应用程序,一个 DataStore用来在这里存储数据就像您最终在 AppEngine 服务器上托管的实时应用程序一样;以及其他 API 支持和工具,使您可以模仿真正的 AppEngine 来进行开发和测试的目的。由于这个 AppEngine 环境是针对 Go 的,它也包含了 适当的 Go 编译器、软件包和工具作为下载的一部分。
<u>GAE-Go 和普通 Go 之间的区别:</u>
GAE-Go 的运行时 (runtime) 提供完整的 Go 语言和几乎所有的标准库,除了一些在 App Engine 环境中没有意义的东西:
- 现在没有 `unsafe` 包了,并且 `syscall` 包被修剪过了。
- 它不支持 cgo不与 C 库交互),甚至:你不能在 GAE 项目中使用任何二进制库Go 或其他)。你需要回溯所有东西的源,直到 GAE 编译/链接到了所有的源代码。
- 不支持 go install 工具
- GAE 经常落后于主发行版一个或多个主要版本。此外,必须考虑到沙盒环境的限制(参考 [20.1 节](20.1.md))。因此,如果尝试打开一个 socket 或写一个文件将返回一个 `os.EINVAL` 错误。
因此,把你的 GAE 和非 GAE-Go 工具完全分开;如果你只做 GAE 开发,你可以完全不使用标准工具。在 google_appengine 目录下有几个 Python 脚本,是 Google App Engine 的基本工作程序。确保它们是可执行的(如果不是,请使用 `chmod +x *.py` 命令)。同时将它们的路径添加到 `PATH` 变量中,以便你在调用它们时不必包含完整的路径:例如,如果你有一个 bash shell在你的 .bashrc 或 .profile 文件中添加一行:
```bash
export PATH=/home/user/google_appengine:$PATH
```
<u>注意:</u>
1) 如果你已经有了一个工作的 Go 环境(就像你在阅读本书时那样),这个 AppEngine 的安装是在它之外的,与它平行而不影响它;特别是您不需要改变您操作系统中的 Go 环境变量。AppEngine 上的 Go 有其自己完全独立的环境,包含自己的 Go 版本(在 "install root"/google_appengine/goroot 目录下)
2) 下载文档也是一个好主意,这样你可以在离线时浏览。从官网下载 google-appengine-docs-20111011.zip 并解压。
3) GAE 大量使用 Python这在 Mac OS X 和 Linux 上默认安装;如果由于某种原因不是这种情况,请从 www.python.org 下载并安装 Python 2.5。
4. 源代码:库和 SDK 是开源的http://code.google.com/p/appengine-go/。用以下方法下载:
```bash
hg clone https://code.google.com/p/appengine-go/
```
5) 一个给定应用程序的所有 Go 包都内置在一个单一的可执行文件中,并且请求调度由 Go 程序本身处理。由 Go 程序本身处理;这与 Java 和 Python SDK 的情况不同。
在 [第 20.8 节](20.8.md),我们将看到如何连接到 GAE 云来部署你的应用程序。但在这你将在你刚刚安装的本地GAE环境中开发、测试和运行你的应用程序这是对开发环境最好的模拟。
### 20.3.2 检查和测试
<u>检查安装:</u>
为了控制一切工作正常,在控制台中进入 google_appengine通过调用 dev_appserver.py 来调用本地 AppEngine 服务器。
如果你看到以下内容:
```
Invalid arguments
Runs a development application server for an application.
dev_appserver.py [options]
Application root must be …
```
则一切正常。
<u>运行一个演示应用程序:</u>
在 SDK 捆绑包中有一些演示应用程序。让我们运行一个以确保一切正常。
- 进入 google_appengine/demos在那里你可以看到一些文件夹例如 helloworld、guestbook 等。
- 在 demos 目录下,执行命令:`dev_appserver.py helloworld`
注意,这将自动编译、链接和运行 Go 程序。
- 有一些警告以及信息 ,但如果最后一行如下:
```
Running helloworld on port 8080: http://localhost:8080
```
就可以了。此时 helloworld 应用程序已经在本地 AppEngine 服务器中被实例化,并且准备好在 `8080` 端口为您机器上的用户提供服务。
- 打开浏览器并访问 http://localhost:8080
如果你看到如下页面:
Hello, World! 세상아 안녕!!
你就已经成功在本地的 GAE 引擎上运行了一个 Go web 应用了。
刚才运行的 Go 源代码如下:
<u>Listing 20.1 helloworld.go:</u>
```go
package helloworld
import (
“fmt”
“net/http”
)
func init() {
http.HandleFunc(“/”, handle)
}
func handle(w http.ResponseWriter, r *http.Request) {
// some Chinese characters after World!
fmt.Fprint(w, “<html><body>Hello, World! 세상아 안녕!! </body></html>”)
}
```
这是一个简单的 web 应用 (参考 [15 章](15.0.md)),其在 `init()` 函数当中就启动了整个的 handler。注意它被它自己的包包含。
## 链接
- [目录](directory.md)
- 上一节:[云上的 Go](20.2.md)
- 下一节:[建造你自己的 Hello world 应用](20.4.md)