Go 转到本地包和模块

Go 转到本地包和模块,go,import,package,microservices,Go,Import,Package,Microservices,我刚刚开始学习GO开发,阅读了很多文章和文档,但是还没有找到具体的答案 有一些问题 如何使用本地软件包?使用/。/不起作用,我可以将所有源代码放在vendror/src目录下,但这会使我的项目结构看起来与我想要的不一样 我是否应该始终将包上载到远程存储库中的某个位置?有没有可能把它们放在本地。事件如果我开发一个微服务,微服务本身就是一个完整的应用程序。我不希望我的微服务只有一个文件。我想在几个文件之间分割逻辑 将所有文件保存在一个文件中可以吗 我知道这个问题已经被问过好几次了,但是我还没有找到任

我刚刚开始学习GO开发,阅读了很多文章和文档,但是还没有找到具体的答案

有一些问题

  • 如何使用本地软件包?使用
    /。/
    不起作用,我可以将所有源代码放在
    vendror/src
    目录下,但这会使我的项目结构看起来与我想要的不一样
  • 我是否应该始终将包上载到远程存储库中的某个位置?有没有可能把它们放在本地。事件如果我开发一个微服务,微服务本身就是一个完整的应用程序。我不希望我的微服务只有一个文件。我想在几个文件之间分割逻辑
  • 将所有文件保存在一个文件中可以吗 我知道这个问题已经被问过好几次了,但是我还没有找到任何完整的答案

    如果有任何帮助,我将不胜感激。谢谢

  • 导入路径必须在
    $GOPATH/libPath
    语法中有效

  • 为此,您可以尽可能多地共享您的服务源代码,只需使用多个主软件包来分离bin

  • 如果您指的是第二个文件的目录,那么没有最佳实践,只要它不涉及您的代码复杂性,您也可以这样做

  • 第一:阅读“如何编写Go代码”,并坚持下去,而且只坚持下去

  • go工具没有“本地包”。忘记本地、非本地、远程等等的区别吧。对于go工具,只有包,这些包有一个导入路径。此导入路径确定go工具在文件系统中查找代码的位置。如果您的导入路径是
    import“int.microsoft/secret/new/foo”
    ,那么您的程序包foo的代码必须位于您的计算机上的“$GOPATH/src/int.microsoft/secret/new/foo”下

    对于
    go-build
    和(go-install,go-test,…)导入路径没有任何意义:“int.microsoft/secret/new/foo”不是其他字符串,而是“example1/foo”或“github.com/someone/tool7/bar”。这些只是字符串,在这些路径中搜索包。这些包都不是“本地”包“包,它们都只是包

    因此,如果您将包“which”的代码放在$GOPATH/src/some/square/path/which下,您必须像导入“some/square/path/which”一样导入它

  • 如果您想与其他人共享您的代码,请保留远程备份,或者希望使用代码托管站点(如github)简化三台工作站的同步,您可以将代码上载到github。这与导入包的方式无关

    go工具中唯一的子命令import path除了作为路径之外还有其他意义,它用于
    go-get
    ,它了解一些代码托管站点,如github,并解释“github.com/someone/prjct”的导入路径,可以为您的用户克隆此git repo,方便地将其放在$GOPATH下的正确文件夹中

    所以:不,绝对没有必要上传每一段代码。(例如,我的机器上有很多东西都在$GOPATH/src/tmp下)

    将代码拆分为a)不同的包和b不同的文件与所有这些无关。只要你觉得方便和合乎逻辑就行

  • 嗯,没有,;很简单,因为不能在一个文件中保存多个文件。你是说“一个文件夹中有几个文件”吗?是的,很好。如果拆分合理,则拆分为文件和包。看看标准库或任何其他开源项目


  • 非常感谢您如此完整的回答和解释!是否可以使用新的go.mod文件引用PC(而不是git)上的本地模块?假设桌面上有两个不同目录的模块。如何从一个代码中使用另一个?使用go.mod文件,go如何知道该目录的位置?现在我需要将新代码从一个目录推送到Git,并在另一个项目联机时将其同步(
    go mod tidy
    go get-u…
    )。在go.mod文件中使用replace指令,如
    replace girhub.com/you/pr=>../../some/where/local
    可能重复的