10 Star 31 Fork 5

夏午茶 / sago

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
README.md 5.53 KB
一键复制 编辑 原始数据 按行查看 历史
gjy 提交于 2020-09-14 18:51 . v2

#sago.v2

介绍

  • 西米露,一种富有营养的物质,手工制作
  • 提供一套轻量可控的脚本开发脚手架,降低并发程序开发难度

软件功能

  • 支持测试/生产环境 配置文件区分,
  • 日志(持错误分级输出,文件切割(按天/按月),文件自动清理,rgb颜色输出)
  • 并发 (超时统计,协程池)
  • cmd 脚手架工具等 (生成项目基本目录生成,model文件生成

go mod 安装

  • 需要安装 mod 包,安装成功后配置环境变量

  • IDE选择:建议使用goland版本 >= 2019.2,安装好后会自动检测并引入依赖,go mod是golang新出特性,旧版本不支持

使用教程

框架引入

go get gitee.com/xiawucha365/sago

配置文件 dev.toml

=================通用配置======================
app_name = "sago"
app_version = "2.3"
debug = false //debug模式下输出更详细错误信息

==============orm============================
[mysql]
addr = "127.0.0.1:3376"
username = "mfw_dev"
password = ""
charset = "utf8"
dbname = ""
#支持xrom/gorm切换
engine = "xorm"  

[mongodb]
addrs = ["127.0.0.1:3376","127.0.0.2:3376","127.0.0.3:3376"] //支持副本集以及单节点模式
username = ""
password = ""
dbname = ""
replica_set = ""
engine = "mgo"

#redis设置
[redis]
addr = ""
password = ""
#===============log=========================
[log]
#日志目录(绝对目录),默认与可执行文件同目录
log_dir = ""
#文件分割周期 month(按月) day(按天)
split_duration = "month"
#日志文件保存等级 info > warn  > error  默认为info
level = "error"
#保留最近多少天的日志,过期自动清理
max_age = 30

###备注

支持配置热加载,比如程序运行中需要修改debug=true场景,数据库配置信息不建议运行中修改

######打印配置

	//配置打印
	sago.Gdi.Invoke(func(cf *config.Config) {
		sagoutil.PrintType(cf)
	})

######日志使用


	//日志使用
	sago.Gdi.Invoke(func(log *slog.Log) {
		defer  log.Sync()
		log.Info("log测试")
		log.Warn("log测试")
		log.Error("log测试")
	})

######数据库操作

import (
	"fmt"
	"math/rand"
	"time"
	sago "gitee.com/xiawucha365/sago.v2"
	"gitee.com/xiawucha365/sago.v2/core/config"
	slog "gitee.com/xiawucha365/sago.v2/core/log"
	sagoutil "gitee.com/xiawucha365/sago.v2/core/util"
	"gitee.com/xiawucha365/sago.v2/core/orm"
	"gopkg.in/mgo.v2/bson"
)

func main(){
    	//mysql=============================================================================================================
    	//mysql 框架本身查询语句
    	sago.Gdi.Invoke(func(db *orm.Db) {
    		var demos []Demo
    		_ = db.FindBySql("select * from t_creator_center  limit 2", &demos)
    		fmt.Println("xorm 框架查询")
    		sagoutil.PrintType(demos)
    	})
    
    	//mysql xorm引擎 原生查询语句
    	sago.Gdi.Invoke(func(db *orm.DbMysql) {
    		var demos []Demo
    		res, err := db.Engine.Xorm.QueryString("select * from t_creator_center  limit 2")
    		if err != nil {
    			panic(err)
    		} else {
    			if res1, err := sagoutil.JsonEncode(res); err != nil {
    				panic(err)
    			} else {
    				_ = sagoutil.JsonDecode(res1, &demos)
    			}
    		}
    		fmt.Println("xorm 原生查询")
    		sagoutil.PrintType(demos)
    	})
    
    	//mysql gorm引擎 原生查询语句 需要修改配置文件mysql-engine为gorm
    
    	//sago.Gdi.Invoke(func(db sago.GDbParams) {
    	//
    	//	var demos []Demo
    	//	res := db.Mysql.Engine.Gorm.Raw("select * from t_creator_center  limit 2").Find(&demos)
    	//	if res.Error != nil {
    	//		panic(res.Error)
    	//	} else {
    	//		fmt.Println("gorm 原生查询")
    	//		sagoutil.PrintType(demos)
    	//	}
    	//})
    
    	//指定数据库
    	sago.Gdi.Invoke(func(cf *config.Config) {
    
    		db := orm.GetMysqlConnByDb(cf, "gorm", "sale_contact")
    		var demos []Demo2
    		_ = db.FindBySql("select * from t_hm_friend  limit 2", &demos)
    		fmt.Println("指定数据库查询")
    		sagoutil.PrintType(demos)
    
    	})
    
    	//使用addr查询
    	sago.Gdi.Invoke(func(cf *config.Config) {
    
    		db := orm.GetMysqlConnByAddr(cf, "",
    			"mfw_dev:2cB509cc0bf@tcp(127.0.0.1:3376)/sale_spider?charset=utf8&parseTime=True&loc=Local")
    		var demos []Demo
    		_ = db.FindBySql("select * from t_creator_center  limit 2", &demos)
    		fmt.Println("指定ddr查询")
    		sagoutil.PrintType(demos)
    	})
    
    	//mongodb================================================
    	//框架查询语句-待封装
    
    	//mgo 原生查询
    	sago.Gdi.Invoke(func(db *orm.DbMongodb) {
    		var demo Item2
    		if err := db.Engine.Mgo.C("video_info").Find(bson.M{"ptype": "YD"}).One(&demo); err != nil {
    			panic(err)
    		} else {
    			fmt.Println("mongo查询")
    			sagoutil.PrintType(demo)
    		}
    	})
}

######并发组件

import (
	"fmt"
	"math/rand"
	"time"
	"gitee.com/xiawucha365/sago.v2/parallel"
)
type worker struct {
	ID int
}
func (m *worker) Task() error {

	fmt.Println("job:" , m.ID , "runing...")
	timen := rand.Intn(3)
	//fmt.Println(timen,"seconds")
	time.Sleep(time.Second * time.Duration(timen))
	fmt.Println("job:" , m.ID , "over")
	return nil
}

func main(){
	var items []int
	for i:=1;i<=100;i++ {
		items = append(items,i)
	}

	sp := parallel.NewSPool(5, len(items),0,false)

	for _,id:= range items {
		np := worker{ID: id}
		sp.Commit(&np)
	}

	sp.Runtimelog()
	sp.Release()
}

###更多例子 见 examples 目录

参与贡献

Go
1
https://gitee.com/xiawucha365/sago.git
git@gitee.com:xiawucha365/sago.git
xiawucha365
sago
sago
master

搜索帮助