Go 项目之间的类型冲突

Go 项目之间的类型冲突,go,Go,我想将特定子域使用的代码移动到它自己的项目中,该项目将由当前驻留的主代码库导入。在添加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.Ha

我想将特定子域使用的代码移动到它自己的项目中,该项目将由当前驻留的主代码库导入。在添加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:无法将r(类型*“primary\u site/vendor/github.com/gorilla/mux.Router)用作类型*“subdomain\u site/vendor/github.com/gorilla/mux.Router”作为路由器的参数。LoadRoutes

看起来我有两个Gorilla Mux的实例,来自两个不同的项目,它们相互冲突。我只将包从子域站点导入到主站点,而不是相反。只要我在一个项目中使用这段代码,它就可以完美地工作,但当我尝试分离项目时,它就会崩溃



既然我传入了mux.NewRouter()的实例,为什么会有冲突?

您的项目中有两个供应商目录。为了在包之间共享供应商类型,您需要在顶层将它们展平到单个供应商目录中。删除
子域\u站点/vendor
,只使用主打包中的vendor目录

项目中有两个供应商目录。为了在包之间共享供应商类型,您需要在顶层将它们展平到单个供应商目录中。删除
子域\u站点/vendor
,只使用主打包中的vendor目录

您的项目中应该只有一个顶级供应商目录,因此这是两组独立的代码-主站点是一个项目,子域站点是一个包。如果它们都导入到同一个程序中,就构建工具而言,它们不是分开的。只有子域项目被导入到主网站项目中。两个主文件夹位于同一级别的my gopath的src/下。因此,您的项目中应该只有一个顶级供应商目录。这是两组独立的代码-主站点是一个项目,子域站点是一个包。如果它们都导入到同一程序中,就构建工具而言,它们不是分开的。只有子域项目被导入到主网站项目中。两个主文件夹位于同一级别的MyGoPath的src/下。这是两个独立的项目。Src/proj1和Src/proj2。他们不是同一个项目。@dingalingchickenwiing你说你将子域站点导入主站点,这使他们成为同一程序的一部分。随便你怎么说,但是同一个项目中的多个供应商目录会导致类似这样的类型不匹配错误。我可能使用了错误的术语,因为我是新手,但我试图解释这两个项目在$GOPATH/src下是相同的文件夹级别。例如,$GOPATH/src/proj1和$GOPATH/src/proj2。如果你说的是真的,那么我构建的每个项目实际上都是同一个项目的一部分,而且任何项目之间都不会有任何区别。@dingalingchickenwiing,那么你是说你打算编写的所有代码都将导入到同一个主程序中?如果是这样,那么是的,你将只有一个项目。也许可以这样想,不要把供应商目录放在“库”中——只在创建最终二进制文件的包中放一个。这是两个独立的项目。Src/proj1和Src/proj2。他们不是同一个项目。@dingalingchickenwiing你说你将子域站点导入主站点,这使他们成为同一程序的一部分。随便你怎么说,但是同一个项目中的多个供应商目录会导致类似这样的类型不匹配错误。我可能使用了错误的术语,因为我是新手,但我试图解释这两个项目在$GOPATH/src下是相同的文件夹级别。例如,$GOPATH/src/proj1和$GOPATH/src/proj2。如果你说的是真的,那么我构建的每个项目实际上都是同一个项目的一部分,而且任何项目之间都不会有任何区别。@dingalingchickenwiing,那么你是说你打算编写的所有代码都将导入到同一个主程序中?如果是这样,那么是的,你将只有一个项目。也许可以这样想,不要把供应商目录放在“库”中——只在创建最终二进制文件的包中放一个。