Лучший способ организовать интерфейс Go

Его долгое время, так как я запрограммировал в C++, но я знаю, что в C++ классы организованы в.h файлы и .cpp файлы. Также много других языков извлекают выгоду из распадающегося кода в логические группировки в структуре каталогов для улучшения организации.

Хорошо я пытаюсь учиться, Идут теперь, и я перечитывал по статье Go for C ++ Programmers, когда я натолкнулся на интерфейсы. Статья объясняет, что интерфейсы в Движении по существу занимают место классов и шоу, как настроить их вполне прилично.

Что я пытаюсь выяснить, хотя то, как я должен организовать интерфейс в файлы? Например, интерфейс должен быть в одном файле, в то время как реализация находится в другом?

myInterface.go

type myInterface interface {
    get() int
    set(i int)
}


myImplementation.go

type myType struct { i int }
func (p *myType) set(i int) { p.i = i }
func (p *myType) get() int { return p.i }

Мой код здесь может быть неверным, так как я не полностью знаю то, что я делаю уже (и если бы я неправ, исправьте меня), но это было бы лучшим способом настроить это? Мне очень нелегко пытаться перенести мою голову, как организовать код в Движении, таким образом, любая справка ценится!

Столица

6
задан Metropolis 23 May 2010 в 00:32
поделиться

2 ответа

Нет необходимости помещать типы и интерфейсы в отдельные файлы. Важны вещи, экспортируемые из каждого пакета , и вы обозначаете их, начиная имя с заглавной буквы. В C&C. то, что попадает в заголовочный файл, имеет значение, потому что это то, что «импортировано» (включено). В Go импортируется именно пакет, и не имеет значения, как его содержимое организовано в разные исходные файлы (импортеру он все равно не будет виден).

Моя личная рекомендация - избегать создания ненужных файлов. Если код относительно короткий, храните его в одном файле. Если он длинный, рассмотрите возможность разделения частей, для которых это кажется естественным (например, интерфейс + связанные функции, которые, вероятно, образовали бы отдельный класс, если бы вы делали это на Java или C ++). Не отделяйте ничего только ради отделения определений от кода; в Go это не имеет смысла, хотя в C.

8
ответ дан 8 December 2019 в 18:33
поделиться

Язык программирования Go - это не C ++ и не C. Подходите к нему как к новому языку. Go не имеет эквивалента заголовочным файлам. Он имеет лишь слабую связь с концепцией классов C ++. Поскольку вы не являетесь опытным программистом на C ++, игнорируйте статью Go For C ++ Programmers .

Начните с чтения Учебника по языку программирования Go . Затем прочтите Эффективная игра . Просмотрите Спецификацию языка программирования Go , чтобы знать, где искать информацию.

Go имеет открытый исходный код, поэтому посмотрите документацию по реальному пакету Go и исходный код .

Для начала посмотрите на time пакет документацию и исходный код , который был написан авторами Go. Они не используют отдельные файлы для объявлений и реализаций интерфейсов, так зачем вам это нужно? Как вы сами говорите, вы еще не знаете, что делаете, так почему бы не начать с того, чтобы последовать примеру экспертов?

Отчасти мотивация для разработки языка программирования Go возникла из желания создать язык который был лучше, чем C, и намного проще, чем C ++. Принимая во внимание процедурные характеристики (часто C-подобные) Go, полезны такие концепции процедурного проектирования, как связь и согласованность. Эти концепции очевидны при разделении пакета Go time на несколько исходных файлов. Некоторые концепции дизайна классов также будут полезны, но помните, что Go не поддерживает наследование.

Как отмечал Никлаус Вирт в своей классической статье «Разработка программ путем поэтапного уточнения», ранние наброски программы редко бывают идеальными, возможно, иногда даже небрежными. Даже финальная версия редко бывает идеальной. Например, авторы Go всего через несколько месяцев недавно переписали пакет Go json .

Дизайн и реализация языка программирования Go допускают использование множества небольших функций. Он предпочитает лаконичные решения. Конечно, многие функции не доступны вне пакета. Произвольные ограничения на размер или количество функций редко работают на каком-либо языке.

Программы на Go создаются путем связывания вместе пакеты. Пакет в свою очередь построен из одного или нескольких источников файлы, которые вместе объявляют константы, типы, переменные и функции принадлежащих к пакету и которые доступен во всех файлах одного и того же упаковка. Эти элементы могут быть экспортирован и использован в другом пакете. Пакеты, язык программирования Go Технические характеристики.

Что должен делать ваш первый пакет Go? Задайте конкретные вопросы, на которые можно будет ответить, и опишите подробности.

5
ответ дан 8 December 2019 в 18:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: