Go 一个项目中有多个包?

Go 一个项目中有多个包?,go,project,Go,Project,我想把我的go项目分成多个包,这样每个包中的某些方法和变量都会受到“保护”。我想把所有东西都放在同一个项目文件夹中,这样任何下载我的代码的人都会发现它是完全独立的 我设想这个项目看起来像 root ┗ main package | ┗ all corresponding go files ┗ another package ┗ all corresponding go files 然后将第二个包导入我的主包 似乎相对的导入路径被认为是不好的,而基于gopath的导入似乎不是

我想把我的go项目分成多个包,这样每个包中的某些方法和变量都会受到“保护”。我想把所有东西都放在同一个项目文件夹中,这样任何下载我的代码的人都会发现它是完全独立的

我设想这个项目看起来像

root
┗  main package
|   ┗  all corresponding go files
┗  another package
    ┗  all corresponding go files
然后将第二个包导入我的主包

似乎相对的导入路径被认为是不好的,而基于gopath的导入似乎不是最好的方法,因为我并没有试图创建可重用的库,只是为了更好地组织我的项目

编辑和添加:
我读过“如何编写go代码”,但我不知道如何解决当前的问题。我意识到信息可能就在那里,但我只是有点糊涂。为了更好地解释我的问题,我创建了一个使用当前修复的示例项目

我有两个包裹“你好”和“主要”。 在“main”包中有一个字符串“text”和一个函数“Hello()”。 我把它放在一个单独的包中,因为我不想在main.go文件中访问/定义字符串“text”。 目前,我正在使用相对导入路径将“hello”导入“main”。 这是我认为需要改变的


因为它们是同一个包的一部分,我希望这两个包的源代码保持尽可能接近(这就是为什么我没有通过gopath导入,但也许这就是我应该做的)。

我的解决方案最终是使用Cerise在评论中提到的gopath(谢谢):


使用GOPATH。遵循如何编写Go代码中的stringutil示例,其中stringutil对应于hello,hello对应于main。您也可以在play.golang.org/p/W6Hgsqyuzug中使用go.mod


似乎这是正确的做事方式。

请参阅。此外,Go中不存在受保护的概念。所有内容要么通过包导出,要么不通过包导出。即使您将项目包拆分为多个子包,用户仍然可以导入给定的子包并使用它。我已经看过“如何编写go代码”,但我不太明白我应该如何解决我的问题,抱歉。我已经更新了我的帖子,让它更清晰一些@CeriseLimónUse GOPATH。按照《如何编写Go代码》中的stringutil示例,其中stringutil对应于您的hellohello对应于您的main。您也可以像中一样使用go.mod。如果您不制作可重用库,为什么您会担心下载您的代码的人?