我是Go编程语言的新手,每个教程都是从将GOPATH设置为当前项目文件夹开始的.

我是不是遗漏了什么?当程序员cd到他的新GO项目文件夹时,真的应该手动设置GOPATH吗?我已经读了几个关于GOPATH的常见问题解答条目,但仍然不能理解它.

那么为什么GOROOT会存在呢?它的目的是什么?

有没有自动检测当前目录是否是围棋项目的根文件夹(例如通过某个隐藏文件)并自动将GOPATH更改为该目录的工具?

谢谢,有什么非常有用的建议吗?

PS.例如,我开发了完全分离的围棋项目A、B和C,它们是否应该居住在单一的"工作空间"环境中?我想没有,但是我应该怎么处理Gopath和GOROOT呢?

推荐答案

GOPATH的目标是将所有软件包集中到一个公共工作区.它本身并不是一个新概念(例如,想想Java类路径),但是Go的使用非常简单,因为它不支持包版本控制.

Go程序员不应该在进入新项目文件夹时手动设置GOPATH.每个项目文件夹都应该是一个单独的包,并且与其他包一起驻留在GOPATH中,所以GOPATH应该只设置一次.教程从设置GOPATH开始,以便将教程工作区与任何其他内容隔离(或者简单地假设用户尚未设置GOPATH).

GOROOT设置为向Go程序员提供标准软件包,您不需要对其进行任何操作.简而言之,GOROOT有一条规则:永远不要碰它.不要在其中安装任何东西,不要修改标准软件包等.

我不知道有什么工具可以检测当前目录中的Go项目,但创建起来应该不太复杂.

如何处理不同的项目由您决定.方法是将每个项目作为一个包放在$GOPATH/src目录中,然后从那里开始执行所有操作.因为我不太喜欢,所以我把我的GOPATH定为$HOME/.go.然后,我将每个项目放在其他地方的专用目录中(我计算机中的任何位置),并将项目目录符号链接到我的$GOPATH/src目录中.然后,我可以使用每个Go工具链命令(例如go build myproject),将该项目用作另一个项目的包,等等.

Go相关问答推荐

Go Fiber和HTMX—HX—Trigger header被更改为HX—Trigger,这不是HTMX监听的内容

Zitadel示例Go Webapp加密密钥

为什么我不能使用Docker从本地访问我的Gin应用程序?

GORM Find方法中缺少字段

Go Regexp:匹配完整的单词或子字符串,或者根本不匹配

当我有外键时,如何使用 GORM 创建数据库的新条目

是否需要手动调用rand.Seed?

在golang中以JSON格式获取xwwwformurlencoded请求的嵌套键值对

如何为ANTLR4目标Go调试监听器

如何在 Golang 中打印 2 列表?

GoLang:net.LookupHost 返回重复的 ips

Golang crypto/rand 线程安全吗?

Golang 中具体类型的错误片段

在 Gorm 的 AfterFind() 钩子中获取智能 Select struct 的值

有没有办法将 yaml node 添加到 golang 中现有的 yaml 文档中?

try 运行 docker-compose up -d 时出现错误

实现接口的指针的泛型类型是什么?

GOENV 只能使用 OS 环境设置

如何从 docker-compose 命令运行 2 个不同的命令:

带有 *s3.S3 对象的 Golang 单元测试