来自: GOPATH与工作空间

GOPOATH 设置

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

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

exprt GOPATH=/home/apple/mygo

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

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

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

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

代码目录结构规划

GOPATH 下的 src 目录就是接下来开发程序的主要目录,所有的源代码都是放到这个目录下面,那么一般我们的做法就是一个目录一个项目,如:$GOPATH/src/mymath表示 mymath 这个应用包或者可执行应用,这个根据 package 是 main 还是其他来决定,main 的话就是可执行应用,其他的话就是应用包。

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

下面以 mymath 为例来讲述如何编写应用宝,执行如下代码:

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))
}

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

编译:进入该应用目录,然后执行 go build,那么在该目录下面会生成一个 mathapp 的可执行文件。

./mathapp

输出如下内容

Hello, world.  Sqrt(2) = 1.414213562373095

安装该应用:进入该目录执行 go install,那么在 $GOPATH/bin/ 下增加了一个可执行文件 mathapp,若已经把 $GOPATH/bin 加到 PATH 里面,则可以在命令行输入如下命令就可以执行:

mathapp

获取远程包

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"

Go之GOPATH与工作空间的更多相关文章

  1. Golang入门教程(一)GOPATH与工作空间(Windows)

    https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/01.2.md Windows 环境: 下面我就 ...

  2. 【Go入门教程1】Go 安装,GOROOT,GOPATH,Go工作空间

    Go安装 Windows 安装 访问Golang Code下载页,32 位请选择名称中包含 windows-386 的 msi 安装包,64 位请选择名称中包含 windows-amd64 的.下载好 ...

  3. GOPATH设置

    go help gopath查看gopath的原文帮助信息 go env查看gopath的配置 GOPATH与工作空间 前面我们在安装Go的时候看到需要设置GOPATH变量,Go从1.1版本到1.7必 ...

  4. Go 工作空间 深度解析

    介绍 这篇文档举例证明了一个简单地 Go package 并且介绍了 go tool,标准的方法来 fetch, build,and install Go package and commands. ...

  5. Mac系统搭建Go语言Sublime Text 2环境配置

    Go语言是谷歌自家的编译型语言,旨在不损失性能的前提下降低代码复杂率.其优势是让软件充分发挥多核心处理器同步多工的优点,并可解决面向对象程序设计的麻烦. 一.安装Golang的SDK 在官网http: ...

  6. Mac OS X下环境搭建 Sublime Text 2 环境变量配置 开发工具配置Golang (Go语言)

    Golang (Go语言) Mac OS X下环境搭建 环境变量配置 开发工具配置 Sublime Text 2 一.安装Golang的SDK 在官网http://golang.org/ 直接下载安装 ...

  7. Ubuntu16.04 部署配置GO语言开发环境 & 注意事项

    1. 安装GO 安装go语言包: $ curl -O https://storage.googleapis.com/golang/go1.10.1.linux-amd64.tar.gz   下载完成后 ...

  8. Go语言学习之路(持续更新中)

    菜鸟 Go语言教程 教程(RUNOOB.COM):http://www.runoob.com/go/go-tutorial.html Go全球官网:https://golang.org/ (2018- ...

  9. Golang (Go语言) Mac OS X下环境搭建 环境变量配置 开发工具配置 Sublime Text 2 【转】

    一.安装Golang的SDK 在官网 http://golang.org/ 直接下载安装包安装即可.下载pkg格式的最新安装包,直接双击运行,一路按照提示操作即可完成安装. 安装完成后,打开终端,输入 ...

随机推荐

  1. Java Web-JSP学习

    Java Web-JSP学习 概念 Java Server Pages:Java服务器端页面.可以在其中直接定义HTML标签,也可以在其中直接定义java代码. 关于JSP和JAVASCRIPT的区别 ...

  2. 解决WinForm屏幕缩放适配只需修改两个Form的两个属性

    最近要做一个windows下截屏识别文字的程序,调试发现截取的图像显示不完整. 输出了Screen.PrimaryScreen.Bounds.Width获取的值,结果与实际分辨率不同,所以确定了与我的 ...

  3. aop 的一些表达式

    切入点的表达式 execution(void cn.itcast.e_xml.a_before.UserServiceImpl.saveUser(java.lang.String,java.lang. ...

  4. StringBuffer常用方法

    StringBuffer常用的方法 package com.mangosoft.java.string; /** * 字符串特点:字符串是常量,它们的值在创建之后不能更改. * * 字符串的内容一旦发 ...

  5. linux运维面试前,先来检查这些基础知识忘了没?

    知乎上有这样一个问题:一个新手面试 Linux 运维工作至少需要知道哪些知识?其中有一个答案对这一话题的解读非常深入,今天特别分享给大家. 一.什么是大型网站运维? 首先明确一下,全文所讲的”运维“是 ...

  6. Gym - 101981B Tournament (WQS二分+单调性优化dp)

    题意:x轴上有n个人,让你放置m个集合点,使得每个人往离他最近的集合点走,所有人走的距离和最短. 把距离视为花费,设$dp[i][k]$表示前i个人分成k段的最小花费,则有递推式$dp[i][k]=m ...

  7. WPF DevExpress ChartControl使用之XYDiagram

    WPF使用Dev和WinForm有许多不同,相对而言,WPF要更简单和炫酷一点,我只做了一点基本的功能,没有仔细的研究,这里只介绍一下WPF Dev ChartControl绘制XYDiagram的基 ...

  8. 自己编写一个Java监听器

    Java监听器 1.原理: 当范围对象的状态发生变化的时候,服务器自动调用监听器对象中的方法. 例如:创建一个“人”类Class Person 人拥有吃的方法public void eat(){},我 ...

  9. redis常见问题(转)

    常见问题:1.为什么使用redis(一)性能我们在碰到需要执行耗时特别久,且结果不频繁变动的SQL,就特别适合将运行结果放入缓存.这样,后面的请求就去缓存中读取,使得请求能够迅速响应.(二)并发在大并 ...

  10. 12 saltstack部署OpenStack

    参考源码:https://github.com/unixhot/salt-openstack nova control.sls