golang中gopath的介绍

这篇文章主要介绍了golang中gopath工具,具有一定借鉴价值,需要的朋友可以参考下。如下资料是关于gopath的详细步骤内容。

前言

  • 在本章中,我们将介绍go语言的项目结构、项目管理以及依赖管理。在本文中,我们关注gopath

gopath是什么

  • 在go语言开发环境配置文章中,我们介绍了配置gopathgoroot环境变量的步骤,但是并没有对其进行深入解释。可以在终端输入 go env 或者go env gopath查看具体的配置

C:\Windows\system32> go env
set GO111MODULE=
set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\jackson\AppData\Local\go-build
set GOENV=C:\Users\jackson\AppData\Roaming\go\env
set GOEXE=.exe
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GONOPROXY=
set GONOSUMDB=
set GOOS=windows
set GOPATH=C:\Users\jackson\go
set GOPRIVATE=
set GOPROXY=https://proxy.golang.org,direct
set GOROOT=c:\go
...
  • 在go1.8之后,如果不指定gopath,则gopath是默认的。

    • 在mac,linux下为$HOME/go

    • windows 下为%USERPROFILE%\g

  • gopath 可以理解为go语言的工作空间,内部存储了src,bin,pkg 三个文件夹

go/
├── bin
├── pkg
└── src
  • $GOPATH/bin目录存储了通过go install 安装的二进制文件。操作系统使用PATH变量中

  • $GOPATH/pkg目录中,会存储预编译的obj文件(文件名根据操作系统的不同而不同,例如mac下为darwin_amd64),以加快程序的后续编译。大多数开发人员不需要访问此目录。后面还会介绍,pkg下的mod文件还会存储go module的依赖。

  • $GOPATH/src目录 存储我们项目的go代码。通常包含许多版本控制存储库(例如,由Git管理),每个存储库都包含了一个或多个package,每个package都在一个目录中包含一个或多个Go源文件。

  • 因此,整个路径看起来像是:

go/
├── bin
     └── main.exe
├── pkg
     ├── darwin_amd64
     └── mod
└── src
    ├── github.com
    │   ├── tylfin
    │   │   ├── dynatomic
    │   │   └── geospy
    │   └── uudashr
    │       └── gopkgs
    └── golang.org
        └── x
            └── tools
  • gopath具有多个作用,当我们想从github或其他地方获取go项目代码时,我们可以使用go get指令。 此时程序会默认的将代码存储到$GOPATH/src目录中。例如拉取go get github.com/dreamerjackson/theWayToGolang时,目录结构如下:

go/
├── bin
├── pkg
└── src
    └── github.com
           └── dreamerjackson
                     └── theWayToGolang
  • 当我们使用go get-u参数时,会将该项目以及项目所依赖的所有其他项目一并下载到$GOPATH/src目录中

  • gopath的另一个功能是明确package的导入位置。前文我们介绍过,go代码通过package进行组织,在helloworl程序中,我们导入了go语言内置的fmt package.当我们要导入第三方时应该怎么做呢?其实如果我们在项目中导入了一个第三方包,例如

import "blue/red"

实际引用的是$GOPATH/src/blue/red 文件中的代码。

同理,如果导入为

import "github.com/gobuffalo/buffalo"

实际引用的是$GOPATH/src/github.com/gobuffalo/buffalo 文件中的代码。

下面我们用一个例子来说明导入第三方包

  • 首先在$GOPATH/src中新建一个文件夹mymath,在文件夹中新建一个文件add.go

» mkdir mymath
» cd mymath
» touch add.go

add.go的内容如下,要注意导出的函数必须是首字母大写的,这是go语言的规则。

package mymath

func Add(a int, b int) int {
    return a + b
}

接着在$GOPATH/src中创建一个main.go文件,即可以完整的调用mymath包中的add函数。

package main

import (
    "fmt"
    "mymath"
)

func main() {
    result := mymath.Add(1, 2)
    fmt.Println("result:", result)
}
  • 通过go run main.go 即可运行输出1+2的结果3

gopath的优劣

  • 相比于其他语言繁琐的配置,go语言中的工作空间gopath配置相对简单,容易理解

  • gopath使得在文件系统组织整个代码更加简洁、结构化,但是限制在单一的工作空间中。

  • gopath并没有解决版本依赖的问题,而将其留给了其他工具去实现。正因为如此,gopath中的代码就是一个唯一的master分支,并且强制使用各个模块最新的代码。

总结

  • 本文介绍了gopath的含义、功能、优劣、以及如何通过GOPATH来组织项目,导入第三方库。

  • 在go1.13之后,go官方已经开始全面拥抱go module.

  • 关于gopath就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果喜欢这篇文章,不如把它分享出去让更多的人看到。

原创文章,作者:BYOGB,如若转载,请注明出处:https://www.beidanyezhu.com/a/26248.html

(0)
BYOGB的头像BYOGB
上一篇 2025-01-01 17:24:59
下一篇 2025-01-01 17:25:01

相关推荐

  • golang中导入包的方法

    这篇文章运用简单易懂的例子给大家介绍golang中导入包的方法,代码非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。 import Go 使用包(package)作为…

  • 如何升级golang的版本

    升级Golang 主要步骤: 1、卸载旧版本 2、下载新版本 3、安装新版本 4、配置环境变量 详细步骤: 1、卸载旧版本 首先,执行 go env,列出关于go的环境信息,查看 …

  • Golang实现REST API架构

    有一种说法,golang 编写的 API 不能像其他语言那样简单和通用。但实际上,我遇到很多 REST API 的代码,非常多的抽象,使得代码库变得混乱和复杂,最终伤害了可读性和可…

    2025-01-03
  • golang有哪些数据类型

    这期内容当中小编将会给大家带来有关golang有哪些数据类型,以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。 在 Go 编程语言中,数据类型用于声明函数和变量。…

  • golang的字符串操作

    Go语言简介 Go(又称Golang)是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。 罗伯特·格瑞史莫(Robert Griesemer),罗勃…

  • golang是什么

    golang是什么?针对这个问题,这篇文章给出了相对应的分析和解答,希望能帮助更多想解决这个问题的朋友找到更加简单易行的办法。 Go(又称Golang)是Google开发的一种静态…

  • 如何用golang实现约瑟夫环

    约瑟夫环概念: 约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从…

    2025-01-02
  • golang中的链接link是什么

    链接(link) 我们编写的程序可能会使用其他程序或程序库( library ) 正如我们在helloworld程序中使用的fmt package 我们编写的程序必须与这些程序或程…

  • golang的内存分配

    本篇文章主要介绍golang的内存分配,文中关于内存分配的算法以及mcache的介绍均以实例展示,有需要的朋友可以参考一下。 程序内存大致可以分为5个段text、data、bss、…

    2025-01-01
  • 怎么编译并运行golang程序

    怎么编译并运行golang程序?刚入门的朋友还不知道怎么编译运行golang程序,通过这篇文章的总结,希望你能学会书写你的第一个go语言程序。 首先我们可以在任意位置新建一个文件,…

    2025-01-01

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

分享本页
返回顶部