gpt4 book ai didi

inheritance - golang中如何设置继承

转载 作者:数据小太阳 更新时间:2023-10-29 03:39:54 27 4
gpt4 key购买 nike

tl;dr

在此示例中,将 Store 设置为在多个服务之间共享的正确方法是什么:https://github.com/th0th/goblog/blob/2b2d7ac51978de41f392396309424043817a49d7/store/store.go#L29

详情

您好,我正在尝试通过创建一个简单的 MVC-ish 博客 REST API 来理​​解 go 的工作原理。我计划应用程序包含 3 个包/层:

模型

保存数据结构。定义这些结构的数据库访问层的接口(interface)。

商店

显示实际的数据库连接。实现模型的接口(interface)。所有数据库访问都通过此实现完成。

接口(interface)

REST API 相关内容。路线等。

我在 store 包中有一个 Store 结构,它包含服务:

// Store wraps all services
type Store struct {
DB *sqlx.DB

CategoryService CategoryService
PostService PostService
}

这里是 CategoryService(PostService 也是这样,它们都有 CRUD 操作的方法。):

// CategoryService represents a service for managing categories.
type CategoryService struct {
store *Store
}

当我创建此 Store 的实例时,我需要设置每个服务的存储。

// New creates and returns new Store
func New() Store {
var s Store

db, err := sqlx.Connect("mysql", "<user>:<pass>@(localhost:3306)/goblog")

if err != nil {
log.Fatal(err)
}

s.DB = db

s.CategoryService.store = &s
s.PostService.store = &s

return s
}

我希望存储在服务之间共享,正确的方法是什么?我做错了什么吗?

最佳答案

我发现您的设计有点奇怪,Store 知道服务,而服务知道 Store...对我来说,双重依赖看起来不像是的,但这可能有待商榷。

如果我是你,我会从 Store 中删除服务,并在创建每个服务时将 Store 作为参数传递。

例如,从商店中删除服务:

type Store struct {
DB *sqlx.DB
// no services here
}

...并在创建服务时将 Store 作为参数传递:

type CategoryService struct {
store *Store
}

func NewCategoryService(s Store) CategoryService {
var service CategoryService
service.store = s
return service
}

func (service CategoryService) Add() {
// service will have access to the store value
// via service.store
}

关于inheritance - golang中如何设置继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47570448/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com