go mod 构建新项目 step by step

本文介绍了Go语言的两种构建模式:GOPATH模式和Go Modules模式。Go Modules现已成为主流,它允许项目独立管理依赖,不再受限于单一的GOPATH。通过`go mod init`等命令,可以方便地初始化和管理项目依赖。文章还详细讲解了如何配置Go Modules,包括设置代理、创建新项目和使用相关命令,确保在墙内也能顺利下载依赖。

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

0、golang 安装

1、go两种构建模式

go语言发展至今因为包依赖的问题有两种的构建模式:经典的gopath mode和目前的go module标准mode。

1.1 gopath 【经典传统,逐渐淘汰】

1.1.1 gopath说明

GOPATH下一般会有三个文件夹src、pkg、bin。

  • src存放项目源码文件(.go结尾)
    • 对于src目录,存放源文件,Go中源文件以包(package)的形式组织。通常的,新建一个包就在src目录中新建一个文件夹
  • bin存放编译后的可执行文件(二进制或exe文件)
  • pkg存放编译后的包文件(.a结尾)
    • pkg中的文件是Go编译生成的,并非手动放进去的。(一般文件后缀.a)

注意:一般,bin和pkg目录可以不创建,go命令会自动创建(如 go install),只需要创建src目录即可。
在这里插入图片描述

1.1.2 gopath不足

缺点:

  • 这种方式是只有一个GOPATH然后在src文件下创建不同的项目,但是但是这样的话每个项目所需要的依赖也就都放在同一个地方,如下:
    在这里插入图片描述
    这种对于coding还是不方便,所以就有了另一种方式:go module 模式!!【推荐】

1.2 go module 【目前主流推荐】

在这里插入图片描述

在go module下,由于go module启用后彻底与GOPATH“解绑”,无需将proj1、proj2和proj3放置在同一个目录下,放在任意目录下均可。

就目前而言,对于新项目,强烈建议默认启用go module。并且彻底放弃gopath mode。

1.2.1 goproxy.io代理

在这里插入图片描述

  • https://goproxy.io/zh/docs/getting-started.html
    在这里插入图片描述
  • goland 配置代理及 支持go mod模式
    在这里插入图片描述
    在这里插入图片描述

1.2.2 mod 基本概念

1)go.mod 文件
go.mod 文件为项目启动的核心文件,描述了当前项目的依赖包信息。

  • module:用于定义当前项目的模块路径
  • go:用于设置预期的Go版本
  • require:用于需求一个特定的模块版本
  • exclude:用于从使用中排除一个特定的模块版本
  • replace:用于将一个模块版本替换为另一个模块版本

2)go.sum 文件
go.sum文件类似于Gopkg.lock的一类文件,罗列了当前项目直接或间接依赖的所有模块版本

1.2.3 go mod 常用命令

用 go help module-get 和 go help gopath-get 分别去了解 Go modules 启用和未启用两种状态下的 go get 的行为
用 go get 拉取新的依赖
	go get golang.org/x/text@latest # 拉取最新的版本(优先择取 tag)
	go get golang.org/x/text@master # 拉取 master 分支的最新 commit
	go get golang.org/x/text@v0.3.2 # 拉取 tag 为 v0.3.2 的 commit
	go get golang.org/x/text@342b2e1 # 拉取 hash 为 342b231 的 commit,最终会被转换为 v0.3.2
用 go get -u   # 更新现有的依赖
用 go mod download 下载 go.mod 文件中指明的所有依赖
用 go mod tidy 整理现有的依赖
用 go mod graph 查看现有的依赖 结构
用 go mod init 生成 go.mod 文件(Go 1.13 中唯一一个可以生成 go.mod 文件的子命令)
用 go mod edit 编辑 go.mod 文件
用 go mod vendor 导出现有的所有依赖(事实上 Go modules 正在淡化 Vendor 的概念)
用 go mod verify 校验一个模块是否被篡改过

2、 go mod 一个新项目

2.1 设置代理

win:cmd;linux:terminal

  • win
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct
  • linux、mac
export GO111MODULE=on
export GOPROXY=https://goproxy.cn 

因为它的默认值被墙了

2.2 开始 hello 项目

  1. 创建 项目 hello 目录
    在这里插入图片描述

  2. go mod init 项目:初始化项目,生成 go.mod文件

go mod init hello

在这里插入图片描述
go.mod 提供了go、module, require、replace和exclude 五个命令

  • module:用于定义当前项目的模块路径
  • go:用于设置预期的Go版本
  • require:用于需求一个特定的模块版本
  • exclude:用于从使用中排除一个特定的模块版本
  • replace:用于将一个模块版本替换为另一个模块版本
  1. 在项目hello目录下新建 server.go 文件,代码如下:
package main

import (
	"net/http"

	"github.com/labstack/echo"
)

func main()  {
	e := echo.New()
	e.GET("/", func(c echo.Context) error {
		return c.String(http.StatusOK, "hello, world!!")
	})
	e.Logger.Fatal(e.Start(":8001"))
}

  1. 配置 git ,注意:win 系统变量 需要调整 git 的 bin目录下,不然 go mod 依赖 报错!!
    git下载地址:https://git-scm.com/downloads

D:\Program files\Git\bin
在这里插入图片描述

设置 git ssl

git config --global http.sslVerify "false"
  1. 配置 国内代理,才能下载到依赖
  • win
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct
  • linux、mac
export GO111MODULE=on
export GOPROXY=https://goproxy.cn 
  • Goland
https://goproxy.cn,direct

在这里插入图片描述

  1. 在项目的go.mod文件目录下,执行go mod 相关命令下载依赖包 ,可参考上述 go mod 命令
go mod tidy

在这里插入图片描述

  • 可以看到 依赖包 已经变绿色~
  • 同时 go.mod 文件内容也自动更新
module hello

go 1.16

require (
	github.com/labstack/echo v3.3.10+incompatible
	github.com/labstack/gommon v0.3.0 // indirect
	github.com/stretchr/testify v1.7.0 // indirect
	golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a // indirect
)
  1. 运行 调测 server.go
go run server.go

在这里插入图片描述
可以发现 程序已经正常运行监听

参考:

  • https://github.com/golang/go/wiki/Modules
  • https://juejin.cn/post/6844903798658301960
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值