Go基础之环境搭建
文章目录
- 1 Go
- 1.1 简介
- 1.1.1 定义
- 1.1.2 特点用途
- 1.2 环境配置
- 1.2.1 下载安装
- 1.2.2 环境配置
- 1.2.2.1 添加环境变量
- 1.2.2.2 各个环境变量理解
- 1.2.3 验证环境变量
- 1.3 包管理工具 Go Modules
- 1.3.1 开启使用
- 1.3.2 添加依赖包
- 1.3.3 配置国内包源
- 1.3.3.1 通过 go env 配置
- 1.3.3.2 修改环境变量
- 1.3.4 更新和管理依赖
- 1.3.5 没有域名时项目操作
- 1.3.6 go.mod
- 1.3.6.1 文件介绍
- 1.3.6.2 操作 go.mod 的常用命令
- 1.3.7 go.sum
- 1.3.7.1 文件介绍
- 1.3.7.2 管理 go.sum 文件
- 1.4 常用命令
- 1.4.1 Go Modules 常用命令
- 1.4.1.1 模块初始化
- 1.4.1.2 添加依赖
- 1.4.1.3 移除未使用的依赖
- 1.4.1.4 下载所有依赖
- 1.4.1.5 查看依赖列表
- 1.4.1.6 检查依赖更新
- 1.4.1.7 替换依赖
- 1.4.1.8 移除模块中的依赖
- 1.4.1.9 验证依赖
- 1.4.1.10 查看模块路径
- 1.4.2 开发中的常用命令
- 1.4.2.1 编译并运行项目
- 1.4.2.2 构建可执行文件
- 1.4.2.3 安装依赖工具
- 1.4.2.4 清理模块缓存
- 1.4.3 依赖调试与版本控制
- 1.4.3.1 强制使用特定版本
- 1.4.3.2 显示依赖关系
1 Go
1.1 简介
1.1.1 定义
Go语言,也被称为Golang,是一种由Google开发的静态类型、编译型编程语言,是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。
Go
是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson
主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。
官方网站:https://go.dev/
中文网站:https://studygolang.com/
1.1.2 特点用途
Go语言的特点:
- 编译型语言:
Go语言通过编译生成机器码,因此具有较高的运行效率,接近C语言的性能。 - 并发编程支持:
Go语言内置了轻量级的并发支持,通过goroutine和channel实现高效的并发编程。这使得Go语言非常适合开发高并发应用,如网络服务器、分布式系统等。 - 简洁的语法:
Go语言的语法简洁明了,易于学习和使用,降低了编程的复杂性。 - 自动垃圾回收:
Go语言具有自动垃圾回收机制,可以有效避免内存泄漏问题,减轻了开发者对内存管理的负担。 - 跨平台支持:
编译后的Go程序可以在不同操作系统上运行,如Windows、Linux、macOS等。 - 标准库丰富:
Go语言提供了丰富的标准库,包含了许多实用的工具和功能,如网络编程、文件操作、加密等,方便开发者快速构建软件系统。 - 工具链完善:
Go语言拥有一个完善的工具链,包括代码格式化工具(gofmt)、性能分析工具(go tool pprof)、测试工具(go test)等,这些工具有助于提高开发效率和代码质量。
Go语言的用途:
- 服务器端开发:
Go语言非常适合用于开发高性能的Web服务器和API服务。使用Go语言开发的Gin和Beego等框架,能够高效地处理HTTP请求。 - 云计算:
Go语言是云计算领域的重要编程语言。许多云服务、云应用程序都是用Go语言开发的。例如,Google的Kubernetes容器编排系统和Docker容器化平台都是用Go语言编写的。 - 大数据处理:
Go语言在处理大规模数据时表现出色。得益于其高效的并发支持,Go语言能够显著提升数据处理性能。 - 系统编程:
Go语言也可以用于开发操作系统、网络工具等系统软件。 - 网络编程:
Go语言提供了简洁而强大的网络编程库,使得开发网络应用程序变得简单和高效。 - 静态分析工具:
Go语言的简洁性和灵活性使其成为开发静态分析工具的理想选择。 - 命令行工具:
许多高效的命令行工具都是用Go语言编写的。 - 物联网开发:
Go语言具有运行效率高、并发编程支持强等特点,非常适合物联网开发。 - 区块链开发:
Go语言的安全性和高效性使其成为区块链开发的首选语言之一。以太坊、Hyperledger Fabric等知名区块链平台均使用Go语言作为核心开发语言。
1.2 环境配置
1.2.1 下载安装
访问国内Go语言网站:Go语言中文网
1.2.2 环境配置
1.2.2.1 添加环境变量
win+e打开,右击此电脑,选择属性,搜索查看高级系统设置,点击环境变量
添加变量:
- 设置
GOROOT
(安装路径):
点击系统变量
下的新建
。
名称:GOROOT
,值:C:\Program Files\Go(Go 的安装路径
) - 设置
GOPATH
(项目路径):
GOPATH 是Go 项目工作目录
新建一个目录,例如 D:\GoWorkspace。
在系统变量中添加:
名称:GOPATH
,值:D:\GoWorkspace。 - 添加
PATH
:
找到系统变量中的Path
,点击编辑
。
添加以下路径:
%GOROOT%\bin
(Go 的可执行文件路径
)。
%GOPATH%\bin
(GOPATH 的 bin 目录
)。
1.2.2.2 各个环境变量理解
GOROOT
作用
GOROOT
是Go
的安装路径,用于告诉Go
工具链(如go build
、go run
)Go 的核心库在哪里。
默认情况下,Go 的安装程序会自动检测其安装路径并设置好GOROOT
,因此 通常不需要手动添加GOROOT
环境变量。
那么就,是否需要在环境变量中手动添加?如果GOROOT
是Go
的默认路径(如C:\Program Files\Go
),且未修改过安装路径,无需手动添加 GOROOT。但是,如果 Go 安装到了非默认路径
,或者 Go 工具链出现了找不到标准库的问题,那么可以手动设置 GOROOT。GOPATH
作用
GOPATH
是 Go 项目的工作空间目录,用于存储源码、依赖包和生成的二进制文件。
它是Go 1.x
的工作机制(在Go Modules
之前非常重要),用来组织代码结构。GOPATH
必要性
如果使用的是Go Modules
(现代 Go 的推荐方式),GOPATH
的作用大大降低,但仍有以下场景需要:- 编译后的可执行文件会存放在 GOPATH/bin 中。
- 某些工具(如 go install)仍然默认依赖 GOPATH。
- 在不使用 Go Modules 的老项目中,GOPATH 是必需的。
- 为什么还要添加
GOPATH/bin
到PATH
当用go install
安装工具(如 golangci-lint、dlv)时,生成的可执行文件会存放到GOPATH/bin
下。
将GOPATH/bin
添加到Path
中,方便在全局运行这些工具。 - 是否需要添加
GOPATH
如果项目完全基于Go Modules
,可以不显式配置GOPATH
如果需要兼容老项目,或安装工具包,建议配置。 - 是否需要添加
GOPATH/bin
到PATH
必须添加,否则用go install
安装的工具无法直接在命令行中使用。
- 实际建议
根据现代 Go 的实践,以下是建议的简化配置:GOROOT
:不需要手动设置(如果使用默认安装路径)。GOPATH
:对于大多数现代项目(使用Go Modules
),只需设置一个工作目录(如 D:\GoWorkspace)作为GOPATH
。将GOPATH/bin
添加到系统 PATH,方便全局使用工具。
1.2.3 验证环境变量
打开新的命令行窗口,运行以下命令:
go env
确保输出的 GOROOT 和 GOPATH 正确。
1.3 包管理工具 Go Modules
1.3.1 开启使用
Go Modules
是 Go
语言推荐的依赖管理方式。
启用 Go Modules:
go env -w GO111MODULE=on
现在的新版本 Go(1.16
及更高版本)默认已经启用了 Go Modules
,因此在一般情况下,不需要手动设置 GO111MODULE
检查是否成功:
go env | findstr GO111MODULE
初始化项目, 在项目目录下运行:
go mod init <模块名称>
例如,创建一个模块名称为 example.com/mymodule 的项目:
go mod init example.com/mymodule
这会生成一个 go.mod 文件,内容类似如下:
module example.com/mymodulego 1.20
运行项目:
go run .
1.3.2 添加依赖包
当在代码中引入第三方包时(例如 github.com/gin-gonic/gin
),Go
会自动解析并下载依赖包。
例如,编写代码:
package mainimport ("github.com/gin-gonic/gin"
)func main() {r := gin.Default()r.GET("/", func(c *gin.Context) {c.JSON(200, gin.H{"message": "Hello, World!"})})r.Run()
}
运行:
go mod tidy
这会下载所需的依赖包并更新 go.mod 和 go.sum 文件。
go.mod
记录了直接依赖
,go.sum
记录了依赖的校验信息。
1.3.3 配置国内包源
由于网络原因,下载依赖包时可能会很慢,建议更换为国内包源。
1.3.3.1 通过 go env 配置
设置 Go Modules
使用国内代理:
go env -w GOPROXY=https://goproxy.cn,https://mirrors.aliyun.com,direct
验证配置:
go env | findstr GOPROXY
输出类似:
GOPROXY=https://goproxy.cn,https://mirrors.aliyun.com,direct
1.3.3.2 修改环境变量
如果不想每次都设置,可以直接在系统环境变量中添加 GOPROXY
打开环境变量设置,添加一个新变量:
- 名称:
GOPROXY
- 值:
https://goproxy.cn,https://mirrors.aliyun.com,direct
GOPROXY
可以配置多个代理地址,并用逗号(,
)分隔。Go
会按照顺序依次尝试这些代理,直到找到一个可用的
这里加 direct
表示如果在指定的代理服务器上找不到模块,Go
会直接尝试从模块源(如 Git 仓库)下载依赖。这是一种后备机制,确保即使代理不可用,依赖仍有机会通过源下载。
1.3.4 更新和管理依赖
- 下载和清理依赖:
go mod tidy
:这会添加缺失的依赖,并移除未使用的依赖。 - 查看依赖包:
go list -m all
: - 升级依赖:
go get -u <包名>
例如,升级 Gin:
go get -u github.com/gin-gonic/gin
- 指定依赖版本:
编辑go.mod
文件,直接指定版本:
require github.com/gin-gonic/gin v1.9.0
然后运行:go mod tidy
1.3.5 没有域名时项目操作
如果没有域名,又想避免将来迁移麻烦,可以使用以下方式:
本地开发时使用简单名称:
go mod init myproject
以后需要发布时再修改: 修改 go.mod
文件的 module
字段即可,比如:
module github.com/username/myproject
结合私有模块代理: 如果项目是私有的,可以使用 GOPRIVATE 指定私有模块地址:
go env -w GOPRIVATE=company.com
1.3.6 go.mod
1.3.6.1 文件介绍
go.mod
是 Go Modules
的核心文件,用来定义模块及其依赖项。
一个典型的 go.mod 文件可能包含以下内容:
module example.com/mymodulego 1.20require (github.com/gin-gonic/gin v1.9.0golang.org/x/net v0.5.0
)
各部分含义:
module
: 定义模块的名称(通常是项目的根路径)。模块名称决定了这个项目在其他地方引入时的路径。go
: 指定最低支持的 Go 版本。例如,go 1.20 表示此模块要求 Go 1.20 或更高版本。require
: 列出此模块的直接依赖包及其版本。replace
(可选): 用于替换依赖包的路径或版本,常用于本地开发或依赖修复。
replace github.com/example/foo => ../local/foo
exclude
(可选): 指定不允许使用的模块版本。
exclude github.com/example/foo v1.2.3
1.3.6.2 操作 go.mod 的常用命令
初始化模块:
go mod init <module-name>
添加依赖:
go get <package>@<version>
自动管理依赖(清理未使用的依赖,并自动添加缺失的依赖):
go mod tidy
1.3.7 go.sum
1.3.7.1 文件介绍
go.sum
是 go.mod
的配套文件,用于记录模块依赖的校验信息
,确保依赖的完整性
和一致性
。
作用:
完整性验证
: 在拉取依赖包时,Go 会校验包的实际内容是否与go.sum
文件中的哈希值一致,防止依赖被篡改。缓存优化
: 记录的校验值使得 Go 工具可以高效地在本地或远程缓存中找到匹配的依赖包。
一个典型的 go.sum 文件内容如下:
github.com/gin-gonic/gin v1.9.0 h1:4Fq34...
github.com/gin-gonic/gin v1.9.0/go.mod h1:kf4B...
golang.org/x/net v0.5.0 h1:3jHk...
golang.org/x/net v0.5.0/go.mod h1:Lsk4...
各部分含义:
- 每一行记录一个依赖包的校验信息。
- 每个依赖包有两类记录:
<模块名> <版本> <校验值>
:依赖包的完整内容校验值。<模块名> <版本>/go.mod <校验值>
:依赖包的go.mod
文件校验值。
1.3.7.2 管理 go.sum 文件
- 自动生成: 当运行
go mod tidy
或使用依赖时,go.sum
会自动更新。 - 不要手动修改:
go.sum
是由 Go 工具自动维护的,手动修改可能导致校验错误。
1.4 常用命令
1.4.1 Go Modules 常用命令
1.4.1.1 模块初始化
go mod init <module-name>
初始化一个新的模块。
会在当前目录下生成 go.mod
文件。
示例:
go mod init example.com/mymodule
1.4.1.2 添加依赖
go get <package>@<version>
下载指定的依赖包并更新 go.mod
和 go.sum
文件。
@<version>
可选,不指定时默认获取最新版本。
示例:
go get github.com/gin-gonic/gin@v1.9.0
如果省略版本:
go get github.com/gin-gonic/gin
会安装最新稳定版。
1.4.1.3 移除未使用的依赖
go mod tidy
自动清理未使用的依赖包,并下载缺失的依赖。
同时更新 go.mod
和 go.sum
文件。
1.4.1.4 下载所有依赖
go mod download
下载 go.mod
文件中列出的所有依赖包到本地模块缓存。
1.4.1.5 查看依赖列表
go list -m all
列出当前模块的所有依赖及其版本(包括直接和间接依赖)。
1.4.1.6 检查依赖更新
go list -u -m all
列出所有依赖,并显示可以更新的版本(如果有)。
1.4.1.7 替换依赖
在 go.mod
文件中添加 replace
指令,替换依赖的路径或版本。
replace github.com/example/foo => ../local/foo
替换为本地路径版本。
更新依赖后,运行:
go mod tidy
1.4.1.8 移除模块中的依赖
手动删除代码中不需要的依赖后运行:
go mod tidy
这会从 go.mod 中移除未使用的依赖。
1.4.1.9 验证依赖
go mod verify
验证所有依赖的校验值是否与 go.sum
文件一致,用于检查依赖包是否被篡改。
1.4.1.10 查看模块路径
go env GOMOD
输出当前模块的 go.mod
文件路径。如果没有使用 Go Modules
,输出为空。
1.4.2 开发中的常用命令
1.4.2.1 编译并运行项目
go run .
在当前模块中运行主程序文件。
1.4.2.2 构建可执行文件
go build
在当前目录下生成可执行文件。
使用 Go Modules
时,会自动管理依赖。
1.4.2.3 安装依赖工具
go install <package>
将指定的模块安装到 GOPATH/bin
或配置的 GOBIN
目录下,其的核心功能是 编译并安装 Go 工具或程序
,而不是直接管理依赖
。具体来说:将指定的模块或包编译成可执行文件,并安装到 GOBIN 或 GOPATH/bin 目录下
。
1.4.2.4 清理模块缓存
go clean -modcache
清理本地模块缓存(默认存储在 ~/.cache/go-build)。
1.4.3 依赖调试与版本控制
1.4.3.1 强制使用特定版本
go get <package>@v1.2.3
强制将依赖包的版本降级或升级到指定版本。
1.4.3.2 显示依赖关系
go mod graph
生成依赖关系的图形表示(文本形式)。
相关文章:
Go基础之环境搭建
文章目录 1 Go1.1 简介1.1.1 定义1.1.2 特点用途 1.2 环境配置1.2.1 下载安装1.2.2 环境配置1.2.2.1 添加环境变量1.2.2.2 各个环境变量理解 1.2.3 验证环境变量 1.3 包管理工具 Go Modules1.3.1 开启使用1.3.2 添加依赖包1.3.3 配置国内包源1.3.3.1 通过 go env 配置1.3.3.2 修…...
Flume的安装和使用
一、安装Flume 1. 下载flume-1.7.0 http://mirrors.shu.edu.cn/apache/flume/1.7.0/apache-flume-1.7.0-bin.tar.gz 2. 解压改名 tar xvf apache-flume-1.7.0-bin.tar.gz mv apache-flume-1.7.0-bin flume 二、配置Flume 1. 配置sh文件 cp conf/flume-env.sh.template …...
原生js封装ajax请求以及css实现提示效果和禁止点击效果
<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0,user-scalableno"><title>本地模式网络切换</title>&l…...
idea 的 springboot项目spring-boot-devtools 自动编译 配置热部署
1,设置一 2,设置二 设置二(旧版本) CtrlShiftAlt/ 点击弹出框中Registry... 引入(如果报错,换不同的版本) <dependency><groupId>org.springframework.boot</groupId><a…...
算法 class 005 (对数器C语言实现)
对数器的概念: 用来测试你的算法是否正确。 怎么做呢? 1:比如,写个冒泡排序,作为对比的对象 2:生成一个随机数 数组,用来测试 3:用冒泡排序和你想要验证的那个排序算法,同…...
靶场搭建问题(技巧)总结
目录 DVWA靶场问题 待续、更新中...... DVWA靶场 问题 错误信息 Parse error: syntax error, unexpected ‘[’, expecting ‘)’ in C:\Softwares\phpstudy\PHPTutorial\WWW\dvwa\dvwa\includes\dvwaPage.inc.php on line 52 原因 phpstudy2018所使用的php版本过低,…...
Elasticsearch DSL版
文章目录 1.索引库操作创建索引库:删除索引库:查询索引库:修改索引库:总结 2.文档操作创建文档:查询文档:删除文档:全量修改文档:增量修改文档:总结 3.DSL查询语法&#…...
在K8S中,Pod请求另一个Pod偶尔出现超市或延迟,如何排查?
在Kubernetes中,当Pod请求另一个Pod时偶尔出现超时或延迟,可能是由于多种原因造成的。以下是一些建立的排查步骤: 1. 检查网络配置和插件: 确认你的kubernetes集群使用了合适的网络插件(如Calico、Flannel等…...
Echarts实现大屏可视化2
目录 一、效果展示 二、说明 2.1 销售额统计图表 2.2 全国热榜模块 三、边框图片【border-image】 3.1 使用场景 3.2 边框图片切图原理 3.3 边框图片语法【重要】 四、代码展示 4.1 展示页面 4.2 数据概览区域 4.3 监控区域 4.4 点位分布统计区域 4.5 设备数据统…...
HarmonyOS NEXT 应用开发练习:智能视频推荐
一、整体思路 本DEMO展示了如何在HarmonyOS NEXT平台上开发一个智能视频推荐应用。应用通过模拟的用户偏好数据,为用户推荐可能感兴趣的视频。用户可以通过滑动屏幕查看推荐的视频列表,并点击视频封面进入播放页面,本例中仅模拟点击效果&…...
FPGA(二)组成结构基础内容
1. FPGA的基本结构 FPGA主要由以下部分组成: (1)可编程逻辑单元(CLB):CLB是FPGA中最基本的逻辑单元,由查找表(LUT)和触发器组成,可实现任意逻辑功能。查找表…...
linux中执行命令
1.1 命令格式 命令格式: 主命令 选项 参数(操作对象) 命令分为两类: 内置命令( builtin ):由 shell 程序自带的命令 外部命令:有独立的可执行程序文件,文件名即命令…...
《Java 数据结构》
《Java 数据结构》 1. 概述 Java 数据结构是计算机科学中的一种基础概念,它涉及到数据的组织和存储方式,以便能够高效地访问和修改数据。在 Java 中,数据结构通常通过类和接口来实现,这些类和接口提供了用于操作数据的各种方法。…...
C# 设计模式(结构型模式):装饰器模式
C# 设计模式(结构型模式):装饰器模式 在软件开发中,面对需要扩展功能但又不想修改已有代码的情况时,装饰模式(Decorator Pattern)是一个非常有用的设计模式。装饰模式允许我们在不改变对象自身…...
ubuntu初始配置
ubuntu初始配置 vm下ubuntu安装vmtools安装常用工具ubuntu终端美化安装ssh使用apt安装时出现错误解决办法 vm下ubuntu安装vmtools //安装vmtools sudo apt-get install open-vm-tools //桌面组件提供了更好的集成体验,包括拖放文件和共享剪贴板等功能 sudo apt-get…...
Spark Runtime Filter
Runtime Filter 参考链接: https://docs.google.com/document/d/16IEuyLeQlubQkH8YuVuXWKo2-grVIoDJqQpHZrE7q04/edit?tabt.0https://www.modb.pro/db/557718https://issues.apache.org/jira/browse/SPARK-32268https://github.com/apache/spark/pull/35789https…...
《Vue3实战教程》42:Vue3TypeScript 与组合式 API
如果您有疑问,请观看视频教程《Vue3实战教程》 TypeScript 与组合式 API 这一章假设你已经阅读了搭配 TypeScript 使用 Vue 的概览。 为组件的 props 标注类型 使用 <script setup> 当使用 <script setup> 时,defineProps() 宏函数支…...
【Hadoop】Hadoop安全之Knox网关
目录 一、概述 2.1 knox介绍 2.2 版本信息 二、部署 三、验证Knox网关 3.1 Hdfs RESTFULL 3.2 HDFSUI 3.3 YARNUI 3.4 HBASEUI 一、概述 2.1 knox介绍 Apache Knox网关是一个用于与Apache Hadoop部署的REST api和ui交互的应用程序网关。Knox网关为所有与Apache Hadoop…...
UML之关联
关联指两个类之间的各种联系。UML使用各种单实线表示关联,这个单实线可以是直线(垂直的、水平的或者倾斜的)、折线甚至曲线。 事实上,关联也是展示类的属性的另一外的一种形式。例如在下图中,我们通过一条实线连接类B…...
大数据面试笔试宝典之大数据运维面试
1.大数据集群节点规划 1.HDFS 集群节点规划 假如业务系统数据量每天增量 50T ,保留周期为 30 天,那么...
Matlab全局变量用法及其实例分析
⭕⭕ 目 录 ⭕⭕ 一、全局变量使用说明二、全局变量的用法实例演示2.1 实例演示2.2 修改global 一、全局变量使用说明 全局变量是指在不同的工作空间以及基本的工作空间中可以共享的变量。用户只需要在主程序或者任何子程序中声明一个或多个全局变量,则函数和主程序…...
leetcode hot 100 跳跃游戏
55. 跳跃游戏 已解答 中等 相关标签 相关企业 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标,如果可以,返回 true ;否则…...
CG顶会论文阅读|《科技论文写作》硕士课程报告
文章目录 一、基本信息1.1 论文基本信息1.2 课程基本信息1.3 博文基本信息 二、论文评述(中英双语)2.1 研究问题(Research Problem)2.2 创新点(Innovation/Contribution)2.3 优点(Why this pape…...
短视频矩阵系统搭建开发指导
在数字化营销的广阔天地中,抖音短视频已迅速崛起为一个拥有巨大影响力的社交媒体平台。随着其受众范围的日益扩大,采用有效的搜索引擎优化(SEO)策略以增强视频的曝光度和吸引流量变得至关重要。本文旨在阐述一种专为抖音短视频量身…...
LeetCode热题100-移动零【JavaScript讲解】
题目: 根据本题想思路: 快指针和慢指针同时移动,当遍历的值不为0的时候,将快指针的值赋给慢指针,如果遍历到0,快指针继续移动,慢指针不动等待被覆盖。之后使用fill方法填充0。具体答案放在最后…...
MarkDown 的 mermaid gantt(甘特图)、mermaid sequenceDiagram (流程图) 语法解析和应用
简简单单 Online zuozuo: 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo :本心、输入输出、结果 简简单单 Online zuozuo : 文章目录 MarkDown 的 mermaid gantt、mermaid sequenceDiagram 语法解析和应用前言mermaid gan…...
Flask 与 SocketIO 正确初始化及最佳实践调试
1、问题 我使用Flask和Flask-SocketIO 来做 Websocket 链接。前期正常使用,但是后期布置修改什么导致Websocket连接失败。排查需求,才发现初始化不正常导致。 SocketIO 和 Flask 应用的初始化顺序和引用循环的问题 2、环境 python-engineio4.11.1 py…...
Spring Boot 3 文件上传、多文件上传、大文件分片上传、文件流处理以及批量操作
在 Spring Boot 3 中,可以通过内置的文件处理机制结合 Java 的 IO 流与多线程技术,实现文件上传、多文件上传、大文件分片上传、文件流处理以及批量操作的需求。以下是详细实现步骤: 1. 单文件上传 控制器代码 import org.springframework…...
Springcloud项目-前后端联调(一)
项目采用SpringCloud整体构建,nacos作为注册中心,Mysql和Redis进行数据存储,整体项目类似于平时使用的出行APP,idea2023编写后端,vscode编写前端 后端代码先前已经编写完毕 这部分功能主要是通过前端输入出发地和目的地之后调用…...
树莓派之旅-第一天 系统的烧录和设置
自言自语: 在此记录一下树莓派的玩法。以后有钱了买点来玩啊草 系统的安装烧录 系统下载 树莓派官网:https://www.raspberrypi.com/ 首页点击SoftWare进入OS下载页面 这里是安装工具:安装工具负责将系统镜像安装到sd卡中 点击下载符合自己…...
SQL 中的 EXISTS
我们先从 SQL 中最基础的 WHERE 子句开始。 比如下面这条 SQL 语句: 很显然,在执行这条 SQL 语句的时候,DBMS 会扫描 Student 表中的每一条记录,然后把符合 Sdept IS 这个条件的所有记录筛选出来,并放到结果集里面去…...
WebSocket 的封装使用
import { ElMessage } from "element-plus";// 全局WebSocket实例 let ws null; let isConnected false; let currentWsUrl ; // 用于存储当前的wsUrl let baseURL ws://XXX.com:8081;const initWebSocket (wsUrl, sendData) > {return new Prom…...
[算法] [leetcode-509] 斐波那契数
509 斐波那契数 斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是: F(0) 0,F(1) 1 F(n) F(n - 1) F(n - 2),其中 n…...
解决CentOS 8 YUM源更新后报错问题:无法下载AppStream仓库元数据
背景介绍 在尝试更新CentOS 8的YUM源以使用阿里云镜像时,遇到了Failed to download metadata for repo appstream的错误。此错误通常出现在执行yum clean all && yum makecache命令之后,表明系统无法从指定的URL获取AppStream仓库的元数据。本文…...
HTML——49.header和footer标签
<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>header和footer标签</title></head><body><!--header和footer标签:是html5中新标签--><!--header:定义文档的页眉,通常用来定义可见…...
如何在 Spring Boot 中配置数据库?
在 Spring Boot 中配置数据库是一个相对简单的过程,通常涉及到以下几个步骤:添加数据库驱动依赖、配置数据源属性、以及可选的配置 JPA(如果使用)。下面是小编给大家编写的一个详细的指南,以MySQL 数据库为例。 文章目…...
Ant Design Pro搭建react项目
1、使用pro-cli 来快速的初始化脚手架,先全局安装 npm i ant-design/pro-cli -g pro create myapp 2、选择模板类型 pro 是基础模板,只提供了框架运行的基本内容,complete 包含所有区块,不太适合当基础模板来进行二次开发。&a…...
算法:切饼
对以下题目设计一个算法:切饼 假设:有一张很大很大的饼,给你一把足够长的刀。要求:每次在饼上切一刀。 问题:n刀,最多能切出多少块饼? n3 要解决这个问题,我们可以从数学归纳法的…...
LeetCode - 初级算法 数组(两个数组的交集 II)
两个数组的交集 II 这篇文章讨论如何求两个数组的交集,并返回结果中每个元素出现的次数与其在两个数组中都出现的次数一致。提供多个实现方法以满足不同场景需求。 免责声明:本文来源于个人知识与公开资料,仅用于学术交流。 描述 给定两个整数数组 nums1 和 nums2,以数…...
AWTK 在全志 tina linux 上支持 2D 图形加速
全志 tina linux 2D 图形加速插件。 开发环境为 全志 Tina Linux 虚拟机。 1. 准备 下载 awtk git clone https://github.com/zlgopen/awtk.git下载 awtk-linux-fb git clone https://github.com/zlgopen/awtk-linux-fb.git下载 awtk-tina-g2d git clone https://github.co…...
git 中 工作目录 和 暂存区 的区别理解
比喻解释 可以把工作目录和暂存区想象成两个篮子: 工作目录是你把所有东西(文件和更改)扔进去的地方。你正在修改的东西都放在这里。暂存区则是你整理好的东西放进第二个篮子,准备提交给老板(提交到仓库)…...
【Java回顾】Day3 继承|Override/Ovverload|多态|抽象类|封装|接口|枚举
学习资料 菜鸟教程 https://www.runoob.com/java/java-interfaces.html 继承|Override/Ovverload|多态|抽象类|封装|接口|枚举 继承 创建分等级层次的类,子类继承父类的特征、行为、方法 class 父类{ } class 子类 extends 父类{ super(); }一些性质 Java 不支持…...
redux react-redux @reduxjs/toolkit
redux团队先后推出了redux、react-redux、reduxjs/toolkit,这三个库的api各有不同。本篇文章就来梳理一下当我们需要在项目中集成redux,从直接使用redux,到使用react-redux,再到react-redux和reduxjs/toolkit配合使用,…...
javascript变量
变量 命名规范 以 字母、数字、下划线、美元符号 $ 组成、不能以 数字开头、且不能使用 js 中的关键字。 命名规范推荐采用小驼峰 命名法 。类名 采用 大驼峰命名。 var 声明变量的特点 在 script 上下文中定义的是 全局变量,全局变量会自动称为 window的属性。 在…...
第3章 总线
总线的定义 为多个部件 分时共享 公共信息传送线路。 系统之间、模块之间、芯片内部用来传递信息信号线集合。 共享 总线上可连接多个部件 各部件间相互交换信息 都可通过总线来。 分时 同一时刻 总线上只能传 一个部件信息。 采用标准总线的优点 简化系统软硬件设计 从硬件角度…...
df.replace({‘b‘: r‘\s*(\.)\s*‘}, {‘b‘: r‘\1ty‘}, regex=True)
这段代码 df.replace({b: r\s*(\.)\s*}, {b: r\1ty}, regexTrue) 用于在 DataFrame 中进行替换操作,具体来说是针对 b 列,匹配并替换符合正则表达式的值。 详细解析: df.replace():这是 Pandas 中的 replace() 方法,用…...
UE5通过蓝图节点控制材质参数
通过蓝图节点控制材质的参数 蓝图节点 在材质上设置标量值 和 在材质上设置向量参数值 Set Scalar Parameter Value on Materials Set Vector Parameter Value on Materials 这两个蓝图节点都可以在蓝图中,控制材质的参数值和向量值...
C# 设计模式(创建型模式):建造者模式
C# 设计模式(创建型模式):建造者模式 引言 在软件开发中,创建型设计模式主要关注对象的创建方式,其中建造者模式(Builder Pattern)是非常重要的一种。建造者模式通过一步一步构建一个复杂对象…...
LINUX下载编译gtk
下载 选择自己合适的版本 GNOME / gtk GitLab 下载meson GNOME / gtk GitLab 编译 BUILD_DIRbuilddir INSTALL_DIR${HOME}/gtk-resultMESON_PATHpwd/meson-1.6.1/meson.py${MESON_PATH} setup \--prefix ${INSTALL_DIR} \${BUILD_DIR}cd builddir${MESON_PATH} compile…...
linux上使用cmake编译的方法
一、hello 例程仅基于一个cpp文件 C文件或工程进行编译时可以使用g指令(需要对每一个程序和源文件分别使用g指令编译),当程序变大时,一个工程文件往往会包含很文件夹和源文件,这时我们需要的编译指令将越来越长&#…...