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 回复

导入路径应当使用完整路径。

例如:“github.com/gorilla/mux

不应使用相对路径,因为它们的效果不佳。

更多关于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语言的设计哲学是每个包路径只能导入一次,但可以通过包内的命名空间(函数、结构体、接口等)来组织代码逻辑。

回到顶部