#sago.v2
Необходимо установить модуль go, после успешной установки настроить переменные окружения
Рекомендованное использование IDE: GoLand версии >= 2019.2, после установки будет автоматически обнаружено и внедрено, go.mod — это новая функциональность Golang, которая не поддерживается старыми версиями
go get gitee.com/xiawucha365/sago.v2
=================Общие настройки======================
app_name = "sago"
app_version = "2.3"
debug = false # в режиме отладки выводятся более подробные сообщения об ошибках
```==============
### ORM
[mysql]
addr = "127.0.0.1:3376"
username = "mfw_dev"
password = ""
charset = "utf8"
dbname = ""
# Поддерживает xorm/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_dir = ""
# Периодичность разделения логов month (по месяцам) day (по дням)
split_duration = "month"
# Уровень логирования info > warn > error (по умолчанию info)
level = "error"
# Количество дней, за которое хранятся логи, устаревшие логи будут автоматически удалены
max_age = 30
### Примечание
Поддерживает горячую перезагрузку конфигураций, например, при необходимости изменения debug=true во время работы программы, рекомендуется не менять конфигурацию баз данных во время выполнения.
##### Вывод конфигурации
```go
// Вывод конфигурации
sago.Gdi.Invoke(func(cf *config.Config) {
sagoutil.PrintType(cf)
})
sago.Gdi.Invoke(func(log *slog.Log) {
defer log.Sync()
log.Info("лог тест")
log.Warn("лог тест")
log.Error("лог тест")
})
```##### Операции с базой данных
```go
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("запрос с использованием адреса")
sagoutil.PrintType(demos)
})
//mongodb================================================
//запрос в рамках фреймворка - требуется упаковка // mgo native request
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("MongoDB query")
sagoutil.PrintType(demo)
}
})
}
```###### Parallel components
```go
import (
"fmt"
"math/rand"
"time"
"gitee.com/xiawucha365/sago.v2/parallel"
)
type worker struct {
ID int
}
func (m *worker) Task() error {```markdown
fmt.Println("задача:", m.ID, "выполняется...")
timen := rand.Intn(3)
//fmt.Println(timen, "секунд")
time.Sleep(time.Second * time.Duration(timen))
fmt.Println("задача:", m.ID, "завершена")
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
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )