LINUX.ORG.RU

Автоматическая регистрация объектов при импорте

 


0

2

Привет,

Собственно, такой вот вопрос, как сделать subj ?
Дано: несколько бэкендов (https, http) каждый в своем sub-package.
Чего хочется: что бы при импорте каждый пакет «регистрировался» в главном пакете. Т.е. хочется на верхнем уровне иметь массив структур с описанием каждого пакета, который бы заполнялся автоматически.

Думал над вариантом с init, но так нельзя сделать, потому что получается циклическая зависимость (а Go в них не умеет).

Примеры кода:
backend/http/http.go

package http

import "root"

var info = root.Info{Name: "http"}

func init() {
    root.RegisterBackend(&info)
}

root.go
package root

import "backend/http"

func RegisterBackend(backend *Info) {
  ...
}

И вот тут как раз и циклическая зависимость ...
И главный вопрос - как быть ? :)

★★★★★

Последнее исправление: joy4eg (всего исправлений: 1)

1) Не импортируешь из root пакеты http/https

2) Создаешь четверый пакет, из которого делаешь import _ "backend/http[s]"

3) Естественно, должны регистрироваться интерфейсы из root, а не структуры из https[s]

4) Профит

derlafff ★★★★★
()
Последнее исправление: derlafff (всего исправлений: 1)

Не импортировать backend/http, а оставить это пользователям пакета root.

Deleted
()
Ответ на: комментарий от derlafff

OOppsss... Что-то Я совсем затупил, спасибо! Такие нужна была дополнительная сущность.

joy4eg ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.