日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Ubuntu >内容正文

Ubuntu

Golang入门教程(二)Ubuntu16.04下安装golang(实例:Golang 定时任务管理器)

發布時間:2024/4/17 Ubuntu 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Golang入门教程(二)Ubuntu16.04下安装golang(实例:Golang 定时任务管理器) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

通過兩種方式安裝

一、通過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.8.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=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!") }

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="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

主要變量說明:

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 2 . ├── bin ├── pkg └── src

注意:$GOPATH 指定的目錄要自己新建,包括下面的src目錄
下面我就以mymath為例來講述如何編寫應用包,執行如下代碼

cd $GOPATH/src mkdir mymath

新建文件sqrt.go,內容如下

// $GOPATH/src/mymath/sqrt.go源碼如下: package mymathfunc Sqrt(x float64) float64 {z := 0.0for i := 0; i < 1000; i++ {z -= (z*z - x) / (2 * x)}return z }

這樣我的應用包目錄和代碼已經新建完畢,注意:一般建議package的名稱和目錄名保持一致

編譯應用

上面我們已經建立了自己的應用包,如何進行編譯安裝呢?有兩種方式可以進行安裝

1、只要進入對應的應用包目錄,然后執行go install,就可以安裝了

2、在任意的目錄執行如下代碼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 mainimport ("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 的坑,話說自己太笨了,給點時間還是可以的啦!(*^__^*) 嘻嘻……

?

?

轉載于:https://www.cnblogs.com/tinywan/p/6928300.html

總結

以上是生活随笔為你收集整理的Golang入门教程(二)Ubuntu16.04下安装golang(实例:Golang 定时任务管理器)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。