2017-01-29 15 views
0

У меня есть пакеты, похожие по функциональности, так как они являются обработчиками веб-запросов.Могу ли я ограничить пакеты набором функций в Голанге?

У меня есть такие функции, как это на домашней странице в каждой упаковке:

package home_page_handler 


func GetUrl() string { 
    return "/" 
} 

func GetPageName() string { 
    return "HomePage" 
} 

Чтобы структурировать код лучше, мне интересно, если я могу добавить ограничение, может быть через интерфейсы, чтобы каждый пакет некоторые «класс "содержат эти функции?

Таким образом, если я добавлю еще один обработчик, он будет вызывать ошибку при компиляции, если функция отсутствует или имеет неправильную подпись.

+0

Если функция отсутствует, и вы пытаетесь ее вызвать, компилятор поднимет проблему. Если функция отсутствует, и никто ее не называет, зачем беспокоиться? – dolmen

ответ

1

Вы можете «зарегистрировать» каждый пакет с вызовом

package server 

type PageHandler { 
    url, name func() string 
} 

var Handlers = []PageHandler 

func RegisterHandler(url func()string, name func()string) { 
    Handlers = append(Handlers, PageHandler{url, name}) 
} 

... 

package home_page 

... 

func init() { 
    server.RegisterHandler(GetUrl, GetPageName) 
} 

Пакет не будет компилировать, если GetUrl и GetPageName не предусмотрены, а функция подписи является правильным.

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

  • Нет связанных вопросов^_^