通过两种方式安装

一、通过apt-get安装
1、安装

sudo apt-get install golang

2、设置GOPATH变量

GOPATH是扩展库的目录,Go先搜索标准库目录,然后搜索GOPATH库目录,所有的非标准库都放在GOPATH下。以GOPATH为“/usr/local/go”目录为例子:

(1)把export GOPATH=/opt/go加入到~/.bashrc文件的最后。
(2)source ~/.bashrc 重新加载配置

这样就加好了GOPATH。注意:apt-get命令安装只能安装go1.6版本现在很多开源项目都用上了1.7以上建议手动安装更高版本。

二、手动安装新的稳定版本(重要)

1、以1.8版本为例子下载go1.8.linux-amd64.tar.gz安装包,官方下载地址:https://golang.org/dl/,官方经常抽风打不开。

下载地址:http://www.golangtc.com/download

2、使用tar命令将安装包解压到/usr/local目录下:

tar -xzf go1..linux-amd64.tar.gz  -C /usr/local

注意:root 权限问题

验证安装结果,执行以下命令:

/usr/local/go/bin/go version

出现以下结果表示安装成功:

3、环境变量的设置

【1】单个用户配置:在 ~/.bashrc文件末尾加上如下环境变量:

vim ~/.bashrc
export GOPATH=/opt/go
export GOROOT=/usr/local/go
export GOARCH=
export GOOS=linux
export GOBIN=$GOROOT/bin/
export GOTOOLS=$GOROOT/pkg/tool/
export PATH=$PATH:$GOBIN:$GOTOOLS

重新加载 profile 文件,加载环境变量到内存。查看安装版本

source ~/.bashrc

【2】多用户配置(推荐)

vim /etc/profile  # 文件末尾添加以下内容
export GOPATH=/home/www/golang/gopath
export GOROOT=/usr/local/go
export GOARCH=
export GOOS=linux
export GOTOOLS=$GOROOT/pkg/tool
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

重新加载 profile 文件,加载环境变量到内存

source /etc/profile

在任意目录查看安装版本:

www@TinywanAliYun:~$ go version
go version go1.9.1 linux/amd64

附带:Windows 环境变量配置

4.、编写hello.go文件,测试安装是否成功,代码如下:

package main
import "fmt"
func main() {
fmt.Println("Hello World!")
}

5、运行hello.go
【1】用go run命令直接运行hello.go

www@TinywanAliYun:~/golang$ pwd
/home/www/golang
www@TinywanAliYun:~/golang$ go run hello.go
Hello World!

【2】用go build命令生成hello可执行文件

www@TinywanAliYun:~/golang$ go build hello.go
www@TinywanAliYun:~/golang$ ls
hello hello.go
www@TinywanAliYun:~/golang$ ./hello
Hello World!

【3】环境变量查看

www@TinywanAliYun:/usr/local/go$ go env
GOARCH=""
GOBIN=""
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/www/golang/gopath"
GORACE=""
GOROOT="/usr/local/go"
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
GO386="sse2"
CC="gcc"
GOGCCFLAGS="-fPIC -m32 -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build103397464=/tmp/go-build -gno-record-gcc-switches"
CXX="g++"
CGO_ENABLED=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"

注意:GOPATH路径,要自己动手创建:mkdir -p /home/www/golang/gopath

主要变量说明:

1、GOROOT就是go的安装路径

2、GOPATH是作为编译后二进制的存放目的地和import包时的搜索路径 (其实也是你的工作目录, 你可以在src下创建你自己的go源文件, 然后开始工作)

3、GOPATH目录结构

goWorkSpace // (goWorkSpace为GOPATH目录)
-- bin // golang编译可执行文件存放路径,可自动生成。
-- pkg // golang编译的.a中间文件存放路径,可自动生成。
-- src // 源码路径。按照golang默认约定,go run,go install等命令的当前工作路径(即在此路径下执行上述命令)。

GOPATH之下主要包含三个目录: bin、pkg、src

(1)bin目录主要存放可执行文件;

(2)pkg目录存放编译好的库文件, 主要是*.a文件;

(3)src目录下主要存放go的源文件

(4) GOPATH可以是一个目录列表, go get下载的第三方库, 一般都会下载到列表的第一个目录里面

(5) 需要把GOPATH中的可执行目录也配置到环境变量中, 否则你自行下载的第三方go工具就无法使用了, 操作如下:

(6)GOBIN go install编译存放路径。不允许设置多个路径。可以为空。为空时则遵循“约定优于配置”原则,可执行文件放在各自GOPATH目录的bin文件夹中(前提是:package main的main函数文件不能直接放到GOPATH的src下面

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

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

(7)目录结构

www@TinywanAliYun:~/golang/gopath$ tree -L
.
├── bin
├── pkg
└── src

注意:$GOPATH 指定的目录要自己新建,包括下面的src目录
下面我就以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 := ; i < ; i++ {
z -= (z*z - x) / ( * x)
}
return z
}

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

编译应用

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

1、只要进入对应的应用包目录,然后执行go install,就可以安装了

2、在任意的目录执行如下代码go install mymath

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

www@TinywanAliYun:~/golang/gopath$ tree -L
.
├── bin
├── pkg
│   └── linux_386
│   └── mymath.a
└── src
└── mymath
└── sqrt.go

这个.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())
}

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

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

www@TinywanAliYun:~/golang/gopath/src/mathapp$ ls
main.go
www@TinywanAliYun:~/golang/gopath/src/mathapp$ go build
www@TinywanAliYun:~/golang/gopath/src/mathapp$ ls
main.go mathapp

执行可执行文件 ,输出如下内容

www@TinywanAliYun:~/golang/gopath/src/mathapp$ ./mathapp
Hello, world. Sqrt() = 1.414213562373095

如何安装该应用,进入该目录执行go install,那么在$GOPATH/bin/linux_386下增加了一个可执行文件mathapp, 还记得前面我们把$GOPATH/bin加到我们的PATH里面了,这样可以在命令行输入如下命令就可以执行

www@TinywanAliYun:~/golang/gopath/src/mathapp$ go install
www@TinywanAliYun:~/golang/gopath/src/mathapp$ cd $GOPATH/bin
www@TinywanAliYun:~/golang/gopath/bin$ ls
linux_386
www@TinywanAliYun:~/golang/gopath/bin$ cd linux_386/
www@TinywanAliYun:~/golang/gopath/bin/linux_386$ ls
mathapp
www@TinywanAliYun:~/golang/gopath/bin/linux_386$ ./mathapp
Hello, world. Sqrt() = 1.414213562373095

以上我们展示如何编译和安装一个可运行的应用,以及如何设计我们的目录结构。

获取远程包

go语言有一个获取远程包的工具就是 go get

通过这个命令可以获取相应的源码:

www@TinywanAliYun:~/golang/gopath/src$ go get github.com/astaxie/beedb
www@TinywanAliYun:~/golang/gopath/src$ ls
github.com mathapp mymath

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

www@TinywanAliYun:~/golang/gopath$ tree -L
.
├── bin
│   └── linux_386
│   └── mathapp
├── pkg
│   └── linux_386
│   ├── github.com
│   └── mymath.a
└── src
├── github.com
│   └── astaxie
├── mathapp
│   └── main.go
└── mymath
└── sqrt.go

go get本质上可以理解为首先第一步是通过源码工具clone代码到src下面,然后执行go install,在代码中如何使用远程包,很简单的就是和使用本地包一样,只要在开头import相应的路径就可以:

import "github.com/astaxie/beedb"

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

刚学习的支持扩展一下,搞一个Golang 写的 定时任务管理器 

源码地址:https://github.com/lisijie/webcron

切换到$GOPATH/src目录下,下载源码:

git clone https://github.com/lisijie/webcron.git

通过 go build 编译一个可执行文件webcron

gopath/src# cd webcron/
gopath/src/webcron# ls
app conf install.sql main.go pack.sh README.md run.sh screenshot.png static views
gopath/src/webcron# go build
gopath/src/webcron# ls
app conf install.sql main.go pack.sh README.md run.sh screenshot.png static views webcron

以上提示表示链接mysql数据有问题

修改mysql数据库配置信息,创建一个数据库webcron

mysql -u root -p123456

mysql> create database webcron;
Query OK, row affected (0.03 sec) mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| webcron |
| zabbix |
+--------------------+
rows in set (0.00 sec)

导入数据:

/home/www/gopath/src/webcron#  mysql -u root -p123456 -D webcron < install.sql

修改配置文件:vim conf/app.conf

# 数据库配置
db.host = 127.0.0.1
db.user = root
db.password = ""
db.port =
db.name = webcron
db.prefix = t_
db.timezone = Asia/Shanghai

再次执行,看来是OK了

浏览器查看:http://127.0.0.1:8000/login

修改可执行文件到后台运行

再次测试mysql数据库信息

定制任务执行的结果

发送邮件配置 : vim conf/app.conf

# 邮件服务器配置
mail.queue_size =
mail.from = tinywan@.com
mail.host = smtp..com
mail.port =
mail.user = tinywan@.com
mail.password = 123456

任务失败,邮件通知信息

邮箱接受到的信息

两封邮件的时间间隔恰好是10s

添加一个redis 执行脚本

#!/bin/bash
logs_path="/home/www/bin/"
TIME=`date '+%Y-%m-%d %H:%M:%S'`
REDIS_HOST='127.1.1.1'
REDIS_PORT=''
REDIS_PASS='tinywan2321'
REDIS_DB=
GO=$(redis-cli -h 127.0.01 -p -a dddd -n get Golang)
echo " Redis Crontab [ " $(date '+%Y-%m-%d %H:%M:%S') " ] ::" $GO >> /home/www/bin/crontab_redis_12.log

脚本执行结果,红色为redis 数据库获取的数据

php 执行脚本

#!/usr/bin/php
<?php
$path = '/home/www/bin/php.txt';
$time = date("Y-m-d H:i:s")."\n";
file_put_contents($path,$time,FILE_APPEND);

结束!

总结:折腾了半天都是$GOPATH 的坑,话说自己太笨了,给点时间还是可以的啦!(*^__^*) 嘻嘻……

Golang入门教程(二)Ubuntu16.04下安装golang(实例:Golang 定时任务管理器)的更多相关文章

  1. ubuntu16.04下安装artoolkit5

    目前对AR技术的常见理解就是CV(Computer Vision)+CG(Computer Graphic).CV的方法很多,简单些比如FREAK+ICP(ARToolKit中的NFT),复杂些就是S ...

  2. Ubuntu16.04下安装多版本cuda和cudnn

    Ubuntu16.04下安装多版本cuda和cudnn 原文 https://blog.csdn.net/tunhuzhuang1836/article/details/79545625 前言 因为之 ...

  3. Ubuntu16.04下安装数据库oracle客户端

    在Ubuntu16.04下安装oracle数据库客户端,使Django项目连接到远程Oracle数据库. 1.下载oracle客户端安装包: 进入官网http://www.oracle.com/tec ...

  4. Ubuntu16.04下安装redis

    Ubuntu16.04下安装redis 保证网络畅通,选定好下载工作路径,执行以下命令下载redis-3.2.6: sudo wget http://download.redis.io/release ...

  5. docker学习笔记(一)—— ubuntu16.04下安装docker

    docker学习笔记(一)—— ubuntu16.04下安装docker 原创 2018年03月01日 14:53:00 标签: docker / ubuntu 1682 本文开发环境为Ubuntu ...

  6. SLAM+语音机器人DIY系列:(二)ROS入门——3.在ubuntu16.04中安装ROS kinetic

    摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...

  7. Ubuntu16.04下安装Hadoop

    一.记录理由 刚开始只是想要学习怎么使用Hive的.想着安装应该很简单,没想到花了整整一天的时间来安装,为了避免下次犯同样的错误,特此记录. 二.安装Hadoop 网上教你怎么安装Hadoop的文章有 ...

  8. Ubuntu16.04下安装googlechrome flash 插件和安装网易云音乐

    一.ubuntu 16.04 下安装完后发现 flash无法播放没有安装flash插件因为 Adobe Flash 不再支持 linux Google 便开发了PepperFlashPlayer来替代 ...

  9. Ubuntu16.04下安装texlive

    Ubuntu 16.04下安装texlive的步骤如下: 1.下载texlive 打开终端输入:sudo apt-get install texlive-full  #下载这一过程会持续10-20分钟 ...

随机推荐

  1. DVWA 黑客攻防演练(十三)JS 攻击 JavaScript Attacks

    新版本的 DVWA 有新东西,其中一个就是这个 JavaScript 模块了. 玩法也挺特别的,如果你能提交 success 这个词,成功是算你赢了.也看得我有点懵逼. 初级 如果你改成 " ...

  2. ngnix简单使用

    NGINX是一个高性能HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器,是由伊戈尔·塞索耶夫为俄罗斯访问量第二的Rambler.ru站点开发的,第一个公版发布于2004年10月4日 ...

  3. sql面试 查找每个班级的前5名学生(取分类数据的前几条数据)

    关键字PARTITION BY 自己看代码喽~ SELECT * FROM ( SELECT ROW_NUMBER() OVER (PARTITION BY ClassType ORDER BY Sc ...

  4. Delphi中常用字符串处理函数

    .copy(str,pos,num) 从str字符串的pos处开始,截取num个字符的串返回. 假设str为,)=,)='def' .concat(str1,str2{,strn}) 把各自变量连接起 ...

  5. spring boot跨域问题

    跨域是指不同域名之间相互访问.跨域,指的是浏览器不能执行其他网站的脚本.它是浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制.也就是如果在A网站中,我们希望使用Ajax来获得B网站 ...

  6. 海思uboot启动流程详细分析(一)

    第一阶段 start.S 首先我们可以在u-boot.lds中看到ENTRY(_start),即指定了入口_start,_start也就是整个start.S的最开始: 1. reset 在arch\a ...

  7. ILRuntime官方Demo笔记

    调用/执行 热更中的方法 调用热更代码中方法,写在AppDomain中,记录一下主要几个方法: AppDomain.LoadAssembly 加载热更dll 执行热更代码的方法,有两种方式: appd ...

  8. Windows 组策略的生效规则

    一般的继承与处理规则 若上层父OU的某个组策略项目被设定,但是其下层子OU未设定该项目,则下层子OU继承上层父OU的这个组策略项目设定值 若在下层子OU内的某个组策略项目被设定,则此设定值预设会覆盖由 ...

  9. Active Directory Replication(复制)

    KCC(The Knowledge Consistency Checker)知识一致性检查器是一个内置的程序,在所有与管理器上运行,为林创建复制拓扑.默认,KCC15分钟间隔运行一次,根据当时存活的最 ...

  10. cordova 自定义 plugin

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_30879415/article/details/81265455准备工作安装cordovanp ...