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

Go语言加Vue3零基础入门全栈班11 Go语言+gorm用户管理系统实战 2024年08月03日 课程笔记

概述

如果您没有Golang的基础,应该学习如下前置课程。

  • Golang零基础入门
  • Golang面向对象编程
  • Go Web 基础
  • Go语言开发REST API接口_20240728
  • Go语言操作MySQL开发用户管理系统API教程_20240729
  • Redis零基础快速入门_20231227
  • Go+Redis开发用户管理系统API实战_20240730
  • MongoDB快速入门_20240411
  • Go语言+MongoDB用户管理系统实战_20240730
  • Go语言+gRPC用户微服务项目实战_20240730

基础不好的同学每节课的代码最好配合视频进行阅读和学习,如果基础比较扎实,则阅读本教程巩固一下相关知识点即可,遇到不会的知识点再看视频。

课程特色

本教程录制于2024年8月3日,使用Go1.22版本,基于Goland2024进行开发,采用的技术栈比较新。

每节课控制在十分钟以内,课时精简,每节课都是一个独立的知识点,如果有遗忘,完全可以当做字典来查询,绝不浪费大家的时间。

整个课程从如何连接MySQL讲起,讲解gorm的增删改查常见操作,然后结合REST API接口开发的知识,开发一个用户管理系统的后端API服务,层层递进,学习路径平缓。

Golang是当前国内越来越多的企业正在全面转的一门系统级别的高性能的编程语言,比C语言写法更加的简单,比Python性能更加的好,是新时代的C语言,建议每个程序员都掌握!

视频课程

最近发现越来越多的公司在用Golang了,所以精心整理了一套视频教程给大家,这个是其中的第11部,后续还会有很多。

视频已经录制完成,完整目录截图如下:
在这里插入图片描述

本套课程的特色是每节课都是一个核心知识点,每个视频控制在十分钟左右,精简不废话,拒绝浪费大家的时间。

课程目录

  • 01 概述
  • 02 连接MySQL数据库
  • 03 创建表
  • 04 新增数据
  • 05 查询数据
  • 06 修改数据
  • 07 删除数据
  • 08 zdpgo_gorm的介绍和使用
  • 09 事务的使用
  • 10 搭建项目的基本结构
  • 11 封装和使用初始化和关闭MySQL的方法
  • 12 创建和启动服务
  • 13 实现新增用户的接口并进行测试
  • 14 实现查询所有用户的接口并进行测试
  • 15 实现根据ID查询用户的接口并进行测试
  • 16 实现根据ID修改用户的接口并进行测试
  • 17 实现根据ID删除用户的接口并进行测试
  • 18 总结

完整代码

02 连接MySQL数据库

package mainimport ("github.com/jinzhu/gorm"_ "github.com/jinzhu/gorm/dialects/mysql"
)func main() {db, err := gorm.Open("mysql","root:root@tcp(127.0.0.1:3306)/test?charset=utf8&parseTime=True&loc=Local",)if err != nil {panic(err)}defer db.Close()db.DB().SetMaxIdleConns(10)db.DB().SetMaxOpenConns(100)
}

03 创建表

package mainimport ("github.com/jinzhu/gorm"_ "github.com/jinzhu/gorm/dialects/mysql"
)type User struct {Id   int    `json:"id"`Name string `json:"name"`Age  int    `json:"age"`
}func main() {db, err := gorm.Open("mysql","root:root@tcp(127.0.0.1:3306)/test?charset=utf8&parseTime=True&loc=Local",)if err != nil {panic(err)}defer db.Close()db.DB().SetMaxIdleConns(10)db.DB().SetMaxOpenConns(100)db.AutoMigrate(&User{})
}

04 新增数据

package mainimport ("github.com/jinzhu/gorm"_ "github.com/jinzhu/gorm/dialects/mysql"
)type User struct {Id   int    `json:"id"`Name string `json:"name"`Age  int    `json:"age"`
}func main() {db, err := gorm.Open("mysql","root:root@tcp(127.0.0.1:3306)/test?charset=utf8&parseTime=True&loc=Local",)if err != nil {panic(err)}defer db.Close()db.DB().SetMaxIdleConns(10)db.DB().SetMaxOpenConns(100)db.AutoMigrate(&User{})user := User{11, "张三", 33}db.Create(&user)
}

05 查询数据

package mainimport ("fmt""github.com/jinzhu/gorm"_ "github.com/jinzhu/gorm/dialects/mysql"
)type User struct {Id   int    `json:"id"`Name string `json:"name"`Age  int    `json:"age"`
}func main() {db, err := gorm.Open("mysql","root:root@tcp(127.0.0.1:3306)/test?charset=utf8&parseTime=True&loc=Local",)if err != nil {panic(err)}defer db.Close()db.DB().SetMaxIdleConns(10)db.DB().SetMaxOpenConns(100)db.AutoMigrate(&User{})var users []Userdb.Find(&users)fmt.Println(users)
}

06 修改数据

package mainimport ("fmt""github.com/jinzhu/gorm"_ "github.com/jinzhu/gorm/dialects/mysql"
)type User struct {Id   int    `json:"id"`Name string `json:"name"`Age  int    `json:"age"`
}func main() {db, err := gorm.Open("mysql","root:root@tcp(127.0.0.1:3306)/test?charset=utf8&parseTime=True&loc=Local",)if err != nil {panic(err)}defer db.Close()db.DB().SetMaxIdleConns(10)db.DB().SetMaxOpenConns(100)db.AutoMigrate(&User{})db.Model(&User{Id: 11}).Update("name", "李四333")var users []Userdb.Find(&users)fmt.Println(users)
}

07 删除数据

package mainimport ("fmt""github.com/jinzhu/gorm"_ "github.com/jinzhu/gorm/dialects/mysql"
)type User struct {Id   int    `json:"id"`Name string `json:"name"`Age  int    `json:"age"`
}func main() {db, err := gorm.Open("mysql","root:root@tcp(127.0.0.1:3306)/test?charset=utf8&parseTime=True&loc=Local",)if err != nil {panic(err)}defer db.Close()db.DB().SetMaxIdleConns(10)db.DB().SetMaxOpenConns(100)db.AutoMigrate(&User{})db.Delete(&User{Id: 11})var users []Userdb.Find(&users)fmt.Println(users)
}

08 zdpgo_gorm的介绍和使用

package mainimport ("fmt""github.com/zhangdapeng520/zdpgo_gorm"_ "github.com/zhangdapeng520/zdpgo_mysql"
)type User struct {Id   int    `json:"id"`Name string `json:"name"`Age  int    `json:"age"`
}func main() {db, err := zdpgo_gorm.Open("mysql","root:root@tcp(127.0.0.1:3306)/test?charset=utf8&parseTime=True&loc=Local",)if err != nil {panic(err)}defer db.Close()db.DB().SetMaxIdleConns(10)db.DB().SetMaxOpenConns(100)db.AutoMigrate(&User{})var users []Userdb.Find(&users)fmt.Println(users)
}

09 事务的使用

package mainimport ("fmt""github.com/zhangdapeng520/zdpgo_gorm"_ "github.com/zhangdapeng520/zdpgo_mysql"
)type User struct {Id   int    `json:"id"`Name string `json:"name"`Age  int    `json:"age"`
}func main() {db, err := zdpgo_gorm.Open("mysql","root:root@tcp(127.0.0.1:3306)/test?charset=utf8&parseTime=True&loc=Local",)if err != nil {panic(err)}defer db.Close()db.DB().SetMaxIdleConns(10)db.DB().SetMaxOpenConns(100)db.AutoMigrate(&User{})tx := db.Begin()u := User{Name: "赵六", Age: 18}err = tx.Create(&u).Errorif err != nil {tx.Rollback()panic(err)}tx.Commit()var users []Userdb.Find(&users)fmt.Println(users)
}

11 封装和使用初始化和关闭MySQL的方法

package gimport ("github.com/zhangdapeng520/zdpgo_gorm"_ "github.com/zhangdapeng520/zdpgo_mysql""gorm_api_user2/model"
)var GDB *zdpgo_gorm.DBfunc initMySQL() {var err errorGDB, err = zdpgo_gorm.Open("mysql","root:root@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True&loc=Local",)if err != nil {panic(err)}GDB.DB().SetMaxIdleConns(10)GDB.DB().SetMaxOpenConns(100)GDB.AutoMigrate(&model.User{})
}func closeMySQL() {GDB.Close()
}

12 创建和启动服务

package routerimport "github.com/zhangdapeng520/zdpgo_httprouter"func InitRouter() *zdpgo_httprouter.Router {router := zdpgo_httprouter.New()router.POST("/user", userAdd)router.GET("/user", userGetAll)router.GET("/user/:id", userGet)router.PUT("/user/:id", userUpdate)router.DELETE("/user/:id", userDelete)return router
}
package mainimport ("gorm_api_user2/g""gorm_api_user2/router""net/http""time"
)func main() {g.InitGlobal()defer g.CloseGlobal()server := &http.Server{Addr:         ":8888",Handler:      router.InitRouter(),ReadTimeout:  5 * time.Second,WriteTimeout: 5 * time.Second,}server.ListenAndServe()
}

13 实现新增用户的接口并进行测试

package routerimport ("github.com/zhangdapeng520/zdpgo_httprouter""gorm_api_user2/g""gorm_api_user2/model""net/http"
)func userAdd(w http.ResponseWriter, r *http.Request, _ zdpgo_httprouter.Params) {var user model.Userzdpgo_httprouter.GetJson(r, &user)g.GDB.Create(&user)zdpgo_httprouter.ResponseSuccess(w, user)
}
package routerimport ("github.com/zhangdapeng520/zdpgo_httprouter""io""os""testing"
)func TestUserAdd(t *testing.T) {targetUrl := "http://127.0.0.1:8888/user"data := map[string]interface{}{"name": "王五","age":  30,}resp, err := zdpgo_httprouter.SendJson("POST", targetUrl, data)if err != nil {t.Error(err)}io.Copy(os.Stdout, resp.Body)
}

14 实现查询所有用户的接口并进行测试

package routerimport ("github.com/zhangdapeng520/zdpgo_httprouter""gorm_api_user2/g""gorm_api_user2/model""net/http""strconv"
)func userGetAll(w http.ResponseWriter, r *http.Request, _ zdpgo_httprouter.Params) {var users []model.Userg.GDB.Find(&users)zdpgo_httprouter.ResponseSuccess(w, users)
}func userGet(w http.ResponseWriter, r *http.Request, ps zdpgo_httprouter.Params) {idStr := ps.ByName("id")id, _ := strconv.Atoi(idStr)var user model.Userg.GDB.Find(&user, "id=?", id)zdpgo_httprouter.ResponseSuccess(w, user)
}
package routerimport ("io""net/http""os""testing"
)func TestUserGetAll(t *testing.T) {targetUrl := "http://127.0.0.1:8888/user"resp, err := http.Get(targetUrl)if err != nil {t.Error(err)}io.Copy(os.Stdout, resp.Body)
}func TestUserGet(t *testing.T) {targetUrl := "http://127.0.0.1:8888/user/4"resp, err := http.Get(targetUrl)if err != nil {t.Error(err)}io.Copy(os.Stdout, resp.Body)
}

16 实现根据ID修改用户的接口并进行测试

package routerimport ("github.com/zhangdapeng520/zdpgo_httprouter""gorm_api_user2/g""gorm_api_user2/model""net/http""strconv"
)func userUpdate(w http.ResponseWriter, r *http.Request, ps zdpgo_httprouter.Params) {idStr := ps.ByName("id")id, _ := strconv.Atoi(idStr)var user model.Userzdpgo_httprouter.GetJson(r, &user)g.GDB.Model(model.User{Id: id}).Update("name", user.Name, "age", user.Age)zdpgo_httprouter.ResponseSuccess(w, nil)
}
package routerimport ("github.com/zhangdapeng520/zdpgo_httprouter""io""os""testing"
)func TestUserUpdate(t *testing.T) {targetUrl := "http://127.0.0.1:8888/user/4"data := map[string]interface{}{"name": "李四333","age":  30,}resp, err := zdpgo_httprouter.SendJson("PUT", targetUrl, data)if err != nil {t.Error(err)}io.Copy(os.Stdout, resp.Body)
}

17 实现根据ID删除用户的接口并进行测试

package routerimport ("github.com/zhangdapeng520/zdpgo_httprouter""gorm_api_user2/g""gorm_api_user2/model""net/http""strconv"
)func userDelete(w http.ResponseWriter, r *http.Request, ps zdpgo_httprouter.Params) {idStr := ps.ByName("id")id, _ := strconv.Atoi(idStr)g.GDB.Delete(&model.User{Id: id})zdpgo_httprouter.ResponseSuccess(w, nil)
}
package routerimport ("github.com/zhangdapeng520/zdpgo_httprouter""io""os""testing"
)func TestUserDelete(t *testing.T) {targetUrl := "http://127.0.0.1:8888/user/4"data := map[string]interface{}{}resp, err := zdpgo_httprouter.SendJson("DELETE", targetUrl, data)if err != nil {t.Error(err)}io.Copy(os.Stdout, resp.Body)
}

总结

整个课程从如何连接MySQL讲起,讲解gorm的增删改查常见操作,然后结合REST API接口开发的知识,开发一个用户管理系统的后端API服务,层层递进,学习路径平缓。

通过本套课程,能帮你入门Go语言加gorm框架开发后端REST API接口服务的技术。

如果您需要完整的源码,打赏20元即可。

人生苦短,我用PyGo,我是您身边的Python私教~

相关文章:

Go语言加Vue3零基础入门全栈班11 Go语言+gorm用户管理系统实战 2024年08月03日 课程笔记

概述 如果您没有Golang的基础,应该学习如下前置课程。 Golang零基础入门Golang面向对象编程Go Web 基础Go语言开发REST API接口_20240728Go语言操作MySQL开发用户管理系统API教程_20240729Redis零基础快速入门_20231227GoRedis开发用户管理系统API实战_20240730Mo…...

【设计模式】代理模式详解

1.简介 代理模式是常用的Java设计模式,该模式的特点是代理类与委托类共享相同的接口。代理类主要负责预处理消息、过滤消息、将消息转发给委托类,并在事后处理消息等。代理类与委托类之间通常存在关联关系,一个代理类对象与一个委托类对象关…...

Python变量和简单的数据类型

1、变量 massageHello python world! print(massage) massageHello world print(massage) 运行这个代码发现,同一个变量出现两个不同的结果 Hello python world! Hello world 在程序中,可随时修改变量的值&…...

切比雪夫距离

切比雪夫距离(Chebyshev Distance),又称棋盘距离或最大值距离,是一种用于测量两个点之间距离的度量方法。在二维平面上,切比雪夫距离定义为两个点之间的最大坐标差值。其公式如下: DChebyshevmax⁡(∣x2−…...

计算机基础(Windows 10+Office 2016)教程 —— 第4章 计算机网络与Internet(下)

第4章 计算机网络与Internet 4.4 局域网4.4.1 局域网概述4.4.2 以太网4.4.3 令牌环网4.4.4 无线局域网 4.5 Internet4.5.1 Internet 概述4.5.2 Internet 的基本概念4.5.3 Internet 的接入4.5.4 万维网 4.6 Internet的应用4.6.1 电子邮件4.6.2 文件传输4.6.3 搜索引擎 4.4 局域网…...

机器学习用Python还是R?哪个更好一些?

选择使用Python还是R来进行机器学习取决于多个因素,包括个人偏好、项目需求以及可用的资源。这里我可以简要比较一下它们的优缺点: Python的优势: 通用性和灵活性: Python是一种通用编程语言,可以用于多种用途&#…...

4个自定义倒计时

<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><title>4个自定义倒计时</title><style>* {margin: 0;padding: 0;box-sizing: border-box;user-select: none;body {background: #0b1b2c;}}hea…...

linux系统编程中Shell脚本配置,及linux脚本中的man test

Shell脚本配置是指在脚本中设置各种参数、选项和环境&#xff0c;以确保脚本能够根据预期的需求和环境执行。配置可以包括变量设置、环境变量、命令选项和错误处理等。 1. 脚本开头的配置 Shebang 第一行通常是shebang&#xff0c;它告诉系统使用哪个解释器来执行脚本。例如…...

Win7虚拟机分享(已安装VMware Tools)

前言 之前写过VMware安装Win7并安装VMware tools的博客&#xff0c;但操作仍显繁琐。后来发现可以直接分享已经配置好的虚拟机&#xff0c;所有软件都是安装好的&#xff0c;解压即用。 一. VMware Win7虚拟机配置 已完成的配置和安装的软件 专业版Win7系统(已永久激活)VMware…...

CANOpen EMCY紧急报文介绍

什么是CANOpen紧急报文 CANOpen中的Emcy紧急报文用于当设备出现故障或警告时&#xff0c;向其它节点报告故障或警告使用的。如设备某个设备出现过压或过流时&#xff0c;就可以发送紧急报文。 紧急报文的格式 错误代码&#xff1a;是0x1003索引预定义错误字段的内容&#xff…...

JAVA项目

目录 一、前言 二、技术介绍 三、项目实现流程 四、论文流程参考 五、核心代码截图 专注于大学生实战开发、讲解和毕业答疑等辅导&#xff0c;获取源码后台 一、前言 在数字化音乐时代&#xff0c;个性化推荐已成为提升用户体验、促进音乐消费的重要手段。为此&#xff0…...

️ LangChain +Streamlit+ Llama :将对话式人工智能引入您的本地设备(下篇)

引言&#xff1a;种下一棵树最好的时间是十年前,其次是现在 书接上回&#xff1a;将对话式人工智能引入您的本地设备成为可能CSDNhttps://mp.csdn.net/mp_blog/creation/editor/140865426 目的&#xff1a;在这个大模型横行的时候&#xff0c;我们常用电脑如何开展大模型的工作…...

Kafka实战(Scala操作)

Kafka基础讲解部分 Kafka基础讲解部分 Kafka实战&#xff08;Scala操作&#xff09; 1、引入依赖 版本&#xff1a; <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.report…...

Android Framework 之WMS详解

1.WMS说的就是 WindowManagerService&#xff1a;负责为Activity对应的窗口分配Surface&#xff0c;管理Surface的显示顺序以及位置尺寸&#xff0c;控制窗口动画 。 它是Android系统中为各个客户端即每个app来提供这样的服务的一个类。 在Android系统中在systemServer 进程和各…...

opencv-图像仿射变换

仿射变换设计图像位置角度的变化&#xff0c;是深度学习预处理中常用的功能。仿射变换就是对图像的平移缩放旋转翻转操作的组合 如下图&#xff0c;对图中点1,2,3与图二中三个点一一映射&#xff0c;仍然形成三角形&#xff0c;但形状已经发生改变&#xff0c;通过这两组三点求…...

算法的基本概念

一、算法的基本概念思维导图 二、什么是算法&#xff1a; 1.我们知道数据结构就是将我门现实的世界中的问题数据化&#xff0c;存入计算机中&#xff0c;并实现对数据结构的一些基本操作。 2.算法就是如何处理这些存入计算机中的信息&#xff0c;以求高效的解决实际问题。 3…...

124. Go Template应用实例:用代码生成代码

文章目录 生成器模式生成器代码生成 本文用生成器模式作为例子&#xff0c;来演示如何用代码生成代码。 生成器模式 熟悉 Java 开发的同学都知道&#xff0c;lombok 有一个著名的注解 Builder &#xff0c;只要加在类上面&#xff0c;就可以自动生成 Builder 模式的代码。如下…...

【AI实践】阿里云方言文本转语音TTS

最近要做一些普通话和方言demo 找一个免费工具 免费在线文字转语音工具 | edge-tts 在线体验 (bingal.com) 还有一些方言在阿里云上找了下&#xff0c;基于官方demo改了一下 阿里云语音合成接口说明_智能语音交互(ISI)-阿里云帮助中心 (aliyun.com) 如何下载安装、使用语音…...

java 之 各类日期格式转换

一、前言 大家在开发过程中必不可少得和日期打交道&#xff0c;对接别的系统时&#xff0c;时间日期格式不一致&#xff0c;每次都要转换! 从 Java1 到 Java8 将近 20 年&#xff0c;再加上 Java8 的普及时间、各种历史 API 兼容过渡时间。我们很多时候需要在旧时间 API 与新时…...

Nvidia黄仁勋对话Meta扎克伯格:AI和下一代计算平台的未来 | SIGGRAPH 2024对谈回顾

在今年的SIGGRAPH图形大会上&#xff0c;Nvidia创始人兼CEO黄仁勋与Meta创始人马克扎克伯格进行了一场长达60分钟的对谈。这场对话不仅讨论了AI的未来发展和Meta的开源哲学&#xff0c;还发布了不少新产品&#xff0c;并深入探讨了下一代计算平台的可能性。 引言 人工智能的发…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行&#xff01; sudo su - 1. CentOS 系统&#xff1a; yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

毫米波雷达基础理论(3D+4D)

3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文&#xff1a; 一文入门汽车毫米波雷达基本原理 &#xff1a;https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...

在树莓派上添加音频输入设备的几种方法

在树莓派上添加音频输入设备可以通过以下步骤完成&#xff0c;具体方法取决于设备类型&#xff08;如USB麦克风、3.5mm接口麦克风或HDMI音频输入&#xff09;。以下是详细指南&#xff1a; 1. 连接音频输入设备 USB麦克风/声卡&#xff1a;直接插入树莓派的USB接口。3.5mm麦克…...

【SpringBoot自动化部署】

SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一&#xff0c;能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时&#xff0c;需要添加Git仓库地址和凭证&#xff0c;设置构建触发器&#xff08;如GitHub…...

c# 局部函数 定义、功能与示例

C# 局部函数&#xff1a;定义、功能与示例 1. 定义与功能 局部函数&#xff08;Local Function&#xff09;是嵌套在另一个方法内部的私有方法&#xff0c;仅在包含它的方法内可见。 • 作用&#xff1a;封装仅用于当前方法的逻辑&#xff0c;避免污染类作用域&#xff0c;提升…...