sago
西米露,一种富有营养的物质,手工制成
cli并行框架 提供一套轻量可控的脚本开发脚手架,降低并发程序开发难度
软件功能
- 支持测试/生产环境 配置文件区分
- 数据库组件 mysql,redis
- 日志组件 支(持错误分级输出,文件切割,rgb颜色输出)
- 工具组件 (文件,网络,变量转换等)
- 并发组件 (支持协程复用模式和单次释放模式,支持并发数和超时时间设置)
- cmd 脚手架工具等 (生成项目基本目录生成,model文件生成)
使用说明
- go mod 安装
- 需要安装 mod 包,安装成功后配置环境变量
- export GO111MODULE=on
- export GOPROXY=https://goproxy.cn
- 需要安装 mod 包,安装成功后配置环境变量
- IDE选择:建议使用goland版本 >= 2019.2,安装好后会自动检测并引入依赖,go mod是golang新出特性,旧版本不支持
新项目初始化
- 1 利用脚手架工具生成一个新项目,如下
cd cmd
./sago_cmd -pname 项目名
table参数如不指定,则不生成model下的文件
- 2 将生成的目录拷贝到console下面,结束
项目部署
- 交叉编译:mac,windows,linux之间是不兼容的,在mac下生成linux上可执行文件命令
GOOS=linux GOARCH=amd64 go build -o worker_pcpro main.go
- 生产环境:
//生产环境-prod.toml配置文件
./sago -env=prod
//开发环境-对应etc下dev.toml配置文件
./sago -env=dev
其他examples
常规使用(参考export项目)
package main
import (
"fmt"
"gitee.com/xiawucha365/sago"
"strconv"
)
func main() {
defer logger.flush()
//使用mysql
var priceSeekoriItems []models.THotelPriceSeekori
app.GMysql.Select("id,ctime").Where("ctime > ? ", lastTime, ).Order("id asc ").Find(&priceSeekoriItems)
//使用redis
app.GRedis.Set("test_key","message")
reply,err := app.GRedis.Get("test_key")
if(err != nill){
panic(err)
}else{
fmt.Println(reply)
}
//日志输出/记录到文件
logger.Warn("hello,world")
}
并发相关 (参考spider_worker)
注意:worker的定义需要满足interface中d约定,实现Task()与GetTaskID()两个方法,后面会支持匿名函数
package main
import (
"fmt"
"gitee.com/xiawucha365/sago"
"time"
)
//并发池实例
var wpool *pipe.WPool
//任务实例
type worker struct {
name string
}
//要执行的任务列表
var name_slices = []string{"001", "002", "003", "004", "005", "006", "007", "008", "009"}
//单任务的业务逻辑代码,
func (m *worker) Task() error {
fmt.Println("job:" + m.name + " start")
time.Sleep(time.Second * 3)
fmt.Println("job:" + m.name + " end")
return nil
}
//获取任务id
func (m *worker) GetTaskID() interface{} {
return m.Name
}
//例子演示
func main() {
logger.Warn("并发开始")
//设置最大并发数与超时时间
wool = pipe.NewWPool(4, len(name_slices),30)
wool.Run()
for _, name := range name_slices {
np := worker{
name: name,
}
wool.Commit(&np)
}
wool.Shutdown()
}
来源:oschina
链接:https://my.oschina.net/u/4355947/blog/4285063