当前位置: 首页 > news >正文

Go后端开发 -- Go Modules

Go后端开发 – Go Modules

文章目录

  • Go后端开发 -- Go Modules
  • 一、什么是Go Modules?
  • 二、GOPATH的工作模式
    • 1.GOPATH模式
    • 2.GOPATH模式的弊端
  • 三、Go Modules模式创建项目
    • 1.go mod命令
    • 2.go mod环境变量
    • 3.使用Go Modules初始化项目
    • 4.修改模块的版本依赖关系
  • 四、Go Modules下import导本地包
    • 1.所有包在同一项目目录下
    • 2.import导入的包与main包不在同一个路径下
    • 3.import导入本地包的格式


一、什么是Go Modules?

Go modules 是 Go 语言的依赖解决方案,发布于 Go1.11,成长于 Go1.12,丰富于 Go1.13,正式于 Go1.14 推荐在生产上使用。
Go moudles 目前集成在 Go 的工具链中,只要安装了 Go,自然而然也就可以使用 Go moudles 了,而 Go modules 的出现也解决了在 Go1.11 前的几个常见争议问题:

  1. Go 语言长久以来的依赖管理问题。
  2. “淘汰”现有的 GOPATH 的使用模式。
  3. 统一社区中的其它的依赖管理工具(提供迁移功能)。

二、GOPATH的工作模式

1.GOPATH模式

Go Modoules的目的之一就是淘汰GOPATH, 那么GOPATH是个什么?
我们输入go env命令行后可以查看到 GOPATH 变量的结果,我们进入到该目录下进行查看,如下:
在这里插入图片描述
在这里插入图片描述
GOPATH目录下一共包含了三个子目录,分别是:

  • bin:存储所编译生成的二进制文件。
  • pkg:存储预编译的目标文件,以加快程序的后续编译速度。
  • src:存储所有.go文件或源代码。在编写 Go 应用程序,程序包和库时,一般会以$GOPATH/src/github.com/foo/bar的路径进行存放。

因此在使用 GOPATH 模式下,我们需要将应用代码存放在固定的$GOPATH/src目录下,并且如果执行go get来拉取外部依赖会自动下载并安装到$GOPATH目录下。

2.GOPATH模式的弊端

在 GOPATH 的 $GOPATH/src 下进行 .go 文件或源代码的存储,我们可以称其为 GOPATH 的模式,这个模式拥有一些弊端.

  1. 无版本控制概念. 在执行go get的时候,你无法传达任何的版本信息的期望,也就是说你也无法知道自己当前更新的是哪一个版本,也无法通过指定来拉取自己所期望的具体版本。
  2. 无法同步一致第三方版本号. 在运行 Go 应用程序的时候,你无法保证其它人与你所期望依赖的第三方库是相同的版本,也就是说在项目依赖库的管理上,你无法保证所有人的依赖版本都一致。
  3. 无法指定当前项目引用的第三方版本号. 你没办法处理 v1、v2、v3 等等不同版本的引用问题,因为 GOPATH 模式下的导入路径都是一样的,都是github.com/foo/bar

三、Go Modules模式创建项目

我们接下来用Go Modules的方式创建一个项目, 建议为了与GOPATH分开,不要将项目创建在GOPATH/src下.

1.go mod命令

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

2.go mod环境变量

可以通过 go env 命令来进行查看

$ go env
GO111MODULE="auto"
GOPROXY="https://proxy.golang.org,direct"
GONOPROXY=""
GOSUMDB="sum.golang.org"
GONOSUMDB=""
GOPRIVATE=""
...
  • GO111MODULE
    Go语言提供了 GO111MODULE这个环境变量来作为 Go modules 的开关,其允许设置以下参数:
    • auto:只要项目包含了 go.mod 文件的话启用 Go modules,目前在 Go1.11 至 Go1.14 中仍然是默认值。
    • on:启用 Go modules,推荐设置,将会是未来版本中的默认值。
    • off:禁用 Go modules,不推荐设置。

设置GO111MODULE;

$ go env -w GO111MODULE=on
  • GOPROXY
    这个环境变量主要是用于设置 Go 模块代理(Go module proxy),其作用是用于使 Go 在后续拉取模块版本时直接通过镜像站点来快速拉取。
    GOPROXY 的默认值是:https://proxy.golang.org,direct
    proxy.golang.org国内访问不了,需要设置国内的代理.
    • 阿里云
      https://mirrors.aliyun.com/goproxy/
    • 七牛云
      https://goproxy.cn,direct

设置GOPROXY:

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

GOPROXY 的值是一个以英文逗号 “,” 分割的 Go 模块代理列表,允许设置多个模块代理,假设你不想使用,也可以将其设置为 “off” ,这将会禁止 Go 在后续操作中使用任何 Go 模块代理。

$ go env -w GOPROXY=https://goproxy.cn,https://mirrors.aliyun.com/goproxy/,direct

而在刚刚设置的值中,我们可以发现值列表中有 direct标识,它又有什么作用呢?
实际上 “direct” 是一个特殊指示符,用于指示 Go 回源到模块版本的源地址去抓取(比如 GitHub 等),场景如下:当值列表中上一个 Go 模块代理返回 404 或 410 错误时,Go 自动尝试列表中的下一个,遇见 “direct” 时回源,也就是回到源地址去抓取,而遇见 EOF 时终止并抛出类似 “invalid version: unknown revision…” 的错误。

  • GOSUMDB
    它的值是一个 Go checksum database,用于在拉取模块版本时(无论是从源站拉取还是通过 Go module proxy 拉取)保证拉取到的模块版本数据未经过篡改,若发现不一致,也就是可能存在篡改,将会立即中止。
    GOSUMDB 的默认值为:sum.golang.org,在国内也是无法访问的,但是 GOSUMDB 可以被 Go 模块代理所代理(详见:Proxying a Checksum Database)。
    因此我们可以通过设置 GOPROXY 来解决,而先前我们所设置的模块代理 goproxy.cn 就能支持代理 sum.golang.org,所以这一个问题在设置 GOPROXY 后,你可以不需要过度关心。
    另外若对 GOSUMDB 的值有自定义需求,其支持如下格式:

    • 格式 1:<SUMDB_NAME>+<PUBLIC_KEY>
    • 格式 2:<SUMDB_NAME>+<PUBLIC_KEY> <SUMDB_URL>
    • 也可以将其设置为“off”,也就是禁止 Go 在后续操作中校验模块版本
  • GONOPROXY/GONOSUMDB/GOPRIVATE
    这三个环境变量都是用在当前项目依赖了私有模块,例如像是你公司的私有 git 仓库,又或是 github 中的私有库,都是属于私有模块,都是要进行设置的,否则会拉取失败。
    更细致来讲,就是依赖了由 GOPROXY 指定的 Go 模块代理或由 GOSUMDB 指定 Go checksum database 都无法访问到的模块时的场景。

一般建议直接设置 GOPRIVATE,它的值将作为 GONOPROXY 和 GONOSUMDB 的默认值,所以建议的最佳姿势是直接使用 GOPRIVATE。
并且它们的值都是一个以英文逗号 “,” 分割的模块路径前缀,也就是可以设置多个,例如:

$ go env -w GOPRIVATE="git.example.com,github.com/eddycjy/mquote"

设置后,前缀为 git.xxx.comgithub.com/eddycjy/mquote 的模块都会被认为是私有模块。
如果不想每次都重新设置,我们也可以利用通配符,例如:

$ go env -w GOPRIVATE="*.example.com"

这样子设置的话,所有模块路径为 example.com 的子域名(例如:git.example.com)都将不经过 Go module proxy 和 Go checksum database,需要注意的是不包括 example.com 本身。

  • 以上的所有环境变量配置,如果执行命令后未修改成功,都可以直接在配置文件中修改:
vim ~/.bashrc

在这里插入图片描述
修改完后需加载配置文件:

source .bashrc

在这里插入图片描述

3.使用Go Modules初始化项目

  • 创建项目目录
    使用Go Modules创建项目无需在GOPATH下创建文件夹
    在这里插入图片描述
    在这里插入图片描述
  • 执行Go modules 初始化
    在这里插入图片描述
    在这里插入图片描述
    执行完go mod初始化后,项目文件夹中会出现一个go.mod文件;
    go.mod文件内容:包括模块名称和go的版本
    在这里插入图片描述

go mod初始化:

go mod init 模块名称

模块名称是自定义的,决定之后的代码在导入本包的时候import的名称;

  • 接下来写一段代码,导入一个现成的包:
package mainimport ("fmt""github.com/aceld/zinx/ziface""github.com/aceld/zinx/znet"
)// ping test 自定义路由
type PingRouter struct {znet.BaseRouter
}// Ping Handle
func (this *PingRouter) Handle(request ziface.IRequest) {//先读取客户端的数据fmt.Println("recv from client : msgId=", request.GetMsgID(),", data=", string(request.GetData()))//再回写ping...ping...pingerr := request.GetConnection().SendBuffMsg(0, []byte("ping...ping...ping"))if err != nil {fmt.Println(err)}
}func main() {//1 创建一个server句柄s := znet.NewServer()//2 配置路由s.AddRouter(0, &PingRouter{})//3 开启服务s.Serve()
}

我们先不要关注代码本身,我们看当前的main.go也就是我们的aceld/modules_test项目,是依赖一个叫github.com/aceld/zinx库的, znet和ziface只是zinx的两个模块;

  • 接下来我们在$HOME/aceld/modules_test,本项目的根目录执行go get指令
    在这里插入图片描述
go get github.com/aceld/zinx/znet

不主动执行go get指令,也会自动下载

  • 我们会看到 我们的go.mod被修改,同时多了一个go.sum文件.
  • 查看go.mod文件
    在这里插入图片描述
    这里面的关键字:
    • module: 用于定义当前项目的模块路径
    • go:标识当前Go版本.即初始化版本
    • require: 当前项目依赖的一个特定的必须版本
    • // indirect: 示该模块为间接依赖,也就是在当前应用程序中的 import 语句中,并没有发现这个模块的明确引用,有可能是你先手动 go get 拉取下来的,也有可能是你所依赖的模块所依赖的.我们的代码很明显是依的"github.com/aceld/zinx/znet""github.com/aceld/zinx/ziface",所以就间接的依赖了github.com/aceld/zinx
  • 查看go.sum文件
    在第一次拉取模块依赖后,会发现多出了一个go.sum文件,其详细罗列了当前项目直接或间接依赖的所有模块版本,并写明了那些模块版本的 SHA-256 哈希值以备 Go 在今后的操作中保证项目所依赖的那些模块版本不会被篡改
    在这里插入图片描述
    我们可以看到一个模块路径可能有如下两种:
    h1:hash情况:
    在这里插入图片描述
    go.mod hash情况:
    在这里插入图片描述
    h1 hash 是 Go modules 将目标模块版本的 zip 文件开包后,针对所有包内文件依次进行 hash,然后再把它们的 hash 结果按照固定格式和算法组成总的 hash 值。
    而 h1 hash 和 go.mod hash 两者,要不就是同时存在,要不就是只存在 go.mod hash。那什么情况下会不存在 h1 hash 呢,就是当 Go 认为肯定用不到某个模块版本的时候就会省略它的 h1 hash,就会出现不存在 h1 hash,只存在 go.mod hash 的情况。

4.修改模块的版本依赖关系

为了作尝试,假定我们现在对zinx版本作了升级, 由zinx v1.2.1升级到zinx v1.2.2(注意zinx是一个没有打版本tag打第三方库,如果有的版本号是有tag的,那么可以直接对应v后面的版本号即可)
那么,如果我们想获得1.2.1版本的包,该如何执行命令呢?

  • 先回到$HOME/aceld/modules_test,本项目的根目录执行
[lmx@lmx-CentOS modules_go]$ go get github.com/aceld/zinx/znet@v1.2.1
go: downloading github.com/aceld/zinx v1.2.1
go: downgraded github.com/aceld/zinx v1.2.2 => v1.2.1

go get package@version在包后面加上@就可以下载指定版本的包;
如果要升级最新版本,可以执行

go get -u package

会更新所有依赖该包的版本

这样我们,下载了之前版本的zinx, 版本是v1.2.1

  • go.mod中:
    在这里插入图片描述
    我们会看到,当我们执行go get 的时候, 会自动的将本地将当前项目的require更新了.变成了指定版本的依赖.
  • 我们想用一个最新版本的zinx. 来修改当前zinx模块的依赖版本号
    目前我们在$GOPATH/pkg/mod/github.com/aceld下,已经有了两个版本的zinx库
    在这里插入图片描述
  • 目前,我们的项目依赖的是zinx@v1.2.1这个不是最新版, 我们要改成最新版本zinx@v1.2.2.
  • 回到/goProject/modules_go项目目录下,执行
$ go mod edit -replace=zinx@v1.2.1=zinx@v1.2.2
  • 然后我们打开go.mod查看一下
    在这里插入图片描述
  • 这里出现了replace关键字.用于将一个模块版本替换为另外一个模块版本

四、Go Modules下import导本地包

1.所有包在同一项目目录下

一个文件夹中只能有一个包,多个包会报错
在这里插入图片描述

  • 代码结构:
    在这里插入图片描述
  • go.mod
module function_gogo 1.20
  • Lib1.go
    Initlib1包
package Initlib1import "fmt"// lib1提供的API
func lib1Test() {fmt.Println("lib1Test()...")
}func init() {fmt.Println("lib1")
}
  • Lib2.go
    Initlib2包
package Initlib2import "fmt"// lib2提供的API
func lib2Test() {fmt.Println("lib2Test()...")
}func init() {fmt.Println("lib2")
}
  • main.go
    main包
    • 在使用Go Modules导入本地包的时候,在包名的前面需要指定模块名才可以导入
      比如上面的go.mod中模块名是function_go,导入包的路径就是function_go/InitLib1,是模块名/文件夹名
    • 在导入了包之后,需要调用包中的方法,可以直接包名.方法()
package mainimport ("function_go/InitLib1""function_go/InitLib2"
)func main() {InitLib1.Lib1Test()InitLib2.Lib2Test()
}
  • 运行结果
lib1
lib2
libmain init
libmian main

2.import导入的包与main包不在同一个路径下

  • 项目结构:
    在这里插入图片描述
  • fun_gofunction_go是两个不同的模块,如果要在fun_go下的main.go中导入function_go/InitLib1包,也需要指定模块名
package mainimport ("fmt""function_go/InitLib1" // 指定模块名
)func main() {InitLib1.Lib1Test()fmt.Println("go")
}

在这里插入图片描述

3.import导入本地包的格式

项目结构:
在这里插入图片描述

  • go.mod
module expressiongo 1.20
  • switch.go
package Switchimport "fmt"func Switch() {grade := 'B'marks := 90switch marks {case 90:grade = 'A'case 80:grade = 'B'case 70, 60, 50:grade = 'C'default:grade = 'D'}switch {case grade == 'A':fmt.Println("优秀")case grade == 'B':fmt.Println("良好")case grade == 'C':fmt.Println("及格")default:fmt.Println("不及格")}fmt.Println("你的等级是:", grade)
}
  • main.go
package mainimport (Switch "expression/switch""fmt"
)func main() {Switch.Switch()fmt.Println("ll")
}

在main包中导入同一模块下的Switch包,导入的格式一定是模块名/文件夹名,模块名后面跟的是包的路径,不是包名,写包名会导致报错,所以文件夹的名字最好和包名一致,这样方便不容易出错

  • 修改文件夹名之后:
    在这里插入图片描述
  • main.go
package mainimport ("expression/Switch" //模块名/包的文件夹名"fmt"
)func main() {Switch.Switch()fmt.Println("ll")
}

相关文章:

Go后端开发 -- Go Modules

Go后端开发 – Go Modules 文章目录 Go后端开发 -- Go Modules一、什么是Go Modules?二、GOPATH的工作模式1.GOPATH模式2.GOPATH模式的弊端 三、Go Modules模式创建项目1.go mod命令2.go mod环境变量3.使用Go Modules初始化项目4.修改模块的版本依赖关系 四、Go Modules下impo…...

基于det_keypoint_unite的ROS功能包(jetson部署)

文章目录 硬件软件FastDeploy编译CMakeLists.txt头文件源代码硬件 Jetson AGX Orin 64GB 软件 gcc/g++ >= 5.4(推荐8.2)cmake >= 3.10.0jetpack >= 4.6.1opencv=4.2.0FastDeploy编译 git clone https://github.com/PaddlePaddle/FastDeploy.git cd FastDeploy mkdi…...

TS 36.211 V12.0.0-下行(8)-调制和上变频

本文的内容主要涉及TS 36.211&#xff0c;版本是C00&#xff0c;也就是V12.0.0。...

基于SSM酒店后台管理系统【源码】【最详细运行文档】

基于SSM酒店后台管理系统【源码】【最详细运行文档】 功能简介技术描述运行准备♝项目运行访问项目 演示图✅源码获取 &#x1f4a1; 「分享」 大家好&#xff0c;最近几年在酒店后台管理系统非常流行&#xff0c;无论是上课的项目或者是一些毕设都会以酒店后台管理系统举例说…...

利用Python实现每日新闻早报推送

本文将介绍如何使用Python编写简单的逻辑&#xff0c;通过调用API接口实现每日新闻推送功能。 步骤&#xff1a; 导入所需的库&#xff1a; 在代码的开头&#xff0c;我们需要导入所需的库。通常&#xff0c;我们会使用requests库来发送HTTP请求&#xff0c;以获取新闻数据。 …...

图像分割-Grabcut法

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 本文的C#版本请访问&#xff1a;图像分割-Grabcut法(C#)-CSDN博客 GrabCut是一种基于图像分割的技术&#xff0c;它可以用于将图像…...

性能测试浅谈

早期的性能测试更关注后端服务的处理能力。 一个用户去访问一个页面的请求过程&#xff0c;如上图。 数据传输时间 当你从浏览器输入网址&#xff0c;敲下回车&#xff0c;开始... 真实的用户场景请不要忽视数据传输时间&#xff0c;想想你给远方的朋友写信&#xff0c;信件需…...

媒体运营常用的ChatGPT通用提示词模板

媒体平台选择&#xff1a;如何选择合适的媒体平台&#xff0c;确保内容的有效传播&#xff1f; 内容策划与创作&#xff1a;如何策划和创作高质量的内容&#xff0c;吸引和留住目标受众&#xff1f; 内容发布与推广&#xff1a;如何有效地发布和推广内容&#xff0c;提高内容…...

Java学习苦旅(二十一)——泛型

本篇博客将详细讲解Java中的泛型。 文章目录 泛型的定义语法示例 泛型类语法示例类型边界语法示例 类型擦除通配符语法示例上界语法示例 下界语法示例 裸类型泛型方法语法示例 泛型的限制结尾 泛型的定义 语法 class 泛型类名称<类型形参列表> {//这里可以使用类型参数…...

具备闭环思维的测试才更充分

测试工作的终极目标是为了保障产品的质量。如果用同一个维度衡量测试人员的业务水平&#xff0c;简单粗暴一些&#xff1a;那就是针对同一款产品&#xff0c;哪个测试人员发现的bug多&#xff0c;哪个测试人员的测试理论与实践水平相对来说还是高一些。 前两天组长在群里分析了…...

flask web学习之模板(一)

文章目录 一、模板基本用法1.1 定界符1.2 模板语法1.3 渲染模板 二、模板辅助工具2.1 上下文2.2 全局对象2.3 过滤器2.4 测试器2.5 模板环境对象 在动态web程序中&#xff0c;视图函数返回的HTML数据往往需要根据相应的变量&#xff08;比如查询参数&#xff09;动态生成。当HT…...

RedisInsight - Redis官方可视化工具

一、RedisInsight 简介 RedisInsight 是一个直观高效的 Redis GUI 管理工具&#xff0c;它可以对 Redis 的内存、连接数、命中率以及正常运行时间进行监控&#xff0c;并且可以在界面上使用 CLI 和连接的 Redis 进行交互&#xff08;RedisInsight 内置对 Redis 模块支持&#…...

Matlab定义函数计算斐波那契数列

以下是使用 MATLAB 定义函数计算并输出斐波那契数列前 200 个数的示例代码&#xff1a; function result fibonacci(n)if n < 1 || n > 200result NaN;elseif n 1 || n 2result 1;elseresult fibonacci(n-1) fibonacci(n-2);end endn 200; result fibonacci(n)…...

计算机网络面试题总结

总结自Network | JavaGuide(Java面试 学习指南) 什么是OSI7层模型&#xff1f; 什么是TCP/IP 四层模型&#xff1f; 为什么网络要分层&#xff1f; 应用层有哪些常见的协议&#xff1f; 传输层有哪些常见的协议&#xff1f; 网络层有哪些常见的协议&#xff1f; 从输入…...

视频转为序列图的软件,让视频批量转为序列图

你是否曾经遇到过这样的困境&#xff1a;需要将一段视频转为一系列的图片&#xff0c;但却没有合适的工具来完成&#xff1f;或许你曾经手动截图&#xff0c;或者用其他方式&#xff0c;但结果往往不尽如人意&#xff0c;图片质量差、色彩失真、画面不清晰。现在&#xff0c;让…...

目标检测中的常见指标

概念引入&#xff1a; TP&#xff1a;True Positive IoU > 阈值 检测框数量 FP: False Positive IoU < 阈值 检测框数量 FN: False Negative 漏检框数量 Precision:查准率 Recall:查全率&#xff08;召回率&#xff09; AP&am…...

QT上位机开发(会员充值软件)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 所有的控件当中&#xff0c;除了label、edit、radio、combobox和button之外&#xff0c;另外一个用的比较多的控件就是grid&#xff0c;也可称之为…...

小程序实现绘制图片 保存到手机

HTML <template><view><canvas canvas-id"myCanvas" :style"{height:380px,width:wWidthpx,background:#FFFFFF}"></canvas><view class"textCenter"><button click"saveCanvas">保存图片</b…...

Elasticsearch基本操作之索引操作

本文说下Elasticsearch基本操作之索引操作 文章目录 概述创建索引创建索引示例重复创建索引示例 查看索引查看所有索引查看单个索引 删除索引删除索引 概述 由于是使用命令来操作Elasticsearch&#xff0c;可以使用kibana&#xff0c;postman和apifox等工具 我使用了apifox来执…...

调用Java线程相关的API为什么能够控制操作系统线程?

今天我们解决Java线程的这五个问题&#xff1a; Java线程创建的完整流程 Java的线程是何时与JVM线程绑定的 JVM线程是何时与OS线程绑定的 Java线程对应的OS线程有什么特殊的地方 调用JavaAPI为什么能够操作OS线程 对于任何支持多线程的计算机语言来说&#xff0c;深入理解…...

【办公技巧】excel中设置选项按钮的方法

大家是否会遇到需要勾中选项的情况&#xff0c;我们可以在电子表格中制作出可以勾选、选中的选项按钮&#xff0c;今天我们一起学习一下设置方法。 首先&#xff0c;我们需要先在excel工具栏中添加一个功能模块&#xff1a;开发工具 依次点击excel中的文件 – 选项 – 自定义…...

如何编写高效的正则表达式?

正则表达式&#xff08;Regular Expression&#xff0c;简称regex&#xff09;是一种强大的文本处理技术&#xff0c;广泛应用于各种编程语言和工具中。本文将从多个方面介绍正则表达式的原理、应用和实践&#xff0c;帮助你掌握这一关键技术。 正则可视化 | 一个覆盖广泛主题…...

vue3中使用pinia,更改state中数据,试图不更新问题

直接上代码 使用computed&#xff0c;可以实现。...

【前端设计】文字聚光灯

欢迎来到前端设计专栏&#xff0c;本专栏收藏了一些好看且实用的前端作品&#xff0c;使用简单的html、css语法打造创意有趣的作品&#xff0c;为网站加入更多高级创意的元素。 案例 文字聚光灯效果可以用于网站标题 html <!DOCTYPE html> <html lang"en&quo…...

从零开始搭建企业级前端项目模板(vue3+vite+ts)

文章目录 主要内容一、vite脚手架工具初始化项目二、项目代码加入eslint校验和自动格式化2.1安装对应依赖插件2.2 配置script脚本&#xff0c;项目安装eslint配置2.3 安装完成后&#xff0c;后面启动项目还缺少一些依赖&#xff0c;提前按需安装好 三&#xff0c;修改eslintrc.…...

ElasticSearch的DSL查询语法解析

Elasticsearch提供了基于ISON的DSL (Domain Specific Lanquage)来定义查询。 目录 一、常见查询类型 二、DSLQuery基本语法 三、全文检索查询 3.1 match查询&#xff1a;会对用户输入内容分词&#xff0c;常用于搜索框搜索 &#xff0c;语法&#xff1a; 3.2 multi match…...

Linux 常用基础命令(2024年最新篇)新手小白必看 初识Linux

CSDN 成就一亿技术人&#xff01; 2024年 借助这篇文章 重新整理Linux 基础常用命令 CSDN 成就一亿技术人&#xff01; 上命令 一 &#xff0c;Linux语法格式 学习命令要掌握命令的格式 command [options] [arguments] 命令 选项 参数 二&#xff0c;Linux基础…...

Golang中for和for range语句的使用技巧、对比及常见的避坑

前言 基础语法不再赘述&#xff0c;写这个原因是之前的某次面试被问道了&#xff0c;我知道会导致问题但具体答下来不是很通顺。再回想自己开发过程中&#xff0c;很多地方都是使用到了for/for range&#xff0c;但是却从没注意过一些细节&#xff0c;因此专门学习一下进行记录…...

Nestjs 微服务实战 - 动态微服务创建链接

所有的微服务都需要做服务治理 服务治理包括&#xff08;配置中心、服务发现、注册服务等等&#xff09;&#xff0c;常见的包括 Java 的 Nacos&#xff0c;这里不关注与服务治理&#xff0c;只说明&#xff0c;如何用 nest 网关&#xff0c;并且在网关层动态实现微服务注入 …...

K8S部署pod状态CreateContainerConfigError问题解决

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…...

江门网站如何制作/站群seo技巧

从“数据二十条”发布&#xff0c;到国家数据局成立&#xff0c;广大中国企业应该从中嗅到哪些重要信号&#xff1f;“数据二十条”与国家数据局关注数据领域的小伙伴估计都知道&#xff0c;我国近年来一直高度重视数字经济的发展&#xff0c;尤其是近期更是接连出台针对数据的…...

怎么买网站域名/网络营销渠道有哪几种

算法描述 K-means算法是一种被广泛使用的基于划分的聚类算法&#xff0c;目的是将n个对象会分成k个簇。算法的具体描述如下&#xff1a; 随机选取k个对象作为簇中心&#xff1b;Do计算所有对象到这k个簇中心的距离&#xff0c;将距离最近的归入相应的簇&#xff1b;重新计算每个…...

商业计划书模板/东莞seo网站优化排名

squidhttp://www.squid-cache.org/squid软件主要有两大应用:1,代理上网(正向代理&#xff0c;透明代理&#xff09;2,网站静态页面缓存加速&#xff08;反向代理)三种代理类型正向代理 代理内部主机上网,共享上网&#xff0c;缓存&#xff0c;控制内网用户上网行为等功能&#…...

如何做招聘网站运营/小红书推广价目表

GitLab简介及安装配置 一. GitLab简介 1. GitLab概述 GitLab 是一个基于Git实现的在线代码仓库托管系统,分为社区版(CE)和企业版(EE),它可以通过 Web 界面进行访问公开的或者私人项目.拥有与 Github 类似的功能,一般用于在企业、学校等内部网络搭建git私服,能够浏览源代码,管…...

自助建站 源码/天津seo关键词排名优化

关于network partition网络设备故障导致的网络分裂。比如&#xff0c;存在A\B\C\D\E五个节点&#xff0c;A\B处于同一子网&#xff0c;B\C\D处于另外一子网&#xff0c;中间通过交换机相连。若两个子网间的交换机故障了即发生了网络分区&#xff0c;A\B和C\D\E便不能通讯。某些…...

跨境电子商务网页制作与网站建设/网站关键词推广优化

文章目录常见的解决方案&#xff1a;常见问题1&#xff1a;常见问题2&#xff1a;问题描述:方案1:(本人平时遇到这问题的常规操作)方案2:方案3:方案4:方案5:方案6:脚本解决方案&#xff1a;原博客&#xff0c;点击这里IDEA中download源码失败的解决方法&#xff0c;亲测可行常见…...