Go安装

Windows 安装

访问Golang Code下载页,32 位请选择名称中包含 windows-386 的 msi 安装包,64 位请选择名称中包含 windows-amd64 的。下载好后运行,默认安装目录为 C:\Go\,我选择安装到 D:\Go\Go。安装完成后默认会在环境变量 Path 后添加 Go 安装目录下的 bin 目录 D:\Go\Go\bin\,并添加环境变量 GOROOT,值为 Go 安装根目录 D:\Go\Go 。

右键桌面“计算机”-> 选择“属性”-> 高级系统设置 -> 环境变量 -> 系统变量

GOROOT D:\Go\Go
GOPATH D:\Go\GoProjects
Path D:\Program Files\Git\cmd;D:\Program Files\Git\bin;%GOROOT%\bin;%GOPATH%\bin;

在命令行中,输入 go version 测试一下。

Liunx/Mac 安装

默认安装到 /usr/local/go (Windows系统:C:\Go)

配置下环境变量:

export GOROOT=$HOME/go
export GOPATH=$HOME/gopath
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

同样,在控制台中输入 go version 测试一下。


GOPATH与工作空间

前面我们在安装Go的时候看到需要设置GOPATH变量,Go从1.1版本开始必须设置这个变量,而且不能和Go的安装目录一样,这个目录用来存放Go源码,Go的可运行文件,以及相应的编译之后的包文件。所以这个目录下面有三个子目录:src、bin、pkg

GOPATH设置

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

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

(注:这个不是Go安装目录。下面以笔者的工作目录为示例,如果你想不一样请把GOPATH替换成你的工作目录。)

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

export GOPATH=/home/apple/mygo

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

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

GOPATH=c:\mygo

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

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

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

附1:个人 Mac 电脑的 GOPATH 环境变量 参考

环境文件:~/.bash_profile 的内容如下:

alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF' export GOROOT=/usr/local/go
export GOPATH=/Users/jianbao/GoglandProjects/go-lib:/Users/jianbao/GoglandProjects/beego-study export PHP=/usr/local/php/php-7.1 export PATH=$GOROOT/bin:${GOPATH//://bin:}/bin:$PHP/bin:$PHP/sbin:/usr/local/nginx/sbin:/usr/local/mysql:/usr/local/Cellar/subversion/1.9.4/bin:$PATH
#
# 注意:亮点是 ${GOPATH//://bin:}/bin, 可一次性添加 所有的 GOPATH 的 bin 目录
#

附2:如何安装 第三方 Go 离线包?

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

代码目录结构规划

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

所以当新建应用或者一个代码包时都是在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

也是输出如下内容

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下面保存的是应用源代码

摘自:

https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/01.2.md

延伸阅读:

如何安装 第三方 Go 离线包?


CentOS 上 Go 环境配置

1、下载 Go二进制源码包(无须编译,解压即可使用)

https://storage.googleapis.com/golang/go1.7.5.linux-amd64.tar.gz

2、解压到目录 /usr/local/go/go-1.7.5

3、配置环境变量

vim /etc/profile

在(文件末)追加以下文本

export GOROOT=/usr/local/go/go-1.7.5
export GOPATH=/fiisoo/go
export PATH=$GOROOT/bin:${GOPATH//://bin:}/bin:$PATH

【Go入门教程1】Go 安装,GOROOT,GOPATH,Go工作空间的更多相关文章

  1. 【OpenCV入门教程之一】 安装OpenCV:OpenCV 3.0 +VS 2013 开发环境配置

    图片太多,具体过程参照: [OpenCV入门教程之一] 安装OpenCV:OpenCV 3.0.OpenCV 2.4.8.OpenCV 2.4.9 +VS 开发环境配置 说下我这边的设置: 选择deb ...

  2. 前端组件化Polymer入门教程(1)——初识&&安装

    前端组件化Polymer入门教程目录: 前端组件化Polymer入门教程(1)--初识&&安装 前端组件化Polymer入门教程(2)--快速入门 前端组件化Polymer入门教程(3 ...

  3. RabbitMQ入门教程(一):安装和常用命令

    原文:RabbitMQ入门教程(一):安装和常用命令 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn ...

  4. 【OpenCV入门教程之一】 安装OpenCV:OpenCV 3.0、OpenCV 2.4.8、OpenCV 2.4.9 +VS 开发环境配置

    本系列文章由@浅墨_毛星云 出品,转载请注明出处.   文章链接:http://blog.csdn.net/poem_qianmo/article/details/19809337 作者:毛星云(浅墨 ...

  5. Nginx入门教程-简介、安装、反向代理、负载均衡、动静分离使用实例

    场景 Nginx入门简介和反向代理.负载均衡.动静分离理解 https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/102790862 Ub ...

  6. matlab使用libsvm入门教程——使用matlab安装配置libsvm以及一个svm分类实例

    前言 此教程专注于刚入门的小白, 且博客拥有时效性, 发布于2019年3月份, 可能后面的读者会发现一些问题, 欢迎底下评论出现的问题,我将尽可能更新解决方案. 我开始也在如何安装libsvm上出现了 ...

  7. Python爬虫入门教程 49-100 Appium安装+操作51JOB_APP(模拟手机操作之一)手机APP爬虫

    爬前准备工作 在开始安装Appium之前,你要先知道Appium是做什么的?Appium 是一个自动化测试开源工具,看到没,做测试用的,它有点类似Selenium,可以自动操作APP实现一系列的操作. ...

  8. Python爬虫入门教程 47-100 mitmproxy安装与安卓模拟器的配合使用-手机APP爬虫部分

    1. 准备下载软件 介绍一款爬虫辅助工具mitmproxy ,mitmproxy 就是用于MITM的proxy,MITM中间人攻击.说白了就是服务器和客户机中间通讯多增加了一层.跟Fiddler和Ch ...

  9. Docker(三):Docker入门教程-CentOS Docker 安装

    CentOS Docker 安装 Docker支持以下的CentOS版本: CentOS 7 (64-bit) CentOS 6.5 (64-bit) 或更高的版本 前提条件 目前,CentOS 仅发 ...

  10. Docker入门教程-Linux环境安装Nginx及入门使用

    介绍 Nginx("engine x")是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服 ...

随机推荐

  1. [COPY] How to become a hacker

    Engish version copied from here Why This Document? As editor of the Jargon File and author of a few ...

  2. 浅谈Tuple之C#4.0新特性那些事儿你还记得多少?

    来源:微信公众号CodeL 今天给大家分享的内容基于前几天收到的一条留言信息,留言内容是这样的: 看了这位网友的留言相信有不少刚接触开发的童鞋们也会有同样的困惑,除了用新建类作为桥梁之外还有什么好的办 ...

  3. 嵌入式Linux驱动学习之路(十四)按键驱动-同步、互斥、阻塞

    目的:同一个时刻,只能有一个应用程序打开我们的驱动程序. ①原子操作: v = ATOMIC_INIT( i )  定义原子变量v并初始化为i atomic_read(v)        返回原子变量 ...

  4. PAT 1037. 在霍格沃茨找零钱(20)

    如果你是哈利·波特迷,你会知道魔法世界有它自己的货币系统 -- 就如海格告诉哈利的:"十七个银西可(Sickle)兑一个加隆(Galleon),二十九个纳特(Knut)兑一个西可,很容易.& ...

  5. JavaScript 输出

    javascript 没有任何打印或者输出的函数. 一.javascript 显示数据 javacript可以通过不同的方式来输出数据: 1.使用window.alert()弹出警告框 2.使用doc ...

  6. makefile--subst

    Makefile里的subst用法是$(subst FROM,TO,TEXT),即将TEXT中的东西从FROM变为TOMakefile中的字符串处理函数格式:    $(subst ;,;,;)名称: ...

  7. flask+sqlite3+echarts3+ajax 异步更新数据

    结构: /www | |-- /static |....|-- jquery-3.1.1.js |....|-- echarts.js(echarts3是单文件!!) | |-- /templates ...

  8. C#进阶系列——AOP?AOP!

    前言:今天大阅兵,可是苦逼的博主还得坐在电脑前写博客,为了弄清楚AOP,博主也是拼了.这篇打算写写AOP,说起AOP,其实博主接触这个概念也才几个月,了解后才知道,原来之前自己写的好多代码原理就是基于 ...

  9. C#进阶系列——MEF实现设计上的“松耦合”(终结篇:面向接口编程)

    序:忙碌多事的八月带着些许的倦意早已步入尾声,金秋九月承载着抗战胜利70周年的喜庆扑面而来.没来得及任何准备,似乎也不需要任何准备,因为生活不需要太多将来时.每天忙着上班.加班.白加班,忘了去愤,忘了 ...

  10. Sunny-ngrok 解决外网访问内网问题

       该博文已过时    请参考官网        http://www.ngrok.cc/ 一  .进入 网址 往下拉找到: 下载不同的版本. 二. 平台登陆地址:http://www.ngrok. ...