"Находят в файлах", был огромный усилитель производительности для меня. Вместо того, чтобы переходить к каждому результату один за другим, это просто показывает Вам список результатов в Вашем всем проекте или решении. Это делает очень простым найти пример кода или видеть, используется ли функция где-нибудь.
Если отбросить аргумент о том, является ли реализация шаблона singleton хорошей идеей, вот возможная реализация:
package singleton
type single struct {
O interface{};
}
var instantiated *single = nil
func New() *single {
if instantiated == nil {
instantiated = new(single);
}
return instantiated;
}
single
и instantiated
являются частными, но New ()
является общедоступным. Таким образом, вы не можете напрямую создать экземпляр single
, не пройдя через New ()
, и он отслеживает количество экземпляров с частным логическим экземпляром
. Настройте определение single
по вкусу.
Однако, как отметили несколько других, это не является поточно-ориентированным, если только вы не инициализируете свой singleton только в init ()
. Лучшим подходом было бы использовать sync.Once
, чтобы сделать за вас тяжелую работу:
package singleton
import "sync"
type single struct {
O interface{};
}
var instantiated *single
var once sync.Once
func New() *single {
once.Do(func() {
instantiated = &single{}
})
return instantiated
}
См. Также hasan j ' Предложение просто думать о пакете как о синглтоне. И, наконец, примите во внимание то, что предлагают другие: синглтоны часто являются индикатором проблемной реализации.
Перед тем, как пытаться найти способ согнуться. Выполните свою волю, вы можете прочитать некоторые статьи:
Таким образом, со временем люди обнаружили, что синглтоны менее оптимальны, и имхо особенно , если вы пытаетесь выполнить какую-либо разработку через тестирование : на многих уровнях они почти так же плохи, как и глобальные переменные.
[отказ от ответственности: я знаю, что это не строгий ответ на ваш вопрос, но он действительно актуален]
Просто разместите свои переменные и функции на уровне пакета.
Также см. Аналогичный вопрос: Как сделать синглтон в Python
Вы можете выполнить инициализацию с помощью пакета once :
Это гарантирует, что ваши методы инициализации будут вызваны только один раз.
Просто имейте один статический, конечный, постоянный, глобальный, для всего приложения экземпляр объекта, который вы хотите.
Однако это противоречит парадигме объектно-ориентированного программирования. Его использование должно быть ограничено примитивами и неизменяемыми объектами, а не изменяемыми объектами.