Я изучаю Golang и у меня есть вопрос ниже.
У нас есть одна структура basi c и еще две, которые содержат basi c. Можно ли написать забавный c, который ожидает массив структуры basi c, но назовем это забавным c с предоставлением двух других? См. Пример ниже.
// Pathable provide path property
type Pathable struct {
path string
}
// File sturcture
type File struct {
name string
Pathable
}
// Directory structure
type Directory struct {
name string
files []File
directories []Directory
Pathable
}
// Detect if provided directories contain specified path
func ifPathAlreadyExist(entities []Pathable, path string) bool {
for _, entity := range entities {
if entity.path == path {
return true
}
}
return false
}
func main() {
pathables := []File{
File{
name: "some_file.txt",
Pathable: Pathable{
path: "test_path/to/file",
},
},
}
localPath := "some/path"
if ifPathAlreadyExist(pathables, localPath) {
fmt.Println("Exist")
}
}
Приведенный выше код генерирует исключение cannot use pathables (variable of type []File) as []Pathable value in argument to ifPathAlreadyExist
при вызове ifPathAlreadyExist
.
Я полагаю, что возможно создание функций оболочки для каждой структуры, которая содержит Pathable : эти обёртки просто конвертируют предоставленный массив структур в Pathable и вызывают просто ifPathAlreadyExist
fun c выше. Но я чувствую, что это неправильный путь.
Итак, на самом деле мой вопрос заключается в том, как правильно реализовать ifPathAlreadyExist
, чтобы избежать дублирования этого метода для каждой структуры, которая содержит структуру Pathable
внутри?
Спасибо за внимание и помощь!