前言

前面一篇文章我们介绍了怎么在windows下安装配置GO开发环境。这一篇我们来介绍代码Golang的目录结构、应用编译、自定义包及远程包的引用。

代码目录结构

上一篇末尾我们设置的GOPATH下的src目录就是我们接下来开发程序的主要目录,所有的源码都是放在这个目录下面,一般的做法就是一个目录一个项目

例如: %GOPATH%/src/mymath 这个目录就代表mymath这个应用包或者可执行应用(根据packagemain还是其他来决定,如果是main就是可执行应用,非main就是应用包。)

所以当我们新建应用或者一个代码包时都是在src目录下新建一个文件夹,文件夹名称一般是代码包名称。当然新建多级目录也是可以的,例如在src下面新建了目录%GOPATH%/src/github.com/HeBinz/OpTestlink 那么这个包路径就是"github.com/HeBinz/OpTestlink",即从src目录开始算的目录层级。

下面我就以mymath为例来讲述如何编写应用包,执行如下代码,切换到D盘(我们之前设置的GOPATH所在的盘),然后切换到GOPATH下的src目录,创建mymath文件夹:

D:
cd %GOPATH%/src
mkdir 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
}

这样我的应用包目录和代码已经新建完毕,注意:一般建议package的名称和目录名保持一致。

自定义包安装

上面我们已经建立了自己的应用包,如何进行编译安装呢?有两种方式可以进行安装

  • 进入对应的应用包目录,然后执行go install,就可以安装了
  • 在任意的目录执行如下代码go install mymath

我们执行安装之后,可以进入如下目录(\({GOOS}_\){GOARCH}和操作系统有关,像博主的windows 64位为windows_amd64)

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

可以看到如下mymath.a文件

这个.a文件就是应用包,那么我们如何进行调用呢?

自定义包调用

接下来我们新建一个可执行应用来调用这个应用包,和前面的步骤一样,我们在src目录下新建一个目录mathapp

cd %GOPATH%/src
mkdir mathapp

然后创建一个main.go文件,添加下面的内容:

package main

import (
    "mymath"
    "fmt"
)

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

可以看到我们这次定义的package是main,import里面调用的包是mymath,也就是我们前面自定义的那个包。

需要说明的是,如果是多级目录,就在import里面引入多级目录,如果你有多个GOPATH,也是一样,Go会自动在多个$GOPATH/src中寻找。

如何编译我们新建的mathapp程序呢?进入该应用目录,然后执行go build,那么在该目录下面会生成一个mathapp的可执行文件,在windows下默认生成的是.exe文件。

我们执行mathapp.exe文件,发现它输出如下内容

Hello, world.  Sqrt(2) = 1.414213562373095

远程包

获取远程包

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

go get github.com/astaxie/beedb

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

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

通过上面获取的代码在我们本地的源码相应的代码结构如下

$GOPATH
  src
   |--github.com
          |-astaxie
              |-beedb
   pkg
    |--相应平台
         |-github.com
               |--astaxie
                    |beedb.a

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

远程包的调用

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

import "github.com/astaxie/beedb"

再次提醒:bin目录下面存的是编译之后可执行的文件,pkg下面存放的是应用包,src下面保存的是应用源代码。

欢迎园子的大大们指正错误,共同进步。如果您觉得文章对您有帮助,可以点击右下角【推荐】一下。您的鼓励是作者坚持写作的最大动力!