2016-12-10 4 views
-1

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

// imports and non-relevant routes removed for simplicity 
r := mux.NewRouter() 
// Primary site routes here... 
s := r.Host("subdomain-regex-here").Subrouter() 
s.HandleFunc("/", people.Index) 
http.ListenAndServe("localhost:8080", r) 

Но когда я двигаю субдомен свой собственный проект и импортировать его, затем вызвать LoadRoutes() функция, которая проходит в объекте mux.Router от основного сайта, я получаю ошибка. Вот код:

// Primary Project 
r := mux.NewRouter() 
// Primary site routes here... 

// function located in the subdomain go project, which is imported 
func LoadRoutes(host string, r *m.Router) { 

    s := r.Host(host).Subrouter() 
    s.HandleFunc("/", people.Index) 
    s.HandleFunc("/people", people.Index) 
    s.HandleFunc("/person/new", people.New) 
} 

# командной строки-аргументы ./main.go:25: не может использовать г (типа * "primary_site/продавец/github.com/гориллы/Мультиплексор" .Router), как type * "subdomain_site/vendor/github.com/gorilla/mux" .Router в аргументе для routers.LoadRoutes

Похоже, у меня есть два экземпляра мух Гориллы из двух отдельных проектов, которые противоречат друг другу. Я только импортирую пакеты с сайта субдомена на основной сайт, а не наоборот. Этот точный код работает отлично, если у меня есть это в одном проекте, но когда я пытаюсь отделить проекты, он ломается.

Поскольку я передаю экземпляр mux.NewRouter(), почему у меня конфликт?

+1

По этой причине в вашем проекте должен быть только один каталог поставщиков верхнего уровня. – JimB

+0

Это две отдельные группы кода - основной сайт - это проект, сайт субдомена - это пакет. – dingalingchickenwiing

+0

Если они оба импортируются в одну и ту же программу, они не являются отдельными в отношении инструментов сборки. – JimB

ответ

2

У вас есть 2 каталога поставщиков в вашем проекте. Вам необходимо сгладить их в один каталог поставщиков на верхнем уровне, чтобы разделить типы поставщиков между пакетами. Удалите subdomain_site/vendor и используйте только каталог поставщиков в своем основном пакете.

+0

Это два отдельных проекта. Src/proj1 и src/proj2. Это НЕ тот же проект. – dingalingchickenwiing

+0

@dingalingchickenwiing Вы сказали, что импортируете сайт субдомена на основной сайт, что делает их частью одной и той же программы. Назовите это, как вам нравится, но несколько каталогов поставщиков в том же проекте вызовут ошибки несоответствия типа. – JimB

+0

Возможно, я использовал неправильную терминологию, поскольку я новичок, но я попытался объяснить, что оба проекта были одного и того же уровня папок в $ GOPATH/src. например $ GOPATH/src/proj1 и $ GOPATH/src/proj2. Если то, что вы сказали, верно, то каждый проект, который я когда-либо создавал, фактически будет частью одного и того же проекта, и никогда не будет различия между любыми проектами. – dingalingchickenwiing