这篇文章主要介绍了Go语言的GOPATH与工作目录详解,本文详细讲解了GOPATH设置、应用目录结构、编译应用等内容,需要的朋友可以参考下

GOPATH设置

go 命令依赖一个重要的环境变量:$GOPATH1

(注:这个不是Go安装目录。下面以笔者的工作目录为说明,请替换自己机器上的工作目录。)

在类似 Unix 环境大概这样设置:

复制代码 代码如下:
    export
GOPATH=/home/apple/mygo

为了方便,应该把新建以上文件夹,并且把以上一行加入到 .bashrc 或者 .zshrc 或者自己的 sh 的配置文件中。

Windows 设置如下,新建一个环境变量名称叫做GOPATH:

复制代码
代码如下:
    GOPATH=c:\mygo

GOPATH允许多个目录,当有多个目录时,请注意分隔符,多个目录的时候Windows是分号,Linux系统是冒号,当有多个GOPATH时,默认会将go
get的内容放在第一个目录下

以上 $GOPATH 目录约定有三个子目录:

1.src 存放源代码(比如:.go .c .h .s等)
2.pkg 编译后生成的文件(比如:.a)
3.bin
编译后生成的可执行文件(为了方便,可以把此目录加入到 $PATH
变量中,如果有多个gopath,那么使用${GOPATH//://bin:}/bin添加所有的bin目录)

以后我所有的例子都是以mygo作为我的gopath目录

应用目录结构

建立包和目录:$GOPATH/src/mymath/sqrt.go(包名:"mymath")

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

执行如下代码:

复制代码
代码如下:
cd $GOPATH/src
    mkdir
mymath

新建文件sqrt.go,内容如下:

复制代码
代码如下:
 // $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
    }

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

编译应用

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

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

安装完之后,我们可以进入如下目录:

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

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

接下来我们新建一个应用程序来调用

新建应用包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))
    }

如何编译程序呢?进入该应用目录,然后执行go build,那么在该目录下面会生成一个mathapp的可执行文件

复制代码
代码如下:
    ./mathapp

输出如下内容

复制代码
代码如下:
    Hello, world.  Sqrt(2) =
1.414213562373095

如何安装该应用,进入该目录执行go
install,那么在$GOPATH/bin/下增加了一个可执行文件mathapp,这样可以在命令行输入如下命令就可以执行

复制代码
代码如下:
mathapp

也是输出如下内容

复制代码
代码如下:
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"

程序的整体结构

通过上面建立的我本地的mygo的目录结构如下所示

复制代码
代码如下:
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下面保存的是应用源代码。

[1] Windows系统中环境变量的形式为%GOPATH%,本书主要使用Unix形式,Windows用户请自行替换。

Go语言的GOPATH与工作目录详解的更多相关文章

  1. jdk目录详解及其使用方法

    jdk目录详解 jdk目录详解 JDK(Java Development Kit,Java开发包,Java开发工具)是一个写Java的applet和应用程序的程序开发环境.它由一个处于操作系统层之上的 ...

  2. Linux /dev目录详解和Linux系统各个目录的作用

    Linux /dev目录详解(转http://blog.csdn.net/maopig/article/details/7195048) 在linux下,/dev目录是很重要的,各种设备都在下面.下面 ...

  3. git概念及工作流程详解

    git概念及工作流程详解 既然我们已经把gitlab安装完毕[当然这是非必要条件],我们就可以使用git来管理自己的项目了,前文也多多少少提及到git的基本命令,本文就先简单对比下SVN与git的区别 ...

  4. log4j-over-slf4j工作原理详解

    log4j-over-slf4j工作原理详解 摘自:https://blog.csdn.net/john1337/article/details/76152906 置顶 2017年07月26日 17: ...

  5. 8.var目录下的文件和目录详解

    1./var目录下的文件和目录详解. /var (该目录存放的是不断扩充且经常修改的目录,包括各种日志文件或者pid文件,存放linux的启动日志和正在运行的程序目录(变化的目录:一般是日志文件,ca ...

  6. 块级格式化上下文(block formatting context)、浮动和绝对定位的工作原理详解

    CSS的可视化格式模型中具有一个非常重要地位的概念——定位方案.定位方案用以控制元素的布局,在CSS2.1中,有三种定位方案——普通流.浮动和绝对定位: 普通流:元素按照先后位置自上而下布局,inli ...

  7. Server.MapPath()目录详解

    最近在做相关的开发,碰到了Server.MapPath(),顺便来温习一下 Server.MapPath()获取网站的目录详解  ./当前目录 /网站主目录 ../上层目录 ~/网站虚拟目录 如果当前 ...

  8. Tomcat--各个目录详解(二)

    Tomcat整体目录: 一.bin文件(存放启动和关闭tomcat脚本) 其中.bat和.sh文件很多都是成对出现的,作用是一样的,一个是Windows的,一个是Linux. ① startup文件: ...

  9. ST MCU_GPIO的八种工作模式详解。

    补充: N.P型的区别,就是一个为正电压启动(NMOS),一个为负电压启动(PMOS) GPIO的八种工作模式详解 浮空输入_IN_FLOATING带上拉输入_IPU带下拉输入_IPD模拟输入_AIN ...

随机推荐

  1. C/C++中无条件花括号的妙用

    C/C++中无条件花括号可以形成一个代码块,一个作用域.可以使括号内定义的变量就只在本域(就是这个大括号)内有效,而且不会影响其他域,即使名字相同. 在花括号内,如果变量前面带类型,则相当于新创建一个 ...

  2. [参考]wget下载整站

    wget -m -e robots=off -U "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.6) Gecko/200 ...

  3. POJ 3261 Milk Patterns 后缀数组求 一个串种 最长可重复子串重复至少k次

    Milk Patterns   Description Farmer John has noticed that the quality of milk given by his cows varie ...

  4. Linux第03天

    Linux 第03天 1.Linux帐号和ACL权限管理 1.帐号和用户组 1.1 用户标识符————UID(root为0 系统用户为1~499 普通用户为500~65535) 1.2 用户组标识符— ...

  5. js实现去重字符串

    实现去重字符串主要是把重复的字符与原来的字符(先push()进入一个数组存起来)相匹配,如果match返回的不是null则说明重复,就删除掉: <script> var str = pro ...

  6. win7 eclipse 调试storm

    windows 下eclipse开发storm 用本地模式,直接run as 运行topology解决了可以什么都不用下,直接把storm-starter的源码下下来,1.在eclipse创建一个ja ...

  7. Gitbook简易教程

    简介 GitBook 是一个基于 Node.js 的命令行工具,可使用 Github/Git 和 Markdown 来制作精美的电子书.GitBook支持输出以下几种文档格式 静态站点:GitBook ...

  8. 自动提交Git branch代码评审到Review Board系统

    背景 敏捷软件开发中,越小的反馈环,意味着软件质量越容易得到保证. 作为组件团队,我们的开发任务中,往往存在一些特性涉及到几十个功能点,开发周期持续数周或数月的情况.如何在开发过程中保证软件质量,是个 ...

  9. [机器学习] 虚拟机VMware中使用Ubuntu的联网问题

    在VMware中安装Ubuntu要解决两个问题: 1.VMware Tools安装使用 2.Ubuntu联网的虚拟机设置 1.VMware Tools安装 它的作用就是使用户可以从物理主机直接往虚拟机 ...

  10. 2016huasacm暑假集训训练四 DP_B

    题目链接:http://acm.hust.edu.cn/vjudge/contest/125308#problem/M 题意:有N件物品和一个容量为V的背包.第i件物品的费用是体积c[i],价值是w[ ...