在项目之间键入冲突

时间:2016-12-10 00:52:18

标签: go

我想将特定子域使用的代码移动到自己的项目中,该项目将由当前所在的主代码库导入。我能够将子域中的代码成功导入到主项目中,直到我添加大猩猩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)
}

#command-line-arguments ./main.go:25:不能使用r(类型*" primary_site / vendor / github.com / gorilla / mux" .Router)作为类型*" subdomain_site / vendor / github.com / gorilla / mux" .Router in routers.LoadRoutes

看起来我有两个来自两个独立项目的Gorilla Mux实例,它们相互冲突。我只将包从子域站点导入到主站点,而不是相反。只要我在一个项目中使用它,这个确切的代码就可以完美运行,但是当我尝试将项目分开时,它会中断。

由于我传入了mux.NewRouter()的实例,为什么我会发生冲突呢?

1 个答案:

答案 0 :(得分:2)

您的项目中有2个供应商目录。您需要将它们展平到顶层的单个供应商目录中,以便在包之间共享销售类型。删除subdomain_site/vendor并仅使用主pacakage中的供应商目录。