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

goland课程管理(6)

项目目录结构如下图所示:

core包下面:

class.go

package coreimport "github.com/gin-gonic/gin"func Class1(ctx *gin.Context) {}

course.go

package coreimport (. "cookie/database". "cookie/model""fmt""github.com/gin-gonic/gin""strconv"
)func CourseSubmit(ctx *gin.Context) {//tuID := ctx.Param("stuID")//fmt.Println(tuID)courseName := ctx.PostForm("kc")xf := ctx.PostForm("xf")zq := ctx.PostForm("zq")teacher := ctx.PostForm("teacher")//cla:=ctx.PostForm("class")Xf, _ := strconv.Atoi(xf)Zq, _ := strconv.Atoi(zq)Te, _ := strconv.Atoi(teacher)fmt.Println(courseName, xf, zq, teacher)var (Cou []CourseTea Teachers)DB.Where("id = ?", Te).Take(&Tea)DB.Find(&Cou)c := Course{BaseModel: BaseModel{Name: courseName},Credit:    Xf,Period:    Zq,TeacherID: Te,Teacher:   Tea,}DB.Create(&c)fmt.Println(Cou, "-----", Tea)//重定向ctx.Redirect(301, "/course")
}func CourseSelect(ctx *gin.Context) {var co []CourseDB.Preload("Teacher").Find(&co)ctx.HTML(200, "CourseSelect.html", gin.H{"course": co,})
}func CourseADD(ctx *gin.Context) {var (Tea []Teachers)DB.Find(&Tea)//db.Find(&Cou)ctx.HTML(200, "courseADD.html", gin.H{"Tea": Tea,//"class": Cou,})
}func PostCourse(ctx *gin.Context) {var (Stud StudentsCol  []Course)//获取url参数stuID := ctx.Param("stuID")//获取到url的的post请求的from表单的course多值postformArray进行参数获取CouID := ctx.PostFormArray("courseSelect")//根据参数过滤到指定的学生fmt.Println(stuID, CouID)//根据sno的ID值查询到学生信息DB.Where("sno = ?", stuID).Preload("Class.Tutor").Preload("Students").Find(&Stud)//根据post请求的值获取到对应的课程信息DB.Where("id in ?", CouID).Preload("Teacher").Find(&Col)//将学生与课程进行绑定DB.Model(&Stud).Preload("Students").Association("Course").Append(&Col)//查询有关学生的所有课程绑定信息DB.Model(&Stud).Preload("Teacher").Association("Course").Find(&Col)//服务器响应客户端,并对模板进行渲染ctx.HTML(200, "StuSelect.html", gin.H{"course":  Col,"student": Stud,})
}func Course1(ctx *gin.Context) {var (Cou []CourseStu Students)//获取页面的IDstuID := ctx.Param("stuID")DB.Where("sno = ?", stuID).Take(&Stu)fmt.Println("p-------", stuID, "----------p")DB.Preload("Teacher").Find(&Cou)fmt.Println(Cou)ctx.HTML(200, "course.html", gin.H{"course":  Cou,"stuID":   stuID,"student": Stu,})
}

index.go

package coreimport "github.com/gin-gonic/gin"func Index(ctx *gin.Context) {ctx.HTML(200, "xcxc", gin.H{})
}

login.go

package coreimport (. "cookie/database". "cookie/model""github.com/gin-gonic/gin"
)func Login(ctx *gin.Context) {ctx.HTML(200, "login.html", nil)
}func LoginPOST(ctx *gin.Context) {var AC AccountName := ctx.PostForm("name")Pwd := ctx.PostForm("pwd")DB.Where("name = ? AND pwd = ?", Name, Pwd).Take(&AC)if AC.Id == 0 {ctx.String(200, "登入失败")} else {ctx.JSON(200, gin.H{"name": Name,"PWD":  Pwd,})}}

student.go

package coreimport (. "cookie/database". "cookie/model""fmt""github.com/gin-gonic/gin""gorm.io/gorm""reflect""strconv"
)func Stu(ctx *gin.Context) {//插入数据var Student []Students//get请求里面获取头部[查询]信息Cx := ctx.Query("cx")fmt.Println("====", Cx, "====")//判断Cx的值,如果为空则显示所有,如果有值则根据值进行过滤后再进行渲染返回响应if Cx == "" {//关联预加载DB.Preload("Class.Tutor").Preload("Account").Find(&Student)} else {//关联预加载过滤查询DB.Where("Name like ?", "%"+Cx+"%").Preload("Class.Tutor").Find(&Student)}//服务器响应客户端ctx.HTML(200, "student.html", gin.H{"student": Student,})//fmt.Println(Student)
}func StudentAdd(ctx *gin.Context) {//获取class表所有数据var Cla []Class//db.json.Where("Name like ?", "软件%").Find(&Cla)DB.Find(&Cla)fmt.Println(Cla)ctx.HTML(200, "stuAdd.html", gin.H{"class": Cla,})
}func Submit(ctx *gin.Context) {//从post请求头里面抓起head内容Name := ctx.PostForm("xm")Sno := ctx.PostForm("xh")Tel := ctx.PostForm("tel")Pwd := ctx.PostForm("pw")Gender := ctx.PostForm("gender")SON, _ := strconv.Atoi(Sno)ClassID := ctx.PostForm("class")ClaID, _ := strconv.Atoi(ClassID)Gend, _ := strconv.Atoi(Gender) //字符转换成int数据类型fmt.Println(Name, Sno, Tel, Pwd, SON, ClassID, ClaID, "----")//Student := Students{BaseModel: BaseModel{Name: Name}, Pwd: Pwd, Sno: SON, Tel: Tel, ClassID: ClaID, Gender: Gend}Student := Students{BaseModel: BaseModel{Name: Name}, Sno: SON, Tel: Tel, ClassID: ClaID, Gender: Gend, Account: Account{Pwd: Pwd, BaseModel: BaseModel{Name: Name,}}}//插入数据DB.Create(&Student)//每当插入数据之后就会相应的在class的Num里面进行增+1的操作DB.Model(Class{}).Where("  Id  = ?", ClassID).Update("num", gorm.Expr("num+1"))//重定向ctx.Redirect(301, "/student")
}func Delete(ctx *gin.Context) {var Student Students//获取url参数DelID := ctx.Param("DelID")fmt.Println("---WEQW----", DelID, "---EWEQ===")//删除DelID对应数据库里面sno字段参数对应的数据DB.Where("sno = ?", DelID).Delete(&Student)//重定向ctx.Redirect(301, "/student")
}func Edit(ctx *gin.Context) {var (Cla     ClassStudent StudentsC       []Class)//获取到页面URL参数EdiID := ctx.Param("EdiID")fmt.Println("====", EdiID, "==========")DB.Preload("Account").Where("sno = ?", EdiID).Find(&Student)//定义获取到的classDB.Where("Id = ?", Student.ClassID).Find(&Cla)//获取所有class班级信息DB.Find(&C)fmt.Println(Student.ClassID)ctx.HTML(200, "studentEdit.html", gin.H{"student": Student,"class":   Cla,"claAll":  C,})
}func UpEdit(ctx *gin.Context) {//从post请求头里面抓起head内容Name := ctx.PostForm("xm")Sno := ctx.PostForm("xh")Tel := ctx.PostForm("tel")Pwd := ctx.PostForm("pw")Gender := ctx.PostForm("gender")SON, _ := strconv.Atoi(Sno)ClassID := ctx.PostForm("class")ClaID, _ := strconv.Atoi(ClassID)Gend, _ := strconv.Atoi(Gender) //字符转换成int数据类型fmt.Println(Name, Sno, Tel, Pwd, SON, ClassID, ClaID, Gender, "----")//修改账户密码,在go语言里面不支持修改嵌套在结构体内的值,不会更新级联嵌套结构体里面的字段。var (Student StudentsAc      Account)account := DB.Where("sno = ?", SON).Preload("Account").Find(&Student)fmt.Println(reflect.TypeOf(account), account)if account.Error != nil {fmt.Println(account.Error)}fmt.Println("ppppppppppppppppppppppppp->", Student.AccountID, Student)result := DB.Model(Ac).Where("id = ? ", Student.AccountID).Update("Pwd", Pwd)//Student := Students{BaseModel: BaseModel{Name: Name}, Pwd: Pwd, Sno: SON, Tel: Tel, ClassID: ClaID, Gender: Gend}student := Students{BaseModel: BaseModel{Name: Name}, Sno: SON, Tel: Tel, ClassID: ClaID, Gender: Gend}fmt.Println(Student)result2 := DB.Model(Students{}).Where("sno = ?", SON).Updates(student)if result.Error != nil {fmt.Printf("Error updating student: %v\n", result2.Error)}/*重定向:客户端访问/student/submit表单页面进行数据提交;服务器响应客户端【空值】;客户端第二次向服务端发出/student页面请求;服务端再次根据请求将/student页面响应客户端;一次请求两个响应,一次空响应,第二次为跳转之后的响应页面数据*/ctx.Redirect(301, "/student")
}func StuSelect(ctx *gin.Context) {var (Student StudentsCol     []Course)//获取页面的IDstuID := ctx.Param("stuID")fmt.Println("p-------", stuID, "----------p")DB.Where("sno = ? ", stuID).Preload("Class.Tutor").Preload("Account").Find(&Student)fmt.Println(Student)//获取到学生对应的课程信息DB.Model(&Student).Preload("Teacher").Preload("Account").Association("Course").Find(&Col)ctx.HTML(200, "StuSelect.html", gin.H{"student": Student,"course":  Col,})
}

databases包下面

mysql.go

package databaseimport (. "cookie/model""fmt""gorm.io/driver/mysql""gorm.io/gorm""gorm.io/gorm/logger""log""os""reflect"
)var DB *gorm.DB// 数据库初始化
func DbInit() *gorm.DB {newLogger := logger.New(log.New(os.Stdout, "\r\n", log.LstdFlags), // io writerlogger.Config{//SlowThreshold: time.Second,   // 慢 SQL 阈值LogLevel: logger.Info, // Log level},)fmt.Println(reflect.TypeOf(newLogger))dsn := "xxx:xxxx@tcp(xxxx:xxxx)/css4?charset=utf8mb4&parseTime=True&loc=Local"DB, _ = gorm.Open(mysql.Open(dsn), &gorm.Config{Logger: newLogger,})//调用gorm根据go语言的结构体去创建mysql一一对应的表DB.AutoMigrate(&Teachers{},&Class{},&Course{},&Students{},&Account{},&AdminUser{},)//先删除表DB.Migrator().DropTable(&Teachers{}, &Class{}, &Course{}, &Students{}, &Account{}, &AdminUser{})//再重建表DB.AutoMigrate(&Teachers{}, &Class{}, &Course{}, &Students{}, &AdminUser{})return DB
}

model包下面

rbac.go

package modeltype Account struct {BaseModelPwd string
}

student.go

package modelimport "time"type Course struct {BaseModelCredit    intPeriod    intTeacherID intTeacher   Teachers `gorm:"foreignkey:TeacherID"`
}type Class struct {BaseModelNum     intTutorID intTutor   Teachers `gorm:"foreignkey:TutorID"`
}type Students struct {BaseModelSno int `gorm:"unique"`//Pwd    string `gorm:"type:varchar(100);not null"`Tel    string `gorm:"type:char(11);"`Gender intBrith  *time.TimeRemark string `gorm:"type:varchar(255);"`//多对一ClassID intClass   Class `gorm:"foreignkey:ClassID;constraint:OnDelete:CASCADE;"`//多对多Course []Course `gorm:"many2many:student2course;constraint:OnDelete:CASCADE;"`//一对一AccountID int     `gorm:"unique"`Account   Account `gorm:"constraint:OnDelete:CASCADE;"`
}type AdminUser struct {Id        int `gorm:"primarykey"`AccountID int `gorm:"unique"`Account   Account
}type BaseModel struct {Id         int        `gorm:"primarykey"`CreateTime *time.Time `gorm:"autoCreateTime"`UpdateTime *time.Time `gorm:"autoCreateTime"`Name       string     `gorm:"type:varchar(30);unique;not null"`
}type Teachers struct {BaseModelTon int `gorm:"unique"`//Pwd    string `gorm:"type:varchar(100);not null"`Tel    string `gorm:"type:char(11);"`Birth  *time.TimeRemark string `gorm:"type:varchar(255);"`//一对一AccountID int `gorm:"unique"`Account   Account
}

rander包下面

index.go

package randerimport ("github.com/gin-contrib/multitemplate""html/template""log"
)// 创建累加函数
func addOne(i int) int {return i + 1
}func CreateMyRender() multitemplate.Renderer {// 创建功能映射funcMap := template.FuncMap{"addOne": addOne,}templates, err := template.New("StuSelect.html").Funcs(funcMap).ParseFiles("template/publi.html", "template/StuSelect.html")if err != nil {log.Fatalf("Failed to create template 'xcxc': %v", err)}r := multitemplate.NewRenderer()r.AddFromFiles("xcxc", "template/publi.html", "template/index.html") //xcxc 为组合后的模板名称,与函数内的名字保持一致即可r.AddFromFiles("student.html", "template/publi.html", "template/student.html")r.AddFromFiles("stuAdd.html", "template/publi.html", "template/studentAdd.html")r.AddFromFiles("course.html", "template/publi.html", "template/course.html")r.AddFromFiles("clss.html", "template/publi.html", "template/class.html")r.AddFromFiles("studentADD.html", "template/publi.html", "template/jixuADD.html")r.AddFromFiles("studentEdit.html", "template/publi.html", "template/studentEdit.html")//r.AddFromFiles("StuSelect.html", "template/publi.html", "template/StuSelect.html")r.Add("StuSelect.html", templates)r.AddFromFiles("courseADD.html", "template/publi.html", "template/courseADD.html")r.AddFromFiles("CourseSelect.html", "template/publi.html", "template/CourseSelect.html")r.AddFromFiles("login.html", "template/LoginStu.html")return r/*在Gin框架中注册自定义函数addOne,并在名为StuSelect.html的模板中使用它。错误panic: template: StuSelect.html:46: function "addOne" not defined表明在解析模板的过程中模板引擎尝试查找并执行addOne函数,但是没有找到这个函数的定义。要解决这个问题,你需要确保以下几点:自定义函数addOne确实已经在你的代码中定义了。这个函数通过适当的FuncMap注册到了Gin框架的模板中。这个注册的函数在模板中使用的时候要匹配函数映射中的键(即函数名)。你的代码中的错误是因为你在Gin的默认模板渲染器HTMLRender中并没有正确地注册自定义的函数映射。你使用了multitemplate.NewRenderer()来创建新的多模板渲染器,但在创建这个渲染器的过程中,并没有将自定义函数addOne加入到FuncMap中。你在main函数中尝试注册addOne到"StuSelect.html"模板,并设置它为Gin的HTML渲染器。这个操作并不能应用到multitemplate.Renderer上。由于multitemplate.Renderer处理多模板的方式不同,你的自定义函数需要通过不同的方式注册。为了将自定义函数addOne注册到你所有使用multitemplate.Renderer的模板中,你需要在每个AddFromFiles调用中创建一个新的template.Template,将FuncMap添加到这个模板,并且使用它们来创建各自的页面模板。修改createMyRender函数,像这样注册你的自定义函数:gofunc createMyRender() multitemplate.Renderer {funcMap := template.FuncMap{"addOne": addOne,}r := multitemplate.NewRenderer()// 这里以"xcxc"为例,其他模板类似地处理templates, err := template.New("publi.html").Funcs(funcMap).ParseFiles("template/publi.html", "template/index.html")if err != nil {log.Fatalf("Failed to create template 'xcxc': %v", err)}r.Add("xcxc", templates)// ...其他模板注册代码return r}请确保使用Funcs和ParseFiles的顺序是正确的,并且处理了所有可能发生的错误。这样做能够确保所有使用multitemplate.Renderer的模板都注册了addOne函数。最后,记得删除main函数中重新注册StuSelect.html模板和设置HTML渲染器的代码,因为这个操作应该在createMyRender函数内完成。所有模板都应该通过multitemplate.Renderer来创建和注册。在您提供的代码中,“xcxc”是一个在multitemplate.NewRenderer()中注册的模板的名称。在Gin框架中,multitemplate是一个用来支持多模板渲染的扩展包。使用这个扩展包的NewRenderer()方法可以创建一个新的渲染器,它能允许您为不同的路由定义不同的模板布局。在创建这些模板时,您可以为这些组合好的模板指定任意的名字,名称是自定义的,对系统没有具体的意义,但是应该反映出模板的内容或用途,让人一看就能理解这个模板的作用。在这里,xcxc可能是开发者随意给出的一个示例名称,或者特定于应用程序上下文的内部命名。举例来说,以下代码创建了一个名为xcxc的组合模板,该模板由"template/publi.html"和"template/index.html"这两个文件组合而成:gor.AddFromFiles("xcxc", "template/publi.html", "template/index.html")在这段代码中,"xcxc"是您可以在Gin的路由处理函数中使用的模板名。例如:gofunc index(ctx *gin.Context) {ctx.HTML(http.StatusOK, "xcxc", gin.H{// 模板数据...})}在这个index函数中,调用ctx.HTML方法时使用了"xcxc"作为模板名称,这告诉Gin渲染器要使用我们定义的包含名为"xcxc"的组合模板来生成响应的HTML。总结来说,"xcxc"在您提供的代码示例中只是一个随意的模板名称,它在Gin的路由处理中用来引用特定的模板组合。您完全可以根据自己的需要将它改为更具描述性的名称。*/
}

route路由包下面

class.go

package routeimport (. "cookie/core""github.com/gin-gonic/gin"
)func ClassRoute(r *gin.Engine) {r.GET("/class", Class1)
}

course.go

package routeimport (. "cookie/core""github.com/gin-gonic/gin"
)func CourseRoute(r *gin.RouterGroup) {r.GET("/", CourseSelect)r.GET("/add", CourseADD)r.POST("/submit", CourseSubmit)
}

index.go

package routeimport (. "cookie/core""github.com/gin-gonic/gin"
)func IndexRoute(r *gin.Engine) {//动态路由r.GET("/", Index)
}

InitRoute.go

package routeimport ("github.com/gin-gonic/gin"
)func InitRoute(r *gin.Engine) {stuent := r.Group("/student")course := r.Group("/course")//动态路由IndexRoute(r)StudenRoute(stuent)ClassRoute(r)LoginRoute(r)CourseRoute(course)}

login.go

package routeimport (. "cookie/core""github.com/gin-gonic/gin"
)func LoginRoute(r *gin.Engine) {r.GET("/login", Login)r.POST("/login", LoginPOST)
}

student.go

package routeimport (. "cookie/core""github.com/gin-gonic/gin"
)func StudenRoute(r *gin.RouterGroup) {r.GET("/edit/:EdiID", Edit)r.POST("/", UpEdit)r.POST("/submit", Submit)r.GET("/:stuID/StuSelect", StuSelect)r.POST("/:stuID/StuSelect", PostCourse)r.GET("/", Stu)r.GET("/:stuID/course", Course1)
}

最后mian.go

package mainimport (. "cookie/database". "cookie/rander". "cookie/route""github.com/gin-gonic/gin"
)func main() {//数据库初始化DbInit()//构gin引擎r := gin.Default()//加载静态文件r.Static("/static", "./static")//多模块加载,渲染r.HTMLRender = CreateMyRender()InitRoute(r)//运行go引擎r.Run(":8888")}

相关文章:

goland课程管理(6)

项目目录结构如下图所示: core包下面: class.go package coreimport "github.com/gin-gonic/gin"func Class1(ctx *gin.Context) {}course.go package coreimport (. "cookie/database". "cookie/model""fmt"…...

04.Elasticsearch应用(四)

Elasticsearch应用(四) 1.什么是索引 索引是文档的容器,是一类文档的结合索引是一个逻辑命名空间,它映射到一个或多个主分片,并且可以具有零个或多个副本分片索引中数据分散在Shard上索引的Mapping定义文档字段的类型…...

Python之数据可视化(地图)

目录 一 基础地图应用 二 全国疫情图 一 数据准备 二 数据处理 二 湖北省疫情图 一 数据准备 二 数据处理 一 基础地图应用 导入map地图对象 from pyecharts.charts import Map map Map() 写入数据 data [("北京市",100),("上海市"…...

etcd技术解析:构建高可用分布式系统的利器

1. 引言 随着云原生技术的兴起,分布式系统的构建变得愈发重要。etcd作为一个高可用的分布式键值存储系统,在这个领域发挥着至关重要的作用。本文将深入探讨etcd的技术细节,以及如何利用它构建高可用的分布式系统。 2. etcd简介 etcd是一个开…...

Pillow图像处理:从零开始的奇妙之旅

图像处理,就像是一场神奇的冒险,让我们的照片变得更有趣、更生动。而在这个冒险的旅途中,Pillow就如同一位魔法师,为我们开启了无尽的可能性。无论你是刚刚踏入图像处理领域的小白,还是已经略有基础的程序员&#xff0…...

设计一个LRU(最近最少使用)缓存

约束和假设 我们正在缓存什么? 我们正在缓存Web Query的结果我们可以假设输入是有效的,还是需要对其验证? 假设输入是有效的我们可以假设它适应内存吗? 对 编码实现 class Node(object):def __init__(self, results):self.res…...

shell 循环语句

一、命令补充 1. echo 命令 echo -n 表示不换行输出 echo -e 表示输出转义符 常用的转义符有: 选项作用\r光标移至行首,并且不换行\s当前shell的名称,如bash\t插入Tab键,制表符\n输出换行\f换行,但光标仍停留在…...

C++(1) 命名空间

文章目录 C1. C 概述2.C 相对于 C 语言的增强2.1C 第一行代码2.2 C 补充 bool 类型2.3 作用域运算符2.4 命名空间 namespace2.4.1 命名空间基本内容和开放性2.4.2 多个命名空间操作2.4.3 命名空间函数定义和实现分离2.4.4 匿名命名空间2.4.5 命名空间别名 C 1. C 概述 C 之父…...

【机组】单元模块实验的综合调试与驻机键盘和液晶显示器的使用方式

​🌈个人主页:Sarapines Programmer🔥 系列专栏:《机组 | 模块单元实验》⏰诗赋清音:云生高巅梦远游, 星光点缀碧海愁。 山川深邃情难晤, 剑气凌云志自修。 目录 1. 综合实验的调试 1.1 实验…...

React中实现虚拟加载滚动

前言:当一个页面中需要接受接口返回的全部数据进行页面渲染时间,如果数据量比较庞大,前端在渲染dom的过程中需要花费时间,造成页面经常出现卡顿现象。 需求:通过虚拟加载,优化页面渲染速度 缺点&#xff1a…...

vue中的Mutations

目录 一:介绍 二:例子 一:介绍 Vuex 中的 mutation 非常类似于事件: 每个 mutation 都有一个字符串的 事件类型 (type) 和 一个 回调函数 (handler)。这个回调函数就是我们实际进行状态更改的函数,并且它会接受 sta…...

C#用 DateAndTime.DateAdd方法和DateTime.Add(TimeSpan) 方法分别添加一段时间间隔

目录 一、基本方法 1.用 DateAndTime.DateAdd方法添加一段时间间隔 2.用DateTime.Add方法添加一段时间间隔 二、实例 1.实例1:用 DateAndTime.DateAdd方法 2.实例2:用DateTime.Add方法 一、基本方法 1.用 DateAndTime.DateAdd方法添加一段时间间隔…...

四、Kotlin 表达式

1. 常量 & 变量 1.1 可读写变量(var) var x initValue // x 称为可读写变量注意:当 var 声明的变量做成员属性时,默认提供 setter/getter 方法。 1.2 只读变量(val) val x initValue // x 称为只…...

Web开发4:单元测试

在Web开发中,单元测试是一种重要的开发实践,它可以帮助我们确保代码的质量和可靠性。通过编写和运行单元测试,我们可以验证代码的正确性,减少错误和缺陷,并提高代码的可维护性。本文将介绍单元测试的概念、好处以及如何…...

Ubuntu 16 让ufw防火墙控制docker容器中所有端口

使用docker ps 查询docker在运行端口。 rootai-0003:~# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS …...

<蓝桥杯软件赛>零基础备赛20周--第18周--动态规划初步

报名明年4月蓝桥杯软件赛的同学们,如果你是大一零基础,目前懵懂中,不知该怎么办,可以看看本博客系列:备赛20周合集 20周的完整安排请点击:20周计划 每周发1个博客,共20周。 在QQ群上交流答疑&am…...

vb如何获取鼠标形状的特征码

vb如何获取鼠标形状的特征码 好像按键精灵有一个GetCursorShape()函数可以获取特征码,不知道VB6能不能实现类似的功能? 附注: 1 最好是机器无关的,不是也可以。 2 特征码就是一串数字,用来区分不同的鼠标形状。 3 获取…...

chroot: failed to run command ‘/bin/bash’: No such file or directory

1. 问题描述及原因分析 在busybox的环境下,执行 cd rootfs chroot .报错如下: chroot: failed to run command ‘/bin/bash’: No such file or directory根据报错应该rootfs文件系统中缺少/bin/bash,进入查看确实默认是sh,换成…...

蓝桥杯备战——2.矩阵键盘

1.分析原理图 由上图可以看到若J5跳线帽接地,就S4~S7就可以当做四路独立按键,若接到P44,则就是4*4的矩阵键盘。 2.独立按键处理 相对传统的按键延时消抖方案,这里我采用更高效,更经典,更偏向产品级应用的…...

Docker部署思维导图工具SimpleMindMap并实现公网远程访问

文章目录 1. Docker一键部署思维导图2. 本地访问测试3. Linux安装Cpolar4. 配置公网地址5. 远程访问思维导图6. 固定Cpolar公网地址7. 固定地址访问 SimpleMindMap 是一个可私有部署的web思维导图工具。它提供了丰富的功能和特性,包含插件化架构、多种结构类型&…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...

多模态图像修复系统:基于深度学习的图片修复实现

多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

提升移动端网页调试效率:WebDebugX 与常见工具组合实践

在日常移动端开发中,网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时,开发者迫切需要一套高效、可靠且跨平台的调试方案。过去,我们或多或少使用过 Chrome DevTools、Remote Debug…...

【深度学习新浪潮】什么是credit assignment problem?

Credit Assignment Problem(信用分配问题) 是机器学习,尤其是强化学习(RL)中的核心挑战之一,指的是如何将最终的奖励或惩罚准确地分配给导致该结果的各个中间动作或决策。在序列决策任务中,智能体执行一系列动作后获得一个最终奖励,但每个动作对最终结果的贡献程度往往…...