Я использовал C некоторое время, но иногда, когда я думаю о том, как решить проблему, я не могу думать ни о каком другом пути, кроме как ооо, как меня учили в школе. И поскольку я использовал C, я в основном использовал шаблоны OO, но в C иногда боролся с языком, чтобы он работал. К go с простым примером: если мне нужно написать абстракцию ресурса файловой системы, я подумаю о написании базового класса Resource, который будет наследоваться, например, классом ImageFile и классом AudioFile.
class Resource {
bool opened;
virtual bool load_file(const char *fpath);
virtual bool release(void);
}
class ImageFile : Resource {
bool load_file(const char *fpath) { ... }
bool release(const char *fpath) { ... }
}
class AudioFile : Resource {
bool load_file(const char *fpath) { ... }
bool release(const char *fpath) { ... }
}
int main() {
Resource img = ImageFile();
Resource mus = AudioFile();
img.load_file("my_image.png");
mus.load_file("song.mp3");
img.release();
mus.release();
return 0;
}
В C я повторяю это поведение, используя указатели функций. Дело в том, что это все еще ОО дизайн, и я хочу научиться мыслить процедурно. Как бы вы go разработали эту же проблему процедурным способом? Как наследование ОО переводится в процедурный? Как вы думаете, процедурный?