gpt4 book ai didi

golang重用struct的方法

转载 作者:IT王子 更新时间:2023-10-29 01:40:01 26 4
gpt4 key购买 nike

我正在学习围棋,并且正在看一个简单的围棋示例网络应用程序: https://github.com/campoy/todo/blob/master/task/task.go

具有结构:

    type Task struct {        ID    int64  // Unique identifier        Title string // Description        Done  bool   // Is this task done?    } 

    // TaskManager manages a list of tasks in memory.    type TaskManager struct {        tasks  []*Task        lastID int64    }

TaskManager上有方法 func (m *TaskManager) 保存(任务 *Task) 错误 ... func (m *TaskManager) All() []*Task...

我想知道如何将 TaskManager 概括为 Manager,以便它具有这些相同的方法(即:save、all、find),因此它可以用于不同的结构,例如 Users,它们都具有 ID 字段。

我假设构造一个通用类型的数组不适合,因为在“保存”和“查找”方法中有一个 ID

最佳答案

Go 没有泛型(至少现在是这样),但您仍然可以通过使用接口(interface)来执行您想要的操作(不是 100%)。

type Manager interface {
Save(interface{}) error
All() ([]interface{}, error)
}

当然,它不是免费的,你需要在你的 TaskManager 中做一些错误处理来实现接口(interface),例如:

func (m *TaskManager) Save(t interface) error {
task, ok := t.(Task) // type assertion
if !ok {
// return error invalid input type
}
// do the rest as normal...
}

:评论示例

type Entry interface {
SetID(int64)
GetID()int64
}

type Task struct {...}

func (t *Task) SetID(id int64) {...}
func (t *Task) GetID() {...}

func (m *TaskManager) Save(e Entry) error {...}

关于接口(interface)的更多信息:* http://golang.org/ref/spec#Interface_types
* http://golang.org/doc/effective_go.html#interfaces_and_types
* http://golangtutorials.blogspot.com/2011/06/interfaces-in-go.html

关于golang重用struct的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22774990/

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