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

鍍金池/ 教程/ GO/ 1.2 GOPATH與工作空間
7 文本處理
3 Web基礎(chǔ)
14 擴(kuò)展Web框架
10.4 小結(jié)
2.2 Go基礎(chǔ)
2.8 總結(jié)
6.1 session和cookie
5.5 使用beedb庫(kù)進(jìn)行ORM開(kāi)發(fā)
8.3 REST
13.6 小結(jié)
5.4 使用PostgreSQL數(shù)據(jù)庫(kù)
14.6 pprof支持
14.1 靜態(tài)文件支持
11.2 使用GDB調(diào)試
7.7 小結(jié)
1 GO環(huán)境配置
14.5 多語(yǔ)言支持
7.1 XML處理
1.5 總結(jié)
13 如何設(shè)計(jì)一個(gè)Web框架
14.3 表單及驗(yàn)證支持
12 部署與維護(hù)
10 國(guó)際化和本地化
1.1 Go 安裝
6.2 Go如何使用session
5.6 NOSQL數(shù)據(jù)庫(kù)操作
6.5 小結(jié)
9.4 避免SQL注入
12.1 應(yīng)用日志
4.2 驗(yàn)證表單的輸入
10.1 設(shè)置默認(rèn)地區(qū)
1.3 Go 命令
9.6 加密和解密數(shù)據(jù)
4.1 處理表單的輸入
4.4 防止多次遞交表單
11.3 Go怎么寫(xiě)測(cè)試用例
8 Web服務(wù)
12.3 應(yīng)用部署
5.7 小結(jié)
12.5 小結(jié)
11 錯(cuò)誤處理,調(diào)試和測(cè)試
9.2 確保輸入過(guò)濾
14.2 Session支持
6.4 預(yù)防session劫持
12.4 備份和恢復(fù)
8.1 Socket編程
13.1 項(xiàng)目規(guī)劃
13.4 日志和配置設(shè)計(jì)
7.6 字符串處理
13.2 自定義路由器設(shè)計(jì)
6.3 session存儲(chǔ)
3.4 Go的http包詳解
8.2 WebSocket
10.3 國(guó)際化站點(diǎn)
7.5 文件操作
7.4 模板處理
9.1 預(yù)防CSRF攻擊
13.3 controller設(shè)計(jì)
2.6 interface
14.4 用戶認(rèn)證
2.3 流程和函數(shù)
附錄A 參考資料
11.1 錯(cuò)誤處理
9.5 存儲(chǔ)密碼
9.3 避免XSS攻擊
12.2 網(wǎng)站錯(cuò)誤處理
6 session和數(shù)據(jù)存儲(chǔ)
2.4 struct類型
3.3 Go如何使得Web工作
2.5 面向?qū)ο?/span>
3.1 Web工作方式
1.2 GOPATH與工作空間
2.1 你好,Go
9.7 小結(jié)
13.5 實(shí)現(xiàn)博客的增刪改
7.2 JSON處理
10.2 本地化資源
7.3 正則處理
2 Go語(yǔ)言基礎(chǔ)
5.1 database/sql接口
4.5 處理文件上傳
8.5 小結(jié)
4.3 預(yù)防跨站腳本
5.3 使用SQLite數(shù)據(jù)庫(kù)
14.7 小結(jié)
3.2 Go搭建一個(gè)Web服務(wù)器
2.7 并發(fā)
5 訪問(wèn)數(shù)據(jù)庫(kù)
4 表單
3.5 小結(jié)
1.4 Go開(kāi)發(fā)工具
11.4 小結(jié)
9 安全與加密
5.2 使用MySQL數(shù)據(jù)庫(kù)
4.6 小結(jié)
8.4 RPC

1.2 GOPATH與工作空間

前面我們?cè)诎惭bGo的時(shí)候看到需要設(shè)置GOPATH變量,Go從1.1版本開(kāi)始必須設(shè)置這個(gè)變量,而且不能和Go的安裝目錄一樣,這個(gè)目錄用來(lái)存放Go源碼,Go的可運(yùn)行文件,以及相應(yīng)的編譯之后的包文件。所以這個(gè)目錄下面有三個(gè)子目錄:src、bin、pkg

GOPATH設(shè)置

go 命令依賴一個(gè)重要的環(huán)境變量:$GOPATH

Windows系統(tǒng)中環(huán)境變量的形式為%GOPATH%,本書(shū)主要使用Unix形式,Windows用戶請(qǐng)自行替換。

(注:這個(gè)不是Go安裝目錄。下面以筆者的工作目錄為示例,如果你想不一樣請(qǐng)把GOPATH替換成你的工作目錄。)

在類似 Unix 環(huán)境大概這樣設(shè)置:

export GOPATH=/home/apple/mygo

為了方便,應(yīng)該把新建以上文件夾,并且把以上一行加入到 .bashrc 或者 .zshrc 或者自己的 sh 的配置文件中。

Windows 設(shè)置如下,新建一個(gè)環(huán)境變量名稱叫做GOPATH:

    GOPATH=c:\mygo

GOPATH允許多個(gè)目錄,當(dāng)有多個(gè)目錄時(shí),請(qǐng)注意分隔符,多個(gè)目錄的時(shí)候Windows是分號(hào),Linux系統(tǒng)是冒號(hào),當(dāng)有多個(gè)GOPATH時(shí),默認(rèn)會(huì)將go get的內(nèi)容放在第一個(gè)目錄下。

以上 $GOPATH 目錄約定有三個(gè)子目錄:

  • src 存放源代碼(比如:.go .c .h .s等)
  • pkg 編譯后生成的文件(比如:.a)
  • bin 編譯后生成的可執(zhí)行文件(為了方便,可以把此目錄加入到 $PATH 變量中,如果有多個(gè)gopath,那么使用${GOPATH//://bin:}/bin添加所有的bin目錄)

以后我所有的例子都是以mygo作為我的gopath目錄

代碼目錄結(jié)構(gòu)規(guī)劃

GOPATH下的src目錄就是接下來(lái)開(kāi)發(fā)程序的主要目錄,所有的源碼都是放在這個(gè)目錄下面,那么一般我們的做法就是一個(gè)目錄一個(gè)項(xiàng)目,例如: $GOPATH/src/mymath 表示mymath這個(gè)應(yīng)用包或者可執(zhí)行應(yīng)用,這個(gè)根據(jù)package是main還是其他來(lái)決定,main的話就是可執(zhí)行應(yīng)用,其他的話就是應(yīng)用包,這個(gè)會(huì)在后續(xù)詳細(xì)介紹package。

所以當(dāng)新建應(yīng)用或者一個(gè)代碼包時(shí)都是在src目錄下新建一個(gè)文件夾,文件夾名稱一般是代碼包名稱,當(dāng)然也允許多級(jí)目錄,例如在src下面新建了目錄$GOPATH/src/github.com/astaxie/beedb 那么這個(gè)包路徑就是"github.com/astaxie/beedb",包名稱是最后一個(gè)目錄beedb

下面我就以mymath為例來(lái)講述如何編寫(xiě)應(yīng)用包,執(zhí)行如下代碼

cd $GOPATH/src
mkdir mymath

新建文件sqrt.go,內(nèi)容如下

// $GOPATH/src/mymath/sqrt.go源碼如下:
package mymath

func Sqrt(x float64) float64 {
    z := 0.0
    for i := 0; i < 1000; i++ {
        z -= (z*z - x) / (2 * x)
    }
    return z
}

這樣我的應(yīng)用包目錄和代碼已經(jīng)新建完畢,注意:一般建議package的名稱和目錄名保持一致

編譯應(yīng)用

上面我們已經(jīng)建立了自己的應(yīng)用包,如何進(jìn)行編譯安裝呢?有兩種方式可以進(jìn)行安裝

1、只要進(jìn)入對(duì)應(yīng)的應(yīng)用包目錄,然后執(zhí)行go install,就可以安裝了

2、在任意的目錄執(zhí)行如下代碼go install mymath

安裝完之后,我們可以進(jìn)入如下目錄

cd $GOPATH/pkg/${GOOS}_${GOARCH}
//可以看到如下文件
mymath.a

這個(gè).a文件是應(yīng)用包,那么我們?nèi)绾芜M(jìn)行調(diào)用呢?

接下來(lái)我們新建一個(gè)應(yīng)用程序來(lái)調(diào)用這個(gè)應(yīng)用包

新建應(yīng)用包mathapp

cd $GOPATH/src
mkdir mathapp
cd mathapp
vim main.go

$GOPATH/src/mathapp/main.go源碼:

package main

import (
      "mymath"
      "fmt"
)

func main() {
      fmt.Printf("Hello, world.  Sqrt(2) = %v\n", mymath.Sqrt(2))
}

可以看到這個(gè)的package是main,import里面調(diào)用的包是mymath,這個(gè)就是相對(duì)于$GOPATH/src的路徑,如果是多級(jí)目錄,就在import里面引入多級(jí)目錄,如果你有多個(gè)GOPATH,也是一樣,Go會(huì)自動(dòng)在多個(gè)$GOPATH/src中尋找。

如何編譯程序呢?進(jìn)入該應(yīng)用目錄,然后執(zhí)行go build,那么在該目錄下面會(huì)生成一個(gè)mathapp的可執(zhí)行文件

./mathapp

輸出如下內(nèi)容

Hello, world.  Sqrt(2) = 1.414213562373095

如何安裝該應(yīng)用,進(jìn)入該目錄執(zhí)行go install,那么在$GOPATH/bin/下增加了一個(gè)可執(zhí)行文件mathapp, 還記得前面我們把$GOPATH/bin加到我們的PATH里面了,這樣可以在命令行輸入如下命令就可以執(zhí)行

mathapp

也是輸出如下內(nèi)容

Hello, world.  Sqrt(2) = 1.414213562373095

這里我們展示如何編譯和安裝一個(gè)可運(yùn)行的應(yīng)用,以及如何設(shè)計(jì)我們的目錄結(jié)構(gòu)。

獲取遠(yuǎn)程包

go語(yǔ)言有一個(gè)獲取遠(yuǎn)程包的工具就是go get,目前go get支持多數(shù)開(kāi)源社區(qū)(例如:github、googlecode、bitbucket、Launchpad)

go get github.com/astaxie/beedb

go get -u 參數(shù)可以自動(dòng)更新包,而且當(dāng)go get的時(shí)候會(huì)自動(dòng)獲取該包依賴的其他第三方包

通過(guò)這個(gè)命令可以獲取相應(yīng)的源碼,對(duì)應(yīng)的開(kāi)源平臺(tái)采用不同的源碼控制工具,例如github采用git、googlecode采用hg,所以要想獲取這些源碼,必須先安裝相應(yīng)的源碼控制工具

通過(guò)上面獲取的代碼在我們本地的源碼相應(yīng)的代碼結(jié)構(gòu)如下

$GOPATH
  src
   |--github.com
          |-astaxie
              |-beedb
   pkg
    |--相應(yīng)平臺(tái)
         |-github.com
               |--astaxie
                    |beedb.a

go get本質(zhì)上可以理解為首先第一步是通過(guò)源碼工具clone代碼到src下面,然后執(zhí)行go install

在代碼中如何使用遠(yuǎn)程包,很簡(jiǎn)單的就是和使用本地包一樣,只要在開(kāi)頭import相應(yīng)的路徑就可以

import "github.com/astaxie/beedb"

程序的整體結(jié)構(gòu)

通過(guò)上面建立的我本地的mygo的目錄結(jié)構(gòu)如下所示

bin/
    mathapp
pkg/
    平臺(tái)名/ 如:darwin_amd64、linux_amd64
         mymath.a
         github.com/
              astaxie/
                   beedb.a
src/
    mathapp
          main.go
      mymath/
          sqrt.go
      github.com/
           astaxie/
                beedb/
                    beedb.go
                    util.go

從上面的結(jié)構(gòu)我們可以很清晰的看到,bin目錄下面存的是編譯之后可執(zhí)行的文件,pkg下面存放的是應(yīng)用包,src下面保存的是應(yīng)用源代碼