• 理解Go语言中的GOPATH


    引言

    本文将引导您了解什么是GOPATH,它是如何工作的,以及如何设置它。这是设置Go开发环境的关键步骤,也是理解Go如何查找、安装和构建源文件的关键步骤。在本文中,我们将使用GOPATH来讨论我们将要讨论的文件夹结构的概念。我们将使用$GOPATH来引用Go用于查找文件夹结构的环境变量。

    Go工作空间是Go管理我们的源文件、编译后的二进制文件和缓存对象的方式,用于以后更快的编译。虽然可以有多个空间,但通常也建议只有一个Go工作区。GOPATH充当工作区的根文件夹。

    设置$GOPATH环境变量

    $GOPATH环境变量列出了Go可以查找的工作空间。

    默认情况下,Go假设我们的GOPATH位置是$HOME/go,其中$HOME是我们计算机上用户帐户的根目录。我们可以通过设置$GOPATH环境变量来改变这一点。

    有关设置$GOPATH变量的更多信息,请参阅Go文档

    此外,本[系列]将介绍如何安装Go和设置Go开发环境。

    $GOPATH不是$GOROOT

    $GOROOT是Go代码、编译器和工具所在的地方——它不是我们的源代码。$GOROOT通常类似于/usr/local/go。我们的$GOPATH通常类似于$HOME/go

    虽然我们不再需要专门设置$GOROOT变量,但它仍然在旧的材料中被引用。

    现在,让我们讨论Go工作空间的结构。

    Go工作空间剖析

    在Go工作空间或GOPATH中,有三个目录:binpkgsrc。这些目录中的每一个对Go工具链都有特殊的含义。

    .
    ├── bin
    ├── pkg
    └── src
      └── github.com/foo/bar
        └── bar.go
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    让我们来看看这些目录。

    $GOPATH/bin目录是Go存放Go install编译后的二进制文件的地方。我们的操作系统使用$PATH环境变量来查找可以在没有完整路径的情况下执行的二进制应用程序。建议将此目录添加到我们的全局$PATH变量中。

    例如,如果我们没有将$GOPATH/bin添加到$PATH中来执行程序,我们将需要运行:

    $GOPATH/bin/myapp
    
    • 1

    When $GOPATH/bin is added to $PATH we can make the same call like such:

    myapp
    
    • 1

    $GOPATH/pkg目录是Go存储预编译目标文件的地方,以加速程序的后续编译。通常,大多数开发人员不需要访问这个目录。如果您遇到编译问题,您可以安全地删除此目录,然后Go将重新构建它。

    src目录是我们所有的.go文件或源代码必须放置的地方。不应该将其与Go工具使用的源代码混淆,后者位于$GOROOT。当我们编写Go应用程序、包和库时,我们将把这些文件放在$GOPATH/src/path/to/code下。

    什么是包?

    Go代码组织在包中。包表示磁盘上单个目录中的所有文件。一个目录只能包含同一包中的某些文件。包和所有用户编写的Go源文件都存储在$GOPATH/src目录下。我们可以通过导入不同的包来理解包解析。

    如果我们的代码位于$GOPATH/src/blue/red,那么它的包名应该是red

    red包的import语句如下:

    import "blue/red"
    
    • 1

    位于GitHub和BitBucket等源代码库中的包,在它们的导入路径中都有仓库的完整位置。

    例如,我们将使用以下导入路径在https://github.com/gobuffalo/buffalo导入源代码:

    import "github.com/gobuffalo/buffalo"
    
    • 1
    $GOPATH/src/github.com/gobuffalo/buffalo
    
    • 1

    总结

    在本文中,我们讨论了GOPATH作为Go期望我们的源代码所在的一组文件夹,以及这些文件夹是什么以及它们包含什么。我们讨论了如何通过设置$GOPATH环境变量,将该位置从默认的$HOME/go更改为用户的选择。最后,我们讨论了Go如何在该文件夹结构中搜索包。

    Go 1.11中引入了Go Modules,旨在替换Go工作区和GOPATH。虽然建议开始使用模块,但有些环境,例如公司环境,可能还没有准备好使用模块。

    GOPATH是设置Go的一个比较棘手的方面,但一旦设置好了,我们通常可以忘记它。

  • 相关阅读:
    FastTunnel在Ubuntu上以服务方式部署并开机自启动(.NET Core)
    进程、线程、协程相关知识积累
    经典匹配算法: KMP、Sunday与ShiftAnd
    超详细!linux系统nlg-eval安装指南
    力扣练习——9 从链表中删去总和值为零的连续节点
    Python中的单元测试框架:使用unittest进行有效测试
    RVC:OAK相机的核心
    4、MFC:菜单栏、工具栏与状态栏
    【安全】正则回溯绕过练习简单案例
    spark:热门品类中每个品类活跃的SessionID统计TOP10(案例)
  • 原文地址:https://blog.csdn.net/QIU176161650/article/details/133376465