【go项目01_学习记录05】

2024-05-07 04:04
文章标签 go 01 05 记录 学习 项目

本文主要是介绍【go项目01_学习记录05】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

学习记录

  • 1 依赖管理 Go Modules
    • 1.1 弃用 $GOPATH
    • 1.2 Go Modules 日常使用
      • 1.2.1 初始化生成go.mod文件
      • 1.2.2 Go Proxy代理
      • 1.2.3 go.mod文件查看
      • 1.2.4 go.sum文件查看
      • 1.2.5 indirect 含义
      • 1.2.6 go mod tidy 命令
      • 1.2.7 清空 Go Modules 缓存
      • 1.2.8 下载依赖
      • 1.2.9 所有 Go Modules 命令
      • 1.2.10 相关环境变量
  • 2 补充
    • 2.1 git checkout .
    • 2.2 遇到换行符警告

1 依赖管理 Go Modules

1.1 弃用 $GOPATH

Go Modules 出现的目的之一就是为了解决 GOPATH 的问题。
在 $GOPATH 时代,Go 源码必须放置于 $GOPATH/src 下,抛弃 $GOPATH 的好处,是你能在任意地方创建的 Go 项目。
另外,$GOPATH 有非常落后的依赖管理系统。因在执行 go get 时,无法传达任何版本信息。
在构建 Go 应用程序上,我们无法保证其它人与你所期望依赖的第三方库是相同的版本(相同的代码),也就是说无法保证所有人的依赖版本都一致。

1.2 Go Modules 日常使用

1.2.1 初始化生成go.mod文件

go mod init

1.2.2 Go Proxy代理

因国内访问外网受限,一般我们都会配合 Go Proxy 使用,以防止使用 go get 获取源码包时花费时间过长或无法下载,安装 package 的原则是先拉最新的 release tag,若无 tag 则拉最新的 commit。

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

1.2.3 go.mod文件查看

每一次go get都会同时修改go.mod和go.sum文件
在这里插入图片描述
在这里插入图片描述
参数:
module —— 我们的 goblog 在 Go Module 里也算是一个 Module ;
go —— 指定了版本要求,最低 1.20
require —— 是项目所需依赖

1.2.4 go.sum文件查看

保存着依赖包的版本和哈希值:
在这里插入图片描述
go.sum 里不仅会保存直接依赖包的哈希值,间接依赖包的哈希值也会被保存。
每个模块路径有如下两种哈希
在这里插入图片描述
相当于”双重锁“确保一致性

1.2.5 indirect 含义

在这里插入图片描述
此标志标明这个依赖包还未被使用,如果你在代码的某个地方 import 到的话,VSCode 的 Go 插件就会自动将这个标志去除。

1.2.6 go mod tidy 命令

此命令做整理依赖使用,执行时会把未使用的 module 移除掉

1.2.7 清空 Go Modules 缓存

go mod tidy之后本地缓存有之前go get的内容
在这里插入图片描述
清空本地下载的 Go Modules 缓存:

go clean -modcache

在这里插入图片描述

1.2.8 下载依赖

默认情况下,当 go run 和 go build 命令执行时(启动air会自动执行这两步),Go 会基于 go.mod 文件自动拉取依赖。
在这里插入图片描述

Go Module 也提供了一个命令用以下载项目所需依赖:

go mod download

1.2.9 所有 Go Modules 命令

命令功能
go mod init生成 go.mod 文件
go mod download下载 go.mod 文件中指明的所有依赖
go mod tidy整理现有的依赖
go mod graph查看现有的依赖结构
go mod edit编辑 go.mod 文件
go mod vendo导出项目所有的依赖到 vendor 目录
go mod verify校验一个模块是否被篡改过
go mod why查看为什么需要依赖某模块

1.2.10 相关环境变量

  1. GO111MODULE
    在这里插入图片描述

  2. GOPROXY

  3. GOSUMDB
    Go Checksum Database 的缩写,用于在拉取模块版本时(无论是从源站拉取还是通过 Go Module Proxy 拉取)保证拉取到的模块代码包未经过篡改,若发现不一致将会立即中止。

  4. GONOPROXY/GONOSUMDB/GOPRIVATE

在这里插入图片描述


2 补充

2.1 git checkout .

git checkout . 命令的含义是将工作目录中所有被修改的文件恢复到最近一次提交的状态,即撤销对这些文件的修改。

2.2 遇到换行符警告

警告是由于 Git 在添加文件时检测到换行符的不一致性而引起的

git config --global core.autocrlf true

在这里插入图片描述


这篇关于【go项目01_学习记录05】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/966267

相关文章

git 创建新库(git init)-01

git init # 在当前目录新建一个git代码库,查看当前目录可以看到.git 文件夹git init [project_name] # 新建一个project_name目录,将其初始化为git 代码库git clone [url] # 下载一个项目和它的整个代码历史消息

Apache Shiro授权功能-05

Apache Shiro授权功能 授权(也称为访问控制)是确定应用程序中资源的访问权限的过程。换句话说,确定“谁有权访问什么。”授权用于回答安全问题,例如“用户是否允许编辑帐户”,“该用户是否允许查看此网页”,“该用户是否可以访问”到这个按钮?“这些都是决定用户有权访问的决定,因此都代表授权检查。 授权是任何应用程序的关键元素,但它很快就会变得非常复杂。Shiro的目标是消除授权的大部分复杂性

Apache Shiro简介-01

Apache Shiro简介 什么是Apache Shiro? Apache Shiro是一个功能强大且灵活的开源安全框架,可以清晰地处理身份验证,授权,企业会话管理和加密。 Apache Shiro的首要目标是易于使用和理解。安全有时可能非常复杂,甚至是痛苦的,但并非必须如此。框架应尽可能掩盖复杂性,并提供简洁直观的API,以简化开发人员确保其应用程序安全的工作。 以下是Apa

MyBatis的update语句的返回值改为从匹配数改为受影响的记录数,向mysql连接添加useAffectedRows=true一个参数即可。

1、现象mysql更新update语句执行时,没有内容变更的话,会返回“0”;存在内容更新的话,会返回会返回有内容更新的记录数“1”。  2、mybatis默认情况,没有内容更新也是返回“1”。这么怎么会是”1“,不应该是”0“???其实默认mybatis返回的是 Rows matched “1”,而不是 “ 0 row affected ”中的 “0”。  3、那需要怎么才能让m

Linux命令学习之二

每日一结 ​               命令置换:是将一个命令的输出作为另一个命令的参数,命令格式如下: commond1 `command2` 其中,命令command2的输出将作为命令command1的参数,需要注意的是, 命令置换的单引号为ESC键下方的 ` 其意思就是说,先运行单引号内的命令,再将其命令作为

Linux命令学习之一

每日一结                                                                                        注:当用户不确定一个软件包的类型时, 可使用file命令查看文件类型

javaweb学习-jstl-c:forEach中 varStatus的属性简介

varStatus是<c:forEach>jstl循环标签的一个属性,varStatus属性。就拿varStatus=“status”来说,事实上定义了一个status名的对象作为varStatus的绑定值。该绑定值也就是status封装了当前遍历的状态,比如,可以从该对象上查看是遍历到了第几个元素:${status.count} 我们常会用c标签来遍历需要的数据,为了方便使用,varSta

日志记录—Java中的日志——Java.util.logging、log4j、commons-logging

转载地址  http://blog.csdn.net/luoweifu/article/details/46495045 Java中给项目程序添加log主要有三种方式,一使用JDK中的java.util.logging包,一种是log4j,一种是commons-logging。其中log4j和commons-logging都是apache软件基金会的开源项目。这三种方式的区别如下: J

java学习—null和isEmpty 区别

String fly1 = new String(); String fly2 = ""; String fly3 = null; 解释如下: 此时fly1是分配了内存空间,但值为空,是绝对的空,是一种有值(值存在为空而已) 此时fly2是分配了内存空间,值为空字符串,是相对的空,是一种有值(值存在为空字串) 此时fly3是未分配内存空间,无值,是一种无值(

javaWeb学习—getRequestURI,getRequestURL等的学习

我使用的是SpringMVC框架,做一个小的例子,说明一下对这个内容的学习和理解! 1:我的项目名称为 dufyun_SpringMVC  2:我测试的地址为 ${pageContext.servletContext.contextPath}/testName 3;后台获取的代码为: @RequestMapping(value="/testName",method=Req