2016-01-23 3 views
0

Я пытаюсь выяснить интерфейсы в GoLang.Как работают ioc, интерфейсы и реализации

Знакомимся с тем, как все это работает в интерфейсе Java i.e, реализует макет и полную реализацию. Я немного смущен тем, как я могу связать вещи вместе в Го.

Например, я пытаюсь реализовать разъем AmazonProductAdvertisingAPI. Я создал интерфейс PAAPI, а также другой файл, который обеспечивает реализацию.

У меня тогда есть структура config. Затем я создал файл с сигнатурами методов, которые реализуют PAAPI и основаны на config. i.e. config реализует PAAPI.

Все, что происходит в одном пакете. Но с внешней точки зрения, как я могу пойти и реализовать макет PAAPI, кажется странным, что все связано с структурой config.

Любой пример кода был бы весьма полезен. Благодарю.

+1

Я не совсем понимаю, что вы просите меня. Можете ли вы рассказать о своем вопросе? Может быть, добавить код? – Riscie

+0

Не программируйте Java в Go. Начните бетон (не с интерфейса). Извлеките интерфейс, где это необходимо. Посмотрите, как работает stdlib. – Volker

ответ

1

Если я правильно понимаю вас, вы говорите, что ваша реализация связана с структурой config вместо интерфейса. Если это так, просто замените аргумент, который использует интерфейс config, в данном случае PAAPI.

В нижеследующем коде вместо определения функции DoSomethingWithStruct, то, что вы хотите, вероятно, является определением функции DoSomethingWithInterface.

type PAAPI interface { 
    Foo() // just a stub method 
} 

type Config struct {} 

func (config *Config) Foo() { 
    // do something 
} 

func DoSomethingWithStruct(config Config) { 
    // do something 
} 

// you probably want a method that uses your config through the interface 
func DoSomethingWithInterface(config PAAPI) { 
    // do something 
} 

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

type ExternalConfig struct{} 

func (config *ExternalConfig) Foo() { 
    // do something 
} 

пар заметки об этом, что отличается от Java в том, что не существует никакого явного implements ключевого слова в Go. Вместо этого он основан на привычном принципе в динамически типизированных языках программирования, который в основном является duck-typing. Он неявно знает, что интерфейс реализуется структурой во время компиляции.

Основываясь на двух предыдущих фрагментах кода, вы можете позвонить по телефону DoSomethingWithInterface(ExternalConfig{}). Обратите внимание, что я ввел здесь пример ExternalConfig, но вы можете создать его с фактическими учетными данными и передать его в DoSomethingWithInterface таким же образом. Надеюсь это поможет. Кроме того, не стесняйтесь комментировать, чтобы просить о ясности, если я не попаду в цель.

Смежные вопросы