什么是go mod

go mod 是go语言的包管理工具,类似java 的maven,go mod的出现可以告别goPath,使用go module来管理项目,有了go mod账号就不需要非得把项目放到gopath/src目录下了,你可以在磁盘的任何位置新建一个项目

go mod在go语言的1.11版本后推出,但是在早期,go mod 非常难用,被广大的开发者所诟病;现在已经好了很多了

常用命令

通过命令go mod help 可以看到有go mod有以下几个命令

  • download :下载module到本地缓存,下载到GOMODCACHE指定的路径
  • edit: 编辑
  • graph :以文本形式打印模块需求图
  • init :创建go mod 项目
  • tidy 添加缺失module,或者去除没有使用的module
  • vendor 将项目的依赖库下载到项目内部,作为项目的一部分来编译。
  • verify 验证依赖是否正确
  • why explain why packages or modules are needed

下载依赖 go get方式

go get命令会下载指定的包,并将下载的包进行编译,然后安装到特定目录。

go get  github.com/go-redis/redis

除此之外,go get还提供以下几个参数

  • -d :只下载不安装
  • -f :只有在你包含了 -u 参数的时候才有效,不让 -u 去验证 import 中的每一个都已经获取了,这对于本地 fork 的包特别有用
  • -t :同时也下载需要为运行测试所需要的包
  • -u :强制使用网络去更新包和它的依赖包
  • -v :显示执行的命令

下载依赖 go.mod方式

在mod文件中添加 require(依赖链接 版本号) 即可,示例:

module demo_94_tailgo 1.17require (github.com/hpcloud/tail v1.0.0 // indirect
)

添加完成后在执行以下命令即可将依赖下载到本地

go mod download 

查看go mod状态

go env

找到以下的配置项就是go mod的配置,为什么叫 GO111MODULE 呢,中间的111是因为从1.11版本后推出的功能,

set GO111MODULE=on

设置代理

默认的代理是GOPROXY=https://proxy.golang.org,direct,但是这个链接是国外的网站,得翻墙才能用,所以我们用国内的代理

go env -w GOPROXY=https://goproxy.cn,direct

开启/关闭go mod

GO111MODULE 有三种状态

  • on : 开启
  • off : 关闭
  • auto :默认值,go命令会根据当前目录来决定是否启用module功能

开启 go mod

go env -w GO111MODULE=on

关闭 go mod

go env -w GO111MODULE=off

download 下载

下载module到本地缓存,下载到GOMODCACHE指定的路径,可通过go env -w GOMODCACHE=/xxx/xxx修改cache路径

go mod download

edit 编辑go.mod文件

# -replace 表示 包下载不下来的时候使用,--replace=新地址=下载不下来的地址
go mod edit -replace golang.org/x/crypto@v0.0.0=github.com/golang/crypto@latest# -exclude 表示排除某个包
go mod edit -exclude golang.org/x/crypto@v0.0.0# -require 表示导入某个包
go mod edit -require golang.org/x/crypto@v0.0.0# -json 以json方式打印go.mod 模块对象
go mod edit -json

graph

以文本形式打印模块需求图

go mod graph

init 创建go mod 项目

进入项目目录下,执行以下命令,其中projectName 是你的项目名称, 建议和目录一致

go mod init projectName

执行完后会自动创建一个go.mod的文件,内容如下

module xx.xx.com/xd/projectNamego 1.14

tidy

添加缺失module,或者去除没有使用的module

go mod tidy

vendor

将项目的依赖库下载到项目内部,作为项目的一部分来编译。此时会生产一个vendor的目录,一般情况下都用不上

go mod vendor

verify

验证依赖是否正确

go mod verify

why

查找依赖

go mod  why

打包编译

go build 编译

go build命令会编译包及其依赖,生成的文件存放在当前目录下。而且go build只对main包有效,其他包不起作用

go build

go install 编译并安装

和go build命令比较相似,go install对于非main包会生成静态文件放在GOPATH/pkg目录下,文件扩展名为a。如果为main包,则会在GOPATH/pkg目录下,文件扩展名为a。如果为main包,则会在GOPATH/pkg目录下,文件扩展名为a。如果为main包,则会在GOPATH/bin下生成一个和给定包名相同的可执行二进制文件。

go install
go build 、go install、go get 区别
  • go build: go build命令是在当前目录编译生成可执行文件,注意 go build 指令会调用所有引用包的源码进行重新编译而不是使用之前pkg里的文件
  • go install: 执行 go install 命令会完成类似 go build 的功能 ,但go install 命令执行生成的可执行文件是在【$GOPATH/bin】目录中
  • go get: 该命令可以理解为两个操作 git clone + go install , 执行会将远程代码clone 到【$GOPATH/src】 目录中

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/91208.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/91208.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/91208.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

150-SWT-MCNN-BiGRU-Attention分类预测模型等!

150-SWT-MCNN-BiGRU-Attention分类预测模型!基于多尺度卷积神经网络(MCNN)双向长短期记忆网络(BiGRU)注意力机制(Attention)的分类预测模型,matlab代码,直接运行使用!1、模型介绍:针对传统方法在噪声环境下诊断精度低的问题&#…

MySQL数据一致性与主从延迟深度解析:从内核机制到生产实践

在高并发分布式系统中,数据一致性与复制延迟如同硬币的两面。本文深入剖析MySQL持久化机制与主从同步原理,并提供可落地的调优方案。一、数据持久化核心机制:双日志协同 1. Redo Log:崩溃恢复的生命线刷新策略(innodb_…

【I】题目解析

目录 单选题 多选题 判断题 单选题 1.reg[7:0]A; A2hFF;则A() A.8b11111110 B.8b03 C.8b00000011 D.8b11111111 C 2hFF实际上等效于2位二进制2b11,赋值给8位寄存器A之后,低位赋值,高位补0 A8b00000011 AMD FPG…

《Foundation 面板:设计、功能与最佳实践解析》

《Foundation 面板:设计、功能与最佳实践解析》 引言 在当今数字化时代,用户界面(UI)设计的重要性不言而喻。其中,Foundation 面板作为一种流行的前端框架,因其灵活性和高效性而被众多开发者所青睐。本文将深入解析 Foundation 面板的设计理念、功能特点以及最佳实践,…

React服务端渲染 Next 使用详解

1. Next.js 概述 Next.js 是一个基于 React 的开源框架,专注于服务器端渲染(SSR)和静态站点生成(SSG),提供开箱即用的 SSR 功能,简化 React 应用的开发与部署。 2. Next.js 的核心特性 SSR 支…

Deforum Stable Diffusion,轻松实现AI视频生成自由!

摘要: 你是否曾被那些充满想象力、画面流畅的AI视频所震撼?你是否也想亲手创造出属于自己的AI动画?本文将为你提供一份“保姆级”的详尽教程,从环境配置到参数调整,一步步带你复现强大的Deforum Stable Diffusion模型&…

不同环境安装配置redis

不同环境安装配置redis windows 环境安装redis redis所有下载地址 windows版本redis下载(GitHub): https://github.com/tporadowski/redis/releases (推荐使用)https://github.com/MicrosoftArchive/redis/releases]官…

汇川Easy系列PLC算法系列(回溯法ST语言实现)

Easy系列PLC 3次多项式轨迹插补算法 Easy系列PLC 3次多项式轨迹插补算法(完整ST代码)_plc连续插补算法-CSDN博客文章浏览阅读122次。INbExecuteBOOLOFFOFF不保持1INrStartPosREAL0.0000000.000000不保持起始位置unit2INrEndPosREAL0.0000000.000000不保持结束位置unit3INrStar…

Linux C:构造数据类型

目录 一、结构体(struct) 1.1类型定义 1.2 结构体变量定义 1.3 结构体元素初始化 1.4 结构体成员访问 1.5 结构体的存储(内存对齐) 1.6 结构体传参 本文主要记录了C语言中构造数据类型部分的内容,今天暂时只写了…

Python:self

在Python面向对象编程中,self是一个指向类实例自身的引用参数:‌1. 本质与作用‌‌身份标识‌:self是类实例化后对象的"身份证",代表当前实例本身,用于区分不同实例的属性和方法‌‌自动传递‌:调…

【SpringMVC】SpringMVC的概念、创建及相关配置

什么是SpringMVC 概述 中文翻译版:Servlet 栈的 Web 应用 Spring MVC是Spring Framework的一部分,是基于Java实现MVC的轻量级Web框架。 查看官方文档:https://docs.spring.io/spring/docs/5.2.0.RELEASE/spring-framework-reference/web.h…

浅谈存储过程

问题引入 面试的时候有时候会问到知不知道存储过程,用没用过? 是什么 存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久…

maven optional 功能详解

前言 最近参与了一个项目,使用maven管理依赖.项目拆分了很多模块.然后交个多个团队各自开发.最后在一个项目骨架中,把各自的模块引入进来,一起启动. 后来随着项目的深入.引入的jar包变多.发现 jar包太多,编译太慢, 打包之后的war包非常大.这种情况就可以使用optional来优化什么…

Python基础--Day04--流程控制语句

流程控制语句是计算机编程中用于控制程序执行流程的语句。它们允许根据条件来控制代码的执行顺序和逻辑,从而使程序能够根据不同的情况做出不同的决策。流程控制实现了更复杂和灵活的编程逻辑。 顺序语句 顺序语句是按照编写的顺序依次执行程序中的代码。代码会按照…

【同济大学】双速率自动驾驶架构LeAD:端到端+LLM,CARLA实测93%路线完成率,性能SOTA!

近年来,随着端到端的技术快速发展将自动驾驶带到了一个新高度,并且取得了非常亮眼的成绩。由于感知限制和极端长尾场景下训练数据覆盖不足,模型在高密度复杂交通场景下和不规则交通情况下的处理能力不足,导致在开放道路上大规模部…

github与git新手教程(快速访问github)

0 序言 作为一个开发者,你必须知道github和git是什么,怎么使用。 github是一个存储代码等资源的远程仓库,一个大型项目往往需要很多人共同协作开发,而大家如何协同开发的进度与分工等要求需要有一个统一开放保存代码的平台。git…

Windows环境下安装Python和PyCharm

可以只安装PyCharm吗?不可以!!! 开发Python应用程序需要同时安装Python和PyCharm。Python是一种编程语言,PyCharm是一个专门为Python开发设计的集成开发环境,提供丰富的功能以简化编码过程。 一、前期准备…

Qt 嵌入式系统资源管理

在嵌入式系统中,资源(CPU、内存、存储、网络等)通常非常有限,因此高效的资源管理对 Qt 应用的稳定性和性能至关重要。本文从内存优化、CPU 调度、存储管理到电源控制,全面解析 Qt 嵌入式系统资源管理的关键技术。 一、…

小杰数据结构(one day)——心若安,便是晴天;心若乱,便是阴天。

1.数据结构计算机存储、组织数据的方式;有特定关系的数据元素集合;研究数据的逻辑结构、物理结构(真实存在)和对应的算法;新结构仍保持原结构类型;选择更高的运行或存储效率的数据结构。逻辑结构——面向问…

力扣面试150(44/150)

7.30 155. 最小栈 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除堆栈顶部的元素。int top() 获取堆栈顶…