Go入门3:GOPATH与工作空间

一、工作空间

代码目录结构规划

GOPATH下的src目录是开发程序的主要目录,所有的Go源码都放在这个目录下。

一般的做法是,一个目录一个项目。

例如: $GOPATH/src/mymath,表示“mymath”这个应用包或者可执行应用,这个根据package是main还是其他来决定,main的话就是可执行应用,其他的话就是应用包。

所以,当新建应用或者一个代码包时都是在src目录下新建一个文件夹,文件夹名称一般是代码包名称,当然也允许多级目录,例如在src下面新建了目录$GOPATH/src/github.com/a/b,那么这个包路径就是"github.com/a/b",包名称是最后一个目录b。

新建应用包

# cd $GOPATH/src

# mkdir mymath

# touch sqrt.go

# vi sqrt.go

输入如下内容:

package mymath

func Sqrt (x float64) float 64 {

    z := 0.0

    for i := 0; i < 1000; i ++ {

        z -= (z * z - x) / (2 * x)

    }

    return z

}

编译安装应用包

有两种方式可以编译安装应用包:

1、进入对应的应用包目录,然后执行 go install,即可;

2、在任意的目录下,执行 go install mymath,即可;

# go install

安装完成后,进入如下目录

# cd $GOPATH/pkg/${GOOS}_${GOARCH}

可以看到生成如下文件:mymath.a,这个文件是应用包。

新建可执行应用

# cd $GOPATH/src

# mkdir mathapp

# cd mathapp

# touch main.go

# vi main.go

输入如下内容:

package main

import (

    "fmt"

    "mymath"

)

func main() {

    fmt.Printf("Hello World. Sqrt(2) = %v\n", mymath.Sqrt(2))

}

可以看到import里面调用的应用包是mymath,这个就是相对于 $GOPATH/src 的路径,如果是多级目录,就在import里面引入多级目录,如果你有多个GOPATH也是一样的处理,Go会自动在多个 $GOPATH/src 中寻找。

编译可执行应用包

# go bulid

那么,在该目录下生成一个 mathapp 的可执行文件。

执行应用

# ./mathapp

打印内容:Hello World. Sqrt(2) = 1.414213562373095

二、获取远程包

go语言有一个获取远程包的工具就是go get,目前go get支持多数开源社区(例如:github、googlecode、bitbucket、Launchpad)。

# go get -u github.com/astaxie/beedb

go get -u 参数可以自动更新包,而且当go get的时候会自动获取该包依赖的其他第三方包。

通过这个命令可以获取相应的源码,对应的开源平台采用不同的源码控制工具,例如github采用git、googlecode采用hg,所以要想获取这些源码,必须先安装相应的源码控制工具。

go get本质上可以理解为首先第一步是通过源码工具clone代码到src下面,然后执行go install。

在代码中引用远程包

在代码中如何使用远程包,很简单的就是和使用本地包一样,只要在开头import相应的路径就可以。如:

import "github.com/astaxie/beedb"

三、程序的整体结构

通过上面建立的例子,我本地的gopath目录结构如下所示。

bin/

    mathapp

pkg/ 

    平台名/ 如: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

从上面的结构我们可以清晰的看到,bin目录下存放的是编译之后可执行的文件,pkg目录下存放是的应用包,src目录下存放的是应用源代码。

你可能感兴趣的:(Go入门3:GOPATH与工作空间)