Go基础之环境搭建

news2025/1/17 6:31:03
文章目录
  • 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 FilesGo(Go 的安装路径
  • 设置 GOPATH(项目路径):
    GOPATH 是 Go 项目工作目录
    新建一个目录,例如 D:GoWorkspace。
    在系统变量中添加:
    名称:GOPATH,值:D:GoWorkspace。
  • 添加 PATH
    找到系统变量中的 Path,点击编辑
    添加以下路径:
    %GOROOT%inGo 的可执行文件路径)。
    %GOPATH%inGOPATH 的 bin 目录)。
1.2.2.2 各个环境变量理解
  • GOROOT 作用
    GOROOTGo 的安装路径,用于告诉 Go 工具链(如 go buildgo run)Go 的核心库在哪里。
    默认情况下,Go 的安装程序会自动检测其安装路径并设置好 GOROOT,因此 通常不需要手动添加 GOROOT 环境变量。
    那么就,是否需要在环境变量中手动添加?如果GOROOTGo 的默认路径(如 C:Program FilesGo),且未修改过安装路径,无需手动添加 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/binPATH
      当用 go install 安装工具(如 golangci-lint、dlv)时,生成的可执行文件会存放到 GOPATH/bin 下。
      GOPATH/bin 添加到 Path 中,方便在全局运行这些工具。
    • 是否需要添加 GOPATH
      如果项目完全基于 Go Modules,可以不显式配置 GOPATH
      如果需要兼容老项目,或安装工具包,建议配置。
    • 是否需要添加 GOPATH/binPATH
      必须添加,否则用 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 ModulesGo 语言推荐的依赖管理方式。
启用 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/mymodule

go 1.20

运行项目:

go run .
1.3.2 添加依赖包

当在代码中引入第三方包时(例如 github.com/gin-gonic/gin),Go 会自动解析并下载依赖包。

例如,编写代码:

package main

import (
    "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.modGo Modules 的核心文件,用来定义模块及其依赖项。
一个典型的 go.mod 文件可能包含以下内容:

module example.com/mymodule

go 1.20

require (
    github.com/gin-gonic/gin v1.9.0
    golang.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.sumgo.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.modgo.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.modgo.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

生成依赖关系的图形表示(文本形式)。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Go Ebiten小游戏开发:贪吃蛇

贪吃蛇是一款经典的小游戏&#xff0c;玩法简单却充满乐趣。本文将介绍如何使用 Go 语言和 Ebiten 游戏引擎开发一个简单的贪吃蛇游戏。通过这个项目&#xff0c;你可以学习到游戏开发的基本流程、Ebiten 的使用方法以及如何用 Go 实现游戏逻辑。 项目简介 贪吃蛇的核心玩法是…

如何优化Elasticsearch大文档查询?

记录一次业务复杂场景下DSL优化的过程 背景 B端商城业务有一个场景就是客户可见的产品列表是需要N多闸口及各种其它逻辑组合过滤的&#xff0c;各种闸口数据及产品数据都是存储在ES的(有的是独立索引&#xff0c;有的是作为产品属性存储在产品文档上)。 在实际使用的过程中&a…

在VS2022中用C++连接MySQL数据库读取数据库乱码问题

1.正确安装mysql 安装之后的配置文件 2.在VS2022中进行相关配置 &#xff08;1&#xff09;右键项目&#xff0c;打开属性 注意是右键项目&#xff0c;不是.cpp文件 &#xff08;2&#xff09;配置属性-> VC目录 -> 包含目录 ->添加头文件路径&#xff08;如图&am…

如何在linux系统上完成定时开机和更新github端口的任务

任务背景 1.即使打开代理&#xff0c;有的时候github去clone比较大的文件时也会出问题。这时需要每小时更新一次github的host端口&#xff1b; 2.马上要放假&#xff0c;想远程登录在学校的台式电脑&#xff0c;但学校内网又不太好穿透。退而求其次&#xff0c;选择定时启动电…

基于Java的语音陪聊软件——支持聊天私聊-礼物系统-直播系统-缘分匹配-游戏陪玩

丰富的经验、成熟的技术&#xff0c;打造适合当下市场发展的语音交友软件源码。Java 语言凭借其独特的优势&#xff0c;为这款语音陪聊软件的稳健运行和持续发展奠定了坚实基础。它不仅融合了聊天私聊、礼物系统和直播系统等实用且有趣的功能&#xff0c;还创新性地引入了缘分匹…

RV1126+FFMPEG推流项目(7)AI音频模块编码流程

一、AI 模块和外设麦克风的关系 AI 模块是 RV1126 芯片的一个重要组成部分。它的主要功能是将外部接入的麦克风采集到的模拟信号通过内置的驱动程序转换为数字信号。这意味着麦克风作为外设&#xff0c;提供音频输入信号&#xff0c;AI 模块通过其硬件和软件的结合&#xff0c…

计算机网络 (37)TCP的流量控制

前言 计算机网络中的TCP&#xff08;传输控制协议&#xff09;流量控制是一种重要机制&#xff0c;用于确保数据在发送方和接收方之间的传输既高效又稳定。 一、目的 TCP流量控制的主要目的是防止发送方发送数据过快&#xff0c;导致接收方无法及时处理&#xff0c;从而引起数据…

Python 实现 NLP 的完整流程

&#x1f496; 欢迎来到我的博客&#xff01; 非常高兴能在这里与您相遇。在这里&#xff0c;您不仅能获得有趣的技术分享&#xff0c;还能感受到轻松愉快的氛围。无论您是编程新手&#xff0c;还是资深开发者&#xff0c;都能在这里找到属于您的知识宝藏&#xff0c;学习和成长…

AIGC时代:如何快速搞定Spring Boot+Vue全栈开发

文章目录 一、Spring Boot基础二、Vue.js基础三、Spring Boot与Vue.js集成四、性能优化与最佳实践《快速搞定Spring BootVue全栈开发》 内容简介作者简介目录前言/序言本书内容本书特点读者对象 随着人工智能生成内容&#xff08;AIGC&#xff09;技术的迅速发展&#xff0c;…

【ArcGIS初学】产生随机点计算混淆矩阵

混淆矩阵&#xff1a;用于比较分类结果和地表真实信息 总体精度(overall accuracy) :指对角线上所有样本的像元数(正确分类的像元数)除以所有像元数。 生产者精度(producers accuracy) &#xff1a;某类中正确分类的像元数除以参考数据中该类的像元数(列方向)&#xff0c;又称…

《探秘火焰目标检测开源模型:智能防火的科技利刃》

一、引言 火灾&#xff0c;如同隐藏在暗处的恶魔&#xff0c;时刻威胁着人们的生命财产安全与社会的稳定发展。无论是澳大利亚那场肆虐数月、烧毁约1860万公顷土地、造成近30亿只动物死亡或流离失所的森林大火&#xff0c;还是美国加州频繁爆发、迫使大量居民撤离家园、带来巨额…

计算机网络 (46)简单网络管理协议SNMP

前言 简单网络管理协议&#xff08;SNMP&#xff0c;Simple Network Management Protocol&#xff09;是一种用于在计算机网络中管理网络节点的标准协议。 一、概述 SNMP是基于TCP/IP五层协议中的应用层协议&#xff0c;它使网络管理员能够管理网络效能&#xff0c;发现并解决网…

Java并发03 - 无锁三大将

无锁三大将&#xff1a;CAS & Unsafe & Atomic 文章目录 无锁三大将&#xff1a;CAS & Unsafe & Atomic一&#xff1a;CAS机制二&#xff1a;Unsafe魔法指针类2.1&#xff1a;内存管理2.2&#xff1a;对象创建实例2.3&#xff1a;类&#xff0c;实例对象以及变…

JVM远程调试原理剖析

一、如何开启JVM远程调试 当一个 Java 应用启动时&#xff0c;JVM 会根据启动参数配置其运行环境。使用 -agentlib:jdwp 参数启动远程调试功能&#xff0c;JVM 会初始化调试代理。 agentlib:jdwptransportdt_socket,servery,suspendn,address*:5005 -jar your_application.jar…

01、flink的原理和安装部署

flink中主要有两个进程&#xff0c;分别是JobMManager和TaskManager&#xff0c;当然了根据flink的部署和运行环境不同&#xff0c;会有一些不同&#xff0c;但是主要的功能是类似的&#xff0c;下面我会讲下聊下&#xff0c;公司用的多的部署方式&#xff0c;基于yarn集群的部…

浅谈云计算19 | OpenStack管理模块 (上)

OpenStack管理模块&#xff08;上&#xff09; 一、操作界面管理架构二、认证管理2.1 定义与作用2.2 认证原理与流程2.2.1 认证机制原理2.2.2 用户认证流程 三、镜像管理3.1 定义与功能3.2 镜像服务架构3.3 工作原理与流程3.3.1 镜像存储原理3.3.2 镜像检索流程 四、计算管理4.…

WXML模版语法-事件绑定

知识点1&#xff1a;什么是事件 事件是渲染层到逻辑层的通讯方式。通过事件可以将用户在渲染层产生的行为&#xff0c;反馈到逻辑层进行业务的处理。 知识点2&#xff1a;小程序中常用的事件 类型绑定方式事件描述tapbindtap或bind:tap手指触摸后马上离开&#xff0c;类似于…

深入解析 `EmailConfig` 配置项

EmailConfig 是 Alertmanager 配置中的一个重要部分&#xff0c;用于配置通过电子邮件发送告警通知。它提供了多种设置选项&#xff0c;以便用户可以灵活配置邮件服务器、认证方式、邮件内容等。 以下是 EmailConfig 配置项的详细分析&#xff0c;帮助你更好地理解其功能&…

Wine 开发系列 —— 如何调试 Wine

本文主要以 Wine 官网的这篇文章 《 Debugging Wine 》 来讲解。大部分内容是对该文的翻译&#xff0c;修正了原文的一些书写错误&#xff0c;删除了原文跟最新的 Wine 不适应的内容。 介绍 常用调试方法 Wine 为调试问题提供了多种方法。大多数 Wine 开发人员更喜欢使用 Win…

【精选】基于EfficientViT优化YOLOv8的智能车辆识别系统设计 车辆颜色分类与车牌检测、深度学习目标检测系统开发

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…