Golang中多次导入同一个包是否可行?
Golang中多次导入同一个包是否可行? 多次导入同一个文件夹是否可行?我这样做是因为我的路由文件都在那个文件夹里,我通过添加标识符来区分是哪个路由,然后调用相应的函数。
在我的 routes 文件夹中有:
routes_
|_ route_1.go
|_ route_2.go
|_ route_3.go
导入示例:
import(
Route1 "./routes"
Route2 "./routes"
Route3 "./routes"
)
func main(){
Route1.get()
Route2.post()
Route3.put()
}
更多关于Golang中多次导入同一个包是否可行?的实战教程也可以访问 https://www.itying.com/category-94-b0.html
5 回复
更多关于Golang中多次导入同一个包是否可行?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
同一文件夹中的所有文件都属于同一个包,因此无论如何这三个导入都是相同的,所以没有必要进行三次导入。
同一个Go包不能位于不同的文件夹中。
一个文件夹内的所有文件都属于同一个包,不同的文件夹是不同的包。
那么从不同的文件夹导入呢?
我正在使用 wasm,并且在 Svelte 中,希望从可能位于导入 Go/wasm 的根目录下的不同子文件夹中的组件访问同一个 Go 包。
我甚至不确定这是否是一个 Go 问题!
在Go语言中,多次导入同一个包是不可行的。你的代码示例会导致编译错误,因为Go不允许为同一个包路径重复定义不同的别名。
问题分析
你的代码会出现以下错误:
./main.go:5:2: Route1 "./routes" already imported
正确做法
方案1:使用包内不同的导出函数
在routes包内定义不同的函数,然后统一导入:
// routes/route_1.go
package routes
func Get() {
// 实现GET路由逻辑
}
// routes/route_2.go
package routes
func Post() {
// 实现POST路由逻辑
}
// routes/route_3.go
package routes
func Put() {
// 实现PUT路由逻辑
}
主文件中导入一次:
import "./routes"
func main() {
routes.Get()
routes.Post()
routes.Put()
}
方案2:使用子包结构
如果确实需要分离,可以创建子包:
routes/
├── route1/
│ └── route.go
├── route2/
│ └── route.go
├── route3/
│ └── route.go
import (
route1 "./routes/route1"
route2 "./routes/route2"
route3 "./routes/route3"
)
func main() {
route1.Get()
route2.Post()
route3.Put()
}
方案3:使用结构体方法
在同一个包内使用结构体区分:
// routes/routes.go
package routes
type Route1 struct{}
type Route2 struct{}
type Route3 struct{}
func (r Route1) Get() {}
func (r Route2) Post() {}
func (r Route3) Put() {}
import "./routes"
func main() {
var r1 routes.Route1
var r2 routes.Route2
var r3 routes.Route3
r1.Get()
r2.Post()
r3.Put()
}
关键点
Go语言的设计哲学是每个包路径只能导入一次,但可以通过包内的命名空间(函数、结构体、接口等)来组织代码逻辑。

