golang

golang启用cron的定时任务

星期三, 十二月 11th, 2019 | golang | 没有评论

0.起因用golang写了个自动备份mysql数据库的工具

把原来用shell脚步写的工具,封装成可执行文件,配置对应的密码参数即可自动执行,方便数据的自动备份

现在都用云数据库了,这种脚本也越来越不需要用了,直接保留镜像就好了,从小网站节省成本还是需要做的,只做全量备份即可.

闲话:还准备自动同步备份文件到多台机器,感觉golang写工具还是爽哉,想要工具可以赞赏我哈^-^

1.工具要用到定时执行启用cron

使用 https://github.com/robfig/cron 这个包,它实现了 cron 规范解析器和任务运行器

具体使用可以参加起使用说明,新版已经不直接支持秒的功能需要启用秒需要 c :=cron.New(cron.WithSeconds())即可

› Continue reading

Tags: ,

golang开发环境快速搭建centos版本

星期二, 十一月 12th, 2019 | golang | 没有评论

1.用golang写过一些工具,每次要开发工具的时候还要去弄下对应的环境,记录下,好随时翻阅

这里使用的是centos8,window版本直接配置即可

2.官网下载二进制安装包,现在有国内可以访问的地址了

https://golang.google.cn/

wget https://dl.google.com/go/go1.13.4.linux-amd64.tar.gz
 
mkdir -p /usr/local/golang/opt/
 
tar -C /usr/local/golang/opt/ -zxvf go1.13.4.linux-amd64.tar.gz 
 
mkdir -p /usr/local/golang/repos/gopath/

3.设置环境变量填写如下地址

vi /etc/profile
 
export GOROOT=/usr/local/golang/opt/go
export GOPATH=/usr/local/golang/repos/gopath
export PATH=$PATH:$GOROOT/bin
 
 
source /etc/profile
 
go version

4.编写hello.go文件测试

 cd /usr/local/golang/repos/gopath
 
 vi hello.go
 
package main
 
import "fmt"
 
func main(){
  fmt.Printf("hello,world\n");
}

5.运行及编译

go run hello.go 
 
go build hello.go 
./hello

6.解决不翻墙go get之类的net包问题

mkdir -p $GOPATH/src/golang.org/x/
cd $GOPATH/src/golang.org/x/
yum install git
git clone https://github.com/golang/net.git net
go install net

执行go install之后没有提示,就说明安装好了。

7.后续就各种api 开发吧
https://golang.google.cn/doc/

Tags: ,

golang 获取当天凌晨时间戳

星期三, 四月 10th, 2019 | golang | 没有评论

使用golang的time函数,记得要设定系统的时区,否则数据有问题

设置centos系统时区为上海

timedatectl set-timezone Asia/Shanghai
import("fmt"
	"time")
func main(){
	t := time.Now()
	zero_tm := time.Date(t.Year(), t.Month(), t.Day(), 0, 0, 0, 0, t.Location()).Unix()
	fmt.Println(zero_tm)
}

Tags:

golang开发的小工具的小问题总结

星期五, 七月 7th, 2017 | linux | 没有评论

用golang 开发了个自动抓取的小工具,同时受控服务器的任务分发.

小问题总结
1.build后的文件太大(5M)启用这种编译后(3M),更多加壳压缩太麻烦 没有弄了

解决采用:go build -ldflags “-s -w” 这种方式编译。

解释一下参数的意思:

-ldflags: 表示将后面的参数传给连接器(5/6/8l)
-s:去掉符号信息
-w:去掉DWARF调试信息
注意:

-s 去掉符号表(这样panic时,stack trace就没有任何文件名/行号信息了,这等价于普通C/C+=程序被strip的效果)

-w 去掉DWARF调试信息,得到的程序就不能用gdb调试了

2.工具启动后不允许崩溃 异常捕获 使用recover 捕获调用异常

package main
 
import (
    "fmt"
    "time"
)
 
func main() {
    i := 10000
    for j := 0; j < 3; j++ {
        // 使用多协程处理,其中可以预见的是除数为0会抛出异常
        go divide(i, j)
    }
 
    // 为了保证前面线程运行完,这里休眠一下
    for {
        time.Sleep(1 * time.Second)
    }
}
 
func divide(i, j int) {
    // 定义recover方法,在后面程序出现异常的时候就会捕获
    defer func() {
        if r := recover(); r != nil {
            // 这里可以对异常进行一些处理和捕获
            fmt.Println("Recovered:", r)
        }
    }()
 
    fmt.Println(i / j)
}

Tags:

Search

文章分类

Links

Meta