Ich habe dieseGo: Wie kann ich definieren eine eine Funktion für ähnliche Strukturen
type File struct{}
type FileRead struct {
File
}
type FileWrite struct {
File
}
type CppRead struct {
FileRead
}
type CppWrite struct {
FileWrite
}
func (f *File) Open(name string, mod string) {
fmt.Println("open", name, mod)
}
func (f *FileRead) Open(name string) { f.File.Open(name, "read") }
func (f *FileWrite) Open(name string) { f.File.Open(name, "write") }
func (f *CppRead) Open(name string) { f.FileRead.Open(name + ".cpp") }
func (f *CppWrite) Open(name string) { f.FileWrite.Open(name + ".cpp") }
func main(){
cpp := &CppWrite{}
cpp.Open("main")
}
Ich mag es nicht, weil es zwei Funktionen, die das gleiche tun:
func (f *CppRead) Open(name string)
func (f *CppWrite) Open(name string)
I können sie als
umschreibenfunc (f *CppRead) CppOpen(name string) { f.Open(name + ".cpp") }
func (f *CppWrite)CppOpen(name string) { f.Open(name + ".cpp") }
so werden sie mehr ähnlich, aber es gibt noch zwei
Ich weiß, dass ich eine Schnittstelle
type FileRWOpener interface {
Open(string)
}
func CppOpen(file FileRWOpener, name string) {
file.Open(name + ".cpp")
}
func main() {
cpp := &CppWrite{}
CppOpen(cpp, "main")
}
Aber ich will es als
cpp.Open("name") // not CppOpen(cpp, "main")
Es sei denn, Sie sehen einen großen Vorteil davon, dass die Funktion die Dateierweiterung hinzufügt, Sie können '(f * CppRead) Open' und' (f * CppWrite) Open' loswerden und einfach 'CppOpen (cpp," main. cpp ")' – Michael
Es ist nur ein minimales Beispiel, in einem echten Programm macht es mehr nützliche Arbeit. – pioh