在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ GO/ 9.11 在 Go 程序中使用外部庫
4.7 strings 和 strconv 包
13.6 啟動外部命令和程序
?# 11.4 類型判斷:type-switch
12.1 讀取用戶的輸入
10.6 方法
12.2 文件讀寫
13 錯誤處理與測試
9.3 鎖和 sync 包
12.3 文件拷貝
?# 11.7 第一個例子:使用 Sorter 接口排序
?# 11.5 測試一個值是否實現(xiàn)了某個接口
6.4 defer 和追蹤
12.10 XML 數(shù)據(jù)格式
13.10 性能調試:分析并優(yōu)化 Go 程序
?# 11.1 接口是什么
2.2 Go 環(huán)境變量
2.6 安裝目錄清單
2.5 在 Windows 上安裝 Go
11.11 Printf 和反射
1.2 語言的主要特性與發(fā)展的環(huán)境和影響因素
9.0 包(package)
7.4 切片重組(reslice)
13.2 運行時異常和 panic
10.2 使用工廠方法創(chuàng)建結構體實例
12.8 使用接口的實際例子:fmt.Fprintf
2.4 在 Mac OS X 上安裝 Go
3.8 Go 性能說明
7.2 切片
8.0 Map
3.1 Go 開發(fā)環(huán)境的基本要求
5.6 標簽與 goto
6.10 使用閉包調試
9.5 自定義包和可見性
4.3 常量
?# 11.2 接口嵌套接口
6.5 內置函數(shù)
前言
10.8 垃圾回收和 SetFinalizer
2.8 Go 解釋器
13.7 Go 中的單元測試和基準測試
6.8 閉包
4.9 指針
13.1 錯誤處理
10.1 結構體定義
5.1 if-else 結構
6.6 遞歸函數(shù)
9.9 通過 Git 打包和安裝
2.7 Go 運行時(runtime)
10.7 類型的 String() 方法和格式化描述符
3.7 其它工具
9.6 為自定義包使用 godoc
11.12 接口與動態(tài)類型
13.3 從 panic 中恢復(Recover)
10.3 使用自定義包中的結構體
11.14 結構體、集合和高階函數(shù)
3.6 生成代碼文檔
9.2 regexp 包
4.1 文件名、關鍵字與標識符
?# 11.6 使用方法集與接口
7.0 數(shù)組與切片
7.1 聲明和初始化
12.11 用 Gob 傳輸數(shù)據(jù)
5.5 Break 與 continue
1.1 起源與發(fā)展
?# 11 接口(Interfaces)與反射(reflection)
6.9 應用閉包:將函數(shù)作為返回值
4.2 Go 程序的基本結構和要素
8.6 將 map 的鍵值對調
6.11 計算函數(shù)執(zhí)行時間
5.0 控制結構
10.5 匿名字段和內嵌結構體
4.6 字符串
3.0 編輯器、集成開發(fā)環(huán)境與其它工具
13.8 測試的具體例子
7.6 字符串、數(shù)組和切片的應用
8.4 map 類型的切片
3.9 與其它語言進行交互
7.3 For-range 結構
9.7 使用 go install 安裝自定義包
6.0 函數(shù)
9.8 自定義包的目錄結構、go install 和 go test
6.3 傳遞變長參數(shù)
13.9 用(測試數(shù)據(jù))表驅動測試
11.9 空接口
8.1 聲明、初始化和 make
6.2 函數(shù)參數(shù)與返回值
9.11 在 Go 程序中使用外部庫
3.3 調試器
4.5 基本類型和運算符
?# 11.8 第二個例子:讀和寫
12.5 用 buffer 讀取文件
總結:Go 中的面向對象
11.10 反射包
12.7 用 defer 關閉文件
9.4 精密計算和 big 包
4.4 變量
6.1 介紹
13.4 自定義包中的錯誤處理和 panicking
12.4 從命令行讀取參數(shù)
9.10 Go 的外部包和項目
8.3 for-range 的配套用法
3.5 格式化代碼
10.4 帶標簽的結構體
7.5 切片的復制與追加
?# 11.3 類型斷言:如何檢測和轉換接口變量的類型
5.4 for 結構
4.8 時間和日期
2.3 在 Linux 上安裝 Go
12 讀寫數(shù)據(jù)
6.12 通過內存緩存來提升性能
9.1 標準庫概述
12.6 用切片讀寫文件
10 結構(struct)與方法(method)
8.5 map 的排序
12.9 JSON 數(shù)據(jù)格式
13.5 一種用閉包處理錯誤的模式
3.2 編輯器和集成開發(fā)環(huán)境
12.12 Go 中的密碼學
5.2 測試多返回值函數(shù)的錯誤
6.7 將函數(shù)作為參數(shù)
8.2 測試鍵值對是否存在及刪除元素
3.4 構建并運行 Go 程序
2.1 平臺與架構
5.3 switch 結構

9.11 在 Go 程序中使用外部庫

(本節(jié)我們將創(chuàng)建一個 Web 應用和它的 Google App Engine 版本,在第 19 和 21 章分別說明,當你閱讀到這些章節(jié)時可以再回到這個例子。)

當開始一個新項目或增加新的功能到現(xiàn)有的項目,你可以通過在應用程序中使用已經(jīng)存在的庫來節(jié)省開發(fā)時間。為了做到這一點,你必須理解庫的 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 章,我們將開發(fā)自己版本的 urlshortener)。

谷歌將這項技術提供給其他開發(fā)者,作為 API 我們可以在我們自己的應用程序中調用(釋放到指定的限制)。他們也生成了一個 Go 語言客戶端庫使其變得更容易。

備注:谷歌讓通過使用 Google API Go 客戶端服務的開發(fā)者生活變得更簡單,Go 客戶端程序自動生成于 Google 庫的 JSON 描述。更多詳情在 項目頁面 查看。

下載并安裝 Go 客戶端庫: 將通過 go install 實現(xiàn)。但是首先要驗證環(huán)境變量中是否含有 GOPATH 變量,因為外部源碼將被下載到 $GOPATH/src 目錄下并被安裝到 $GOPATH/PKG/"machine_arch"/ 目錄下。

我們將通過在終端調用以下命令來安裝 API:

go install google.golang.org/api/urlshortener/v1

go install 將下載源碼,編譯并安裝包

使用 urlshortener 服務的 web 程序: 現(xiàn)在我們可以通過導入并賦予別名來使用已安裝的包:

import  "google.golang.org/api/urlshortener/v1"

現(xiàn)在我們寫一個 Web 應用(參見第 15 章 4-8 節(jié))通過表單實現(xiàn)短地址和長地址的相互轉換。我們將使用 template 包并寫三個處理函數(shù):root 函數(shù)通過執(zhí)行表單模板來展示表單。short 函數(shù)將長地址轉換為短地址,long 函數(shù)逆向轉換。

要調用 urlshortener 接口必須先通過 http 包中的默認客戶端創(chuàng)建一個服務實例 urlshortenerSvc:

urlshortenerSvc, _ := urlshortener.New(http.DefaultClient)

我們通過調用服務中的 Url.Insert 中的 Do 方法傳入包含長地址的 Url 數(shù)據(jù)結構從而獲取短地址:

url, _ := urlshortenerSvc.Url.Insert(&urlshortener.Url{LongUrl: longUrl}).Do()

返回 urlId 便是我們需要的短地址。

我們通過調用服務中的 Url.Get 中的 Do 方法傳入包含短地址的Url數(shù)據(jù)結構從而獲取長地址:

url, error := urlshortenerSvc.Url.Get(shwortUrl).Do()

返回的長地址便是轉換前的原始地址。

示例 9.9 urlshortener.go

package main

import (
     "fmt"
     "net/http"
     "text/template"

     "google.golang.org/api/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(`
<html><body>
<h1>URL SHORTENER</h1>
{{if .}}{{.}}<br /><br />{{end}}
<form action="/short" type="POST">
Shorten this: <input type="text" name="longUrl" />
<input type="submit" value="Give me the short URL" />
</form>
<br />
<form action="/long" type="POST">
Expand this: http://goo.gl/<input type="text" name="shortUrl" />
<input type="submit" value="Give me the long URL" />
</form>
</body></html>
`))
func root(w http.ResponseWriter, r *http.Request) {
    rootHtmlTmpl.Execute(w, nil)
}
func short(w http.ResponseWriter, r *http.Request) {
     longUrl := r.FormValue("longUrl")
     urlshortenerSvc, _ := urlshortener.New(http.DefaultClient)
     url, _ := urlshortenerSvc.Url.Insert(&urlshortener.Url{LongUrl:
     longUrl,}).Do()
     rootHtmlTmpl.Execute(w, fmt.Sprintf("Shortened version of %s is : %s",
     longUrl, url.Id))
}

func long(w http.ResponseWriter, r *http.Request) {
     shortUrl := "http://goo.gl/" + r.FormValue("shortUrl")
     urlshortenerSvc, _ := urlshortener.New(http.DefaultClient)
     url, err := urlshortenerSvc.Url.Get(shortUrl).Do()
     if err != nil {
         fmt.Println("error: %v", err)
         return

     }
     rootHtmlTmpl.Execute(w, fmt.Sprintf("Longer version of %s is : %s",
     shortUrl, url.LongUrl))
}

執(zhí)行這段代碼:

go run urlshortener.go

通過瀏覽 http://localhost:8080/ 的頁面來測試。

為了代碼的簡潔我們并沒有檢測返回的錯誤狀態(tài),但是在真實的生產(chǎn)環(huán)境的應用中一定要做檢測。

將應用放入 Google App Engine,我們只需要在之前的代碼中作出如下改變:

package main -> package urlshort
func main() -> func init()

創(chuàng)建一個和包同名的目錄 urlshort,并將以下兩個安裝目錄復制到這個目錄:

google.golang.org/api/urlshortener
google.golang.org/api/googleapi

此外還要配置下配置文件 app.yaml,內容如下:

application: urlshort
version: 0-1-test
runtime: go
api_version: 3
handlers:
- url: /.*
script: _go_app

現(xiàn)在你可以去到你的項目目錄并在終端運行:dev_appserver.py urlshort

在瀏覽器打開你的 Web應用:http://localhost:8080。

鏈接