V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  qloog  ›  全部回复第 5 页 / 共 23 页
回复总数  443
1  2  3  4  5  6  7  8  9  10 ... 23  
我的分层是这样的:

handler -> service -> dao/repository -> model

handler: 负责接收数据、校验数据、调用逻辑层(service), 返回数据
service:负责逻辑编排,不会操作数据库、api 之类的
dao/repo: 数据调用层,不管是 三方接口、db 、cache 、MongoDB 、ES 等都在这里
model: db 层,仅有数据表结构体和表名的定义

可以参考: https://github.com/go-microservice/moment-service
可以控制队列的优先级,也就变相的控制了某个队列的并发数:

srv := asynq.NewServer(
asynq.RedisClientOpt{Addr: redisAddr},
asynq.Config{
// Specify how many concurrent workers to use
Concurrency: 10,
// Optionally specify multiple queues with different priority.
Queues: map[string]int{
"queue1": 6,
"queue2": 3,
"queue3": 1,
},
// See the godoc for other configuration options
},
)
AI 相关的系统架构设计:

1 、向量数据库的使用
2 、企业私有模型开发 -> 微调、RAG
3 、Agent 应用开发 -> 文本、多模态、LangChain 、LlamaIndex 、提示词工程

最终的职业方向可以是(由低到高): AI 大模型提示词工程师,AI 大模型工具应用开发工程师,AI 大模型开发工程师,AI 大模型架构师
277 天前
回复了 calmlyman 创建的主题 MongoDB mongodb 新手虚心请教大佬们
跑脚本的时候也可以适当的 sleep 个几秒, 让 mongodb 休息下
281 天前
回复了 way2me 创建的主题 酷工作 [成都] Golang 方向-不加班 不卷!
不在成都的只能飘过...
282 天前
回复了 bigoxEvan 创建的主题 程序员 后端 golang 开发,怎么继续深造呢?
@bigoxEvan 也是个方向(对于以后做独立开发有好处),客户端或者 web, 那就需要学学大前端了
282 天前
回复了 bigoxEvan 创建的主题 程序员 后端 golang 开发,怎么继续深造呢?
方向很多,比如:
go 的 errgroup, singlefilght 是否了解;
微服务方向(服务发现、负载均衡、监控、指标、链路追踪等等);
关注高并发、高可用、高扩展
k8s 的使用如何合理利用机器资源,具体每个服务的 pod 资源(内存、CPU)如何分配
...
golangweekly.com 周更,可邮件订阅
个人可以开通企业微信么?
284 天前
回复了 iicoder 创建的主题 推广 极客返利|专做网课返利、返现
有个问题呀,你把你得到的返利都返给了购买者,你赚取的是什么? 难道平台给双方都会返么? @iicoder
好厉害,必须去看看,另外技术栈也是我喜欢的 😝
补充:如果想简单操作,也可以在 dao 里(一个 dao 操作多个 model 也还好)统一操作, 利用 gorm 的 Transaction 函数:

```go
// dao/example.go
// 开始事务
tx := db.Begin()
if tx.Error != nil {
log.Fatalf("failed to begin transaction: %v", tx.Error)
}

// 事务中执行业务逻辑
err = tx.Transaction(func(tx *gorm.DB) error {
// 插入一条数据
err := tx.Create(&Model{Name: "test"}).Error
if err != nil {
return err
}

// 查询数据
var model Model
err = tx.First(&model, "name = ?", "test").Error
if err != nil {
return err
}

fmt.Printf("Found: %v\n", model)

// 更新数据
err = tx.Model(&model).Update("name", "updated").Error
if err != nil {
return err
}

fmt.Printf("Updated: %v\n", model)

return nil
})

// 根据事务结果提交或回滚
if err != nil {
tx.Rollback()
log.Fatalf("transaction failed: %v", err)
} else {
tx.Commit()
fmt.Println("transaction committed successfully")
}
```

类似于 @thevita 提到的
285 天前
回复了 hankli 创建的主题 程序员 纪念一下首个开源项目破 1k star 啦~
好项目,值得推荐,我在 HelloGithub 提交的项目,老板还没给我审核,还在审核中 😭
我的分层是这样的:
handler -> service -> dao/repository -> model

事务的开启是在 service , 操作数据的是在 dao 或 repo 层,model 仅仅定义数据字段和表名(无任何 db 操作)。

PS:也像楼主一样考虑过,将这些事务放在一起,且放置于 dao 里,也就不用传递 tx 了,但会带来一个问题: 一个 dao 要操作多个 model (或者说表), 我目前是倾向于一个 dao 操作一个 model ,这样 dao 的职责就很清晰, 也方便 cli 工具自动生成 dao 。

@gitrebase 提到的 redis 操作,我把他们都放在了 cache 目录里(和 dao 、service 在同一级), 然后供 dao/repo 调用,也就是 dao/repo 扮演了数据操作的角色,不关是 接口、db 、redis 、MongoDB 、ES 等都在这里操作,供上层的 service 调用,一个 service 可以调用多个 dao, 只依赖 dao 定义的接口,方便使用 wire 做依赖注入。

代码可参考: https://github.com/go-microservice/moment-service/blob/main/internal/service/post_svc.go#L88
289 天前
回复了 LeviMarvin 创建的主题 程序员 求推荐 Go 程序的 web 库
我用 https://github.com/go-eagle/eagle 写 API 、微服务
300 天前
回复了 Corybyte 创建的主题 程序员 2024 有推荐的 go 开源项目吗 想深入学习
@skylee6900 数据库 ORM 工具
300 天前
回复了 Corybyte 创建的主题 程序员 2024 有推荐的 go 开源项目吗 想深入学习
开发 API 接口、微服务或者 web 服务的: https://github.com/go-eagle/eagle
302 天前
回复了 ItemStr 创建的主题 职场话题 新年开工第一天,通知被裁了
回家继续过正月十五
1  2  3  4  5  6  7  8  9  10 ... 23  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4184 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 33ms · UTC 05:31 · PVG 13:31 · LAX 21:31 · JFK 00:31
Developed with CodeLauncher
♥ Do have faith in what you're doing.