1、经过apt-get安装
一、安装php
sudo apt-get install golang
二、设置GOPATH变量mysql
GOPATH是扩展库的目录,Go先搜索标准库目录,而后搜索GOPATH库目录,全部的非标准库都放在GOPATH下。以GOPATH为“/usr/local/go”目录为例子:linux
(1)把export GOPATH=/opt/go加入到~/.bashrc文件的最后。
(2)source ~/.bashrc 从新加载配置git
这样就加好了GOPATH。注意:apt-get命令安装只能安装go1.6版本如今不少开源项目都用上了1.7以上建议手动安装更高版本。github
2、手动安装新的稳定版本(重要)golang
一、以1.8版本为例子下载go1.8.linux-amd64.tar.gz安装包,官方下载地址:https://golang.org/dl/,官方常常抽风打不开。web
下载地址:http://www.golangtc.com/downloadredis
二、使用tar命令将安装包解压到/usr/local目录下:sql
tar -xzf go1.8.linux-amd64.tar.gz -C /usr/local
注意:root 权限问题数据库
验证安装结果,执行如下命令:
/usr/local/go/bin/go version
出现如下结果表示安装成功:
三、环境变量的设置
【1】单个用户配置:在 ~/.bashrc文件末尾加上以下环境变量:
vim ~/.bashrc
export GOPATH=/opt/go export GOROOT=/usr/local/go export GOARCH=386 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=386 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!") }
五、运行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="386" 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="0" 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
主要变量说明:
一、GOROOT就是go的安装路径
二、GOPATH是做为编译后二进制的存放目的地和import包时的搜索路径 (其实也是你的工做目录, 你能够在src下建立你本身的go源文件, 而后开始工做)
三、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 2 . ├── 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 := 0; i < 1000; i++ { z -= (z*z - x) / (2 * x) } return z }
这样个人应用包目录和代码已经新建完毕,注意:通常建议package的名称和目录名保持一致
编译应用
上面咱们已经创建了本身的应用包,如何进行编译安装呢?有两种方式能够进行安装
一、只要进入对应的应用包目录,而后执行go install
,就能够安装了
二、在任意的目录执行以下代码go install mymath
安装完以后,咱们能够进入以下目录:
www@TinywanAliYun:~/golang/gopath$ tree -L 3 . ├── 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(2)) }
能够看到这个的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(2) = 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(2) = 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 3 . ├── 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, 1 row affected (0.03 sec) mysql> show databases; +--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| webcron |
| zabbix |
+--------------------+
5 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 = "123456" db.port = 3306 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 = 100 mail.from = tinywan@163.com mail.host = smtp.163.com mail.port = 25 mail.user = tinywan@163.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='639' REDIS_PASS='tinywan2321' REDIS_DB=12 GO=$(redis-cli -h 127.0.01 -p 23423 -a dddd -n 12 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 的坑,话说本身太笨了,给点时间仍是能够的啦!(*^__^*) 嘻嘻……