This commit is contained in:
Unknwon
2015-03-11 11:02:50 -04:00
parent 0b8840439e
commit b493fa5d4f
5 changed files with 11 additions and 66 deletions

View File

@@ -9,7 +9,7 @@
## 翻译进度 ## 翻译进度
9.10 [Go 的外部包和项目](eBook/09.10.md) 9.11 [Go 程序中使用外部库](eBook/09.11.md)
## 支持本书 ## 支持本书

View File

@@ -45,4 +45,4 @@ func main() {
- [目录](directory.md) - [目录](directory.md)
- 上一节:[map 的排序](08.5.md) - 上一节:[map 的排序](08.5.md)
- 下一章:[](09.0.md) - 下一章:[package](09.0.md)

View File

@@ -1,64 +1,6 @@
# 9.11 在 Go 程序中使用外部库 # 9.11 在 Go 程序中使用外部库
(本节我们将创建一个 web 应用和它的 Google App Engine 版本,在第 19 和 21 章分别说明,当你阅读到这些章节时可以再回到这个例子。) (本节我们将创建一个 web 应用和它的 Google App Engine 版本,在第 19 和 21 章分别说明,当你阅读到这些章节时可以再回到这个例子。)
219
(本节我们将创建一个web应用和它的Google App Engine版本,在第19和21章分别说明当你阅读到这些章节时可以再回到这个例子。) 当开始一个新项目或增加新的功能到现有的项目你可以通过在应用程序中使用已经存在的库来节省开发时间。为了做到这一点你必须理解库的API应用编程接口那就是库中有哪些方法可以调用如何调用。你可能没有这个库的源代码但作者肯定有记载的API以及详细介绍了如何使用它。
当开始一个新项目或增加新的功能到现有的项目你可以通过在应用程序中使用已经存在的库来节省开发时间。为了做到这一点你必须理解库的API应用编程接口那就是库中有哪些方法可以调用如何调用。你可能没有这个库的源代码但作者肯定有记载的API以及详细介绍了如何使用它。
作为一个例子我们将使用谷歌的API的urlshortener编写一个小程序你可以尝试一下在http://goo.gl/输入一个像"http://www.destandaard.be"这样的URL你会看到一个像"http://goo.gl/O9SUO"这样更短的URL返回也就是说在Twitter之类的服务中这是非常容易嵌入的。谷歌urlshortener服务的文档可以在"http://code.google. com/apis/urlshortener/"找到。 (第19章我们将开发自己版本的urlshortener)。
谷歌将这项技术提供给其他开发者作为API我们可以在我们自己的应用程序中调用释放到指定的限制。他们也生成了一个Go语言客户端库使其变得更容易。
备注谷歌让通过使用Google API Go客户端服务的开发者生活变得更简单Go客户端程序自动生成于Google库的JSON描述。更多详情在http://code.google.com/p/google-api-go-client/。
下载并安装Go客户端库:
将通过go install实现。但是首先要验证环境变量中是否含有GOPATH变量因为外部源码将被下载到$GOPATH/src目录下并被安装到$GOPATH/PKG/"machine_arch"/目录下。
我们将通过在终端调用以下命令来安装API:
go install google-api-go-client.google.com/hg/urlshortener/v1
go install将下载源码编译并安装包
(在Linux Ubuntu下使用6g r60 9841安装是可以的,被安装文件被放在pkg/linux_amd64下)
使用urlshortener服务的web程序:
现在我们可以通过导入并赋予别名来使用已安装的包import urlshortener "google-api-go-client.googlecode.com/hg/urlshortener/v1"
现在我们写一个web应用(参见第十五章4-8节)通过表单实现短地址和长地址的相互转换。我们将使用template包并写三个处理函数root函数通过执行表单模板来展示表单。short函数将长地址转换为短地址long函数逆向转换。
要调用urlshortener接口必须先通过http包中的默认客户端创建一个服务实例urlshortenerSvc
urlshortenerSvc, _ := urlshortener.New(http.DefaultClient)
我们通过调用服务中的Url.Insert中的Do方法传入包含长地址的Url数据结构从而获取短地址
url, _ := urlshortenerSvc.Url.Insert(&urlshortener.Url{LongUrl: longUrl}).Do()
返回url的Id便是我们需要的短地址。
我们通过调用服务中的Url.Get中的Do方法传入包含短地址的Url数据结构从而获取长地址
url, error := urlshortenerSvc.Url.Get(shwortUrl).Do()
返回的长地址便是转换前的原始地址。
实例 9.9 [urlshortener.go](examples/chapter_9/urlshortener.go)
package main
import (
“fmt”
“net/http”
“text/template”
rlshortener “google-api-go-client.googlecode.com/hg/urlshortener/v1”
)
func main() {
http.HandleFunc(“/”, root)
http.HandleFunc(“/short”, short)
http.HandleFunc(“/long”, long)
http.ListenAndServe(“localhost:8080”, nil)
}
// the template used to show the forms and the results web page to the user
var rootHtmlTmpl = template.Must(template.New(“rootHtml”).Parse(`

3
eBook/10.0.md Normal file
View File

@@ -0,0 +1,3 @@
# 10 结构struct与方法method
224

View File

@@ -84,7 +84,7 @@
- 9.9 [通过 git 打包和安装](09.9.md) - 9.9 [通过 git 打包和安装](09.9.md)
- 9.10 [Go 的外部包和项目](09.10.md) - 9.10 [Go 的外部包和项目](09.10.md)
- 9.11 [在 Go 程序中使用外部库](09.11.md) - 9.11 [在 Go 程序中使用外部库](09.11.md)
- 第10章结构struct与方法method - 第10章[结构struct与方法method](10.0.md)
- 第11章接口interface与反射reflection - 第11章接口interface与反射reflection
## 第三部分Go 高级编程 ## 第三部分Go 高级编程