Golang中自定义包的添加位置探讨

Golang中自定义包的添加位置探讨 你好,我需要将自定义包放在 GOPATH 中还是项目内部?例如,我正在创建一个 API,那么路由文件应该放在项目文件夹里还是 GOPATH 中?

5 回复

哦,我明白了,非常感谢。

更多关于Golang中自定义包的添加位置探讨的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


这些“路由”不是您项目的一部分吗?

无论如何,假设使用 Go 模块的现代方式,除非处理遗留项目,否则 GOPATH 中不应包含源代码。

是的,路由是项目的一部分,所以你的意思是 GOPATH 仅适用于通过 go get 安装的包吗?

我的意思是,如果你当前没有在GOPATH中开发你的项目,那么你完全不需要关心GOPATH。

如果你的项目根目录下有一个go.mod文件,那么GOPATH对你来说就无关紧要了。

如果你的项目根目录下没有这样的文件,你的项目已经存在于GOPATH中了,并且你的路由/子包无论如何都应该位于你的项目根目录之下,因为你希望它们位于同一个代码仓库中,不是吗?

不过,如果情况确实如此,并且你正在以传统方式在GOPATH中开发,那么你应该将你的项目转换为新风格的Go模块,并将其移出GOPATH

在Go语言中,自定义包的存放位置取决于项目的依赖管理方式。从Go 1.11版本开始,推荐使用Go Modules进行依赖管理,而不是传统的GOPATH。以下是具体说明和示例:

1. 使用Go Modules(推荐)

当项目使用Go Modules时,自定义包应放在项目内部,通常位于项目根目录下的子目录中。例如,对于API项目,路由文件可以放在项目内部的routes目录中。

项目结构示例:

my-api/
├── go.mod
├── main.go
└── routes/
    └── user.go

代码示例:

  • go.mod文件:
module my-api

go 1.20
  • main.go文件:
package main

import (
    "my-api/routes"
)

func main() {
    routes.HandleUser()
}
  • routes/user.go文件:
package routes

import "fmt"

func HandleUser() {
    fmt.Println("Handling user route")
}

2. 使用GOPATH(传统方式)

如果项目仍在使用GOPATH,自定义包需要放在$GOPATH/src目录下。但这种方式已不推荐,特别是对于新项目。

项目结构示例:

$GOPATH/src/
└── my-api/
    ├── main.go
    └── routes/
        └── user.go

代码示例:

  • main.go文件:
package main

import (
    "my-api/routes"
)

func main() {
    routes.HandleUser()
}
  • routes/user.go文件:
package routes

import "fmt"

func HandleUser() {
    fmt.Println("Handling user route")
}

总结

对于新项目,强烈建议使用Go Modules,并将自定义包放在项目内部。这样可以避免依赖GOPATH,使项目结构更清晰,便于版本控制和团队协作。

回到顶部