通过两种方式安装

一、通过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. VUE新版扫码下单必选分类设置FAQ

    使用场景:商家想要设置某些分类下的商品设置必选,否则不能下单.如某火锅店,商家想要设置汤底这个分类下的商品,顾客扫码下单的时候必须选择一份才能下单,此时 就可以使用这个功能 配置步骤和注意事项如下: ...

  2. 神经网络MPLClassifier分类

    代码: # -*- coding: utf-8 -*- """ Created on Fri Aug 24 14:38:56 2018 @author: zhen &qu ...

  3. js饼状图(带百分比)功能实现,新人必懂

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  4. Linux(CentOS7)下如何配置多个Tomcat容器

    一.Linux版本 二.上传并解压apache-tomcat-7.0.90压缩包,然后复制粘贴出来多个tomcat 解压缩 tar -xzvf apache-tomcat-7.0.90.tar.gz ...

  5. 解决Editor.md通过代码块原样输出Emoji被强制解析问题

    Editor.md是一款优秀的开源Markdown 编辑器,在使用中遇到的一些问题和功能改进分享给需要的伙伴. 项目地址 https://github.com/pandao/editor.md 问题 ...

  6. C# -- 使用线程池 ThreadPool 执行多线程任务

    C# -- 使用线程池 ThreadPool 执行多线程任务 1. 使用线程池 class Program { static void Main(string[] args) { WaitCallba ...

  7. idea中Springcloud同时运行多个模块、微服务

    idea中有个窗口叫做 Run DashBoard 在这里可以管理多个模块的启停,这个面板一般情况下是关闭的打开Run DashBoard面板 在工程的.idea中找到workspace.xml,并找 ...

  8. June 28th. 2018, Week 26th. Thursday

    You cannot change the circumstances but you can change yourself. 既然改变不了环境,那就改变自己. From Jim Rohn. Rec ...

  9. dig请求和回应中的参数解释

    ; <<>> DiG 9.9.5-3ubuntu0.6-Ubuntu <<>> baidu.com dig这个程序的版本号和要查询的域名 ;; glob ...

  10. 19 款仿 Bootstrap 后台管理主题免费下载

    声明: 1. 本篇文章提到的仿 Bootstrap 风格的主题,是基于 jQuery 的 ASP.NET MVC 控件库的主题. 2. FineUIMvc(基础版)完全免费,可以用于商业项目. 目录 ...