Golang中如何更好地理解包/模块和文件系统?
Golang中如何更好地理解包/模块和文件系统? 我很难理解 Go 的包/模块和文件系统结构。
GOROOT=“C:\Program Files\Go” GOPATH=“C:\Users\name\Documents/go/workspace”
我之所以感到困惑,还因为我不知道应该在哪里进行我的工作,以及为什么我无法导入 gorilla/mux。另外,我不太确定这一点,但 gorilla/mux 是否应该出现在我的 src 文件夹中?我尝试获取它,但它没有出现在那里,而且我知道我处于正确的工作区,因为我删除了所有文件夹并重新安装了所有内容。
could not import github.com/gorilla/mux (cannot find package "github.com/gorilla/mux" in any of
C:\Program Files\Go\src\github.com\gorilla\mux (from $GOROOT)
C\src\github.com\gorilla\mux (from $GOPATH)

理想情况下,我正在尝试构建一个具有 Go 后端的网站。我不确定我的设置是否正确,但我正在边学边做。
非常感谢您的帮助! 谢谢!
更多关于Golang中如何更好地理解包/模块和文件系统?的实战教程也可以访问 https://www.itying.com/category-94-b0.html
我认为在当前的Go语言环境中,如果你刚开始学习Go,最好使用Go Modules而不是GOPATH。
Go Modules 有几个好处:
- 你可以将代码库存储在独立于GOPATH工作区的位置。
- 更容易上手。
- GOPATH 将在未来的Go版本中被弃用。如今,Go Modules 是事实上的标准方法。
那么,这里有一个使用Go Modules创建项目的快速示例:
- 为项目创建一个新目录。你可以在挂载的任何位置创建它。
- 在终端中通过
go mod init命令初始化go.mod文件。 - 创建新的包、
main.go文件等。 - 在你的文件中导入
github.com/gorilla/mux。 - 在终端中运行
go mod tidy以添加模块要求和校验和。 - 运行你的应用程序,例如
go run main.go。
更多关于Golang中如何更好地理解包/模块和文件系统?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
在Go 1.11+中,模块系统已经取代了传统的GOPATH工作区模式。你的错误信息显示系统仍在GOPATH模式下查找包。以下是解决方案:
1. 初始化Go模块
在你的项目根目录运行:
go mod init your-project-name
这会创建go.mod文件,启用模块模式。
2. 导入gorilla/mux
在你的Go文件中正常导入:
package main
import (
"net/http"
"github.com/gorilla/mux"
)
func main() {
r := mux.NewRouter()
r.HandleFunc("/", HomeHandler)
http.ListenAndServe(":8080", r)
}
func HomeHandler(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Hello World"))
}
3. 自动下载依赖
运行以下命令会自动下载所有依赖:
go mod tidy
或者直接运行你的程序:
go run main.go
4. 项目结构示例
your-project/
├── go.mod # 模块定义文件
├── go.sum # 依赖校验文件
├── main.go # 主文件
└── internal/ # 内部包(可选)
└── handlers/ # 处理程序包
5. 环境变量设置
对于现代Go开发,你只需要:
- 设置
GOROOT(通常自动设置) - 不需要设置
GOPATH用于模块项目
6. 完整示例
创建main.go:
package main
import (
"fmt"
"log"
"net/http"
"github.com/gorilla/mux"
)
func main() {
router := mux.NewRouter()
router.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Welcome to Go website!")
})
router.HandleFunc("/api/users", getUsers).Methods("GET")
log.Println("Server starting on :8080")
log.Fatal(http.ListenAndServe(":8080", router))
}
func getUsers(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
w.Write([]byte(`{"users": ["Alice", "Bob", "Charlie"]}`))
}
运行:
go mod init website
go run main.go
模块系统会自动在$GOPATH/pkg/mod缓存依赖,不需要手动放在src目录下。

