从包管理 go modules 入手学习 Go 语言

本文是 Go Modules 极简入门教程。先介绍 Go 环境,包括 go env 查看环境变量、GO111MODULE 的三个值及设置方法。接着阐述 go modules 及依赖加载,如依赖加载顺序、安装依赖和框架/脚手架的方法,还给出了 Go 语言开发的 web 框架 Orange 的安装示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

极简入门:


一、Go 环境

1.1 go env
  • 使用命令 go env 可以查看 go 的环境变量,重点的是 GOPATHGOBIN 这两个

    GOPATH 将在未来的新版中逐渐透明,我们不需要再过多关注它,Go 将会默认使用 go modules

  • 更改环境变量的值可以直接使用命令:set GOPATH=<路径>set GOBIN=GOPATH/bin,也可以直接在系统环境变量中编辑。
  • GOPATH 目录下迟早会有 3 个子文件夹:src、bin、pkg
    • src:众项目的源代码
    • bin:存放 go getgo install 安装第三方包的可执行程序(*.exe)

      所以 GOBIN 需要添加到系统环境变量中

    • pkg:存放 go mod tidygo get 等命令下载的第三方包
1.2 GO111MODULE

GO111MODULE 有三个值:off、on、auto:

  • 可以使用命令:set GO111MODULE=* 来设置是否启用 go modules 包管理模式
  • GO111MODULE=off,go 命令行将不会支持 go modules 功能,将会去 vendor 目录或者 GOPATH 寻找依赖包。
  • GO111MODULE=on,go 命令行会启用 go modules,而一点也不会去 GOPATH/src 目录下查找。
  • GO111MODULE=auto,go 命令行将会根据当前目录来决定是否启用 go module 功能。

二、go modules 及依赖加载介绍

go modules 是 golang 的一个依赖管理器,go modules 能自动识别并下载依赖,对于依赖管理和项目迁移都有较好的支持。它在 1.11 版本提出,在 1.13 版本后默认开启。

因此如果当前的 golang 环境小于 1.13 需要通过设置环境变量 GO111MODULE=autoon 开启,大于 Go 1.13 的版本中 GO111MODULE 默认为 on

2.1 Go 的依赖加载顺序
  • 在非 go modules 环境下,依赖加载顺序是: 项目根目录下的vendor文件夹 👉 GOPATH/src 👉 GOROOT/src 这样的顺序查找。

  • go modules 环境下,依赖都放在 GOPATH/pkg/mod 目录中。

    go mod vendor // 可以在依赖拉取完成后运行该命令,将依赖包拷贝到项目目录中去

2.2 go modules 安装依赖
  • 如果 go 版本小于 1.13

    • window 下在 cmd 中执行:
      set GO111MODULE=on // 启用 go modules
      set GOPROXY=https://goproxy.cn // 使用国内代理能快速拉取依赖
    • linux 下执行:
      export GO111MODULE=on
      export GOPROXY=https://goproxy.cn
  • 如果 go 版本大于 1.13

    • go env -w GOPROXY=https://goproxy.cn,direct // 只需设置国内代理

      GO111MODULE 默认开启

  • 然后在项目目录下面执行命令

    >  go mod init // 初始化 go mod 包管理,项目目录下生成 go.mod 文件
    >  go mod tidy // 根据 go.mod 文件拉取依赖包,默认放在 `GOPATH/pkg/mod` 目录中
    >  go mod vendor // 项目目录下生成 `vendor` 文件夹,并将依赖包拷贝进去
    >  go run main.go  // 运行 go 程序
    
  • go.mod 如何编辑和使用

    • 通过在代码中修改 import 语句,来修改 go.mod
      • go get + url 可用于添加新模块,相应的 url 和版本会写到 go.mod 中,go get 下载的包存放在 GOPATH/pkg/mod 目录中,包的可执行程序(*.exe)放在 GOPATH/bin 目录中(即 GOBIN

        go get = git clone + go install

      • go mod tidy 下载 / 删除变动的模块;
    • 将未用 import 导入的模块写入 go.mod
      • go get <pkg url>[@<version>]

        例如: go get gitee.com/zhucheer/orange

      • 手动编辑;
2.3 go modules 安装框架 / 脚手架

以 Go 语言开发的 web 框架 Orange 为例

go.mod 文件内容如下:

module go_mod_test

go 1.15

require (
    gitee.com/zhucheer/orange v0.2.33
    ...
)
  • 安装脚手架
    下载项目 :go get gitee.com/zhucheer/orange

  • 用 orange 命令创建一个新项目

    > orange create project_name // 命令执行后将会在 `GOPATH/src` 目录下生成项目
    
    • 若出现错误:orange create project error: mkdir GOPATH\src\go_mod_test: The system cannot find the path specified.,是因为 GOPATH 下没有 src 目录,可以手动在 GOPATH 下新建 src 目录。
    • 如果出现 orange 命令报错不存在,则需要将 GOBINGOPATH/bin) 添加到环境变量。
  • 启动项目

    • 只需确保已经启用 go modules 包管理模式

    • 进入项目目录后依次执行下面的命令

      >  go mod init
      >  go mod tidy
      >  go mod vendor
      >  go run main.go
      
  • 打包项目

    >  配置好 `GOBIN` 环境变量,进入项目目录,然后执行如下命令:
    >  window: `orange.exe build`
    >  linux:`orange build`
    >  打包命令默认会将程序打包到 build 目录下,打包好的程序可以直接运行,不依赖 golang 环境。
    

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Skr.B

WUHOOO~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值