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就如同一位魔法师,为我们开启了无尽的可能性。无论你是刚刚踏入图像处理领域的小白,还是已经略有基础的程序员࿰…...
设计一个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的过程中需要花费时间,造成页面经常出现卡顿现象。 需求:通过虚拟加载,优化页面渲染速度 缺点:…...
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思维导图工具。它提供了丰富的功能和特性,包含插件化架构、多种结构类型&…...
机器学习实验2——线性回归求解加州房价问题
文章目录 🧡🧡实验内容🧡🧡🧡🧡数据预处理🧡🧡代码缺失值处理特征探索相关性分析文本数据标签编码数值型数据标准化划分数据集 🧡🧡线性回归🧡&am…...
宝塔+nextcloud+docker+Onlyoffice 全开启https
折腾了我三天的经验分享 1.宝塔创建网站 nextcloud版本为28.0.1 php8.2 ,导入nextcloud绑定域名对应的证书 ,不用创建mysql 因为nextcloud 要求是mariadb:10.7 宝塔里没有,就用docker安装一个 端口设置为3307 将数据库文件映射出来/ww…...
呼吸机电机控制主控MCU方案
呼吸机是一种能代替、控制或改变人的正常生理呼吸,增加肺通气量,改善呼吸功能,减轻呼吸功消耗,节约心脏储备能力的装置。呼吸机连接一条管子到患者的嘴或鼻子,氧气量可以通过监视器加以控制。 基于灵动微控制器的呼吸…...
gitlab备份-迁移-升级方案9.2.7升级到15版本最佳实践
背景 了解官方提供的版本的升级方案 - GitLab 8: 8.11.Z 8.12.0 8.17.7 - GitLab 9: 9.0.13 9.5.10 9.2.7 - GitLab 10: 10.0.7 10.8.7 - GitLab 11: 11.0.6 11.11.8 - GitLab 12: 12.0.12 12.1.17 12.10.14 - GitLab 13: 13.0.14 13.1.11 13.8.8 13.12.15 - G…...
redis面试题合集-基础
前言 又来到每日的复习时刻,昨天我们学习了mysql相关基础知识,还有分布式数据库介绍(后续总结时再持续更新)。今日继续学习缓存杀器:redis redis基础面试题合集 什么是Redis? Redis是一个开源的、内存中…...
(Unity)C# 中的字符串格式化
前言 在软件开发中,理解和掌握字符串的格式化及调试技巧对于编写高效和可维护的代码至关重要。 字符串插值 ($ 符号) 在 C# 中,字符串插值是通过在字符串前加 $ 符号来实现的。这允许我们将变量、表达式或函数调用直接嵌入到字符串中。 string name &qu…...
【项目日记(五)】第二层: 中心缓存的具体实现(上)
💓博主CSDN主页:杭电码农-NEO💓 ⏩专栏分类:项目日记-高并发内存池⏪ 🚚代码仓库:NEO的学习日记🚚 🌹关注我🫵带你做项目 🔝🔝 开发环境: Visual Studio 2022 项目日…...
使用PSIM软件生成DSP28335流水灯程序
最近在学习DSP28335芯片,然后在使用PSIM仿真软件时发现这个仿真软件也支持28335芯片,于是就想学习下如何在PSIM软件中使用DSP28335芯片。在PSIM自带的官方示例中有使用DSP28335芯片的相关例子。 工程下载链接 https://download.csdn.net/download/qq_20…...
【iOS ARKit】人脸检测追踪基础
在计算机人工智能(Artificial Inteligence,AI)物体检测识别领域,最先研究的是人脸检测识别,目前技术发展最成熟的也是人脸检测识别。人脸检测识别已经广泛应用于安防、机场、车站、闸机、人流控制、安全支付等众多社会领域&#x…...
ES的一些名称和概念总结
概念 先看看ElasticSearch的整体架构: 一个 ES Index 在集群模式下,有多个 Node (节点)组成。每个节点就是 ES 的Instance (实例)。每个节点上会有多个 shard (分片), P1 P2 是主分片, R1 R2…...
做网站有哪些要求/企业培训有哪些方面
华为P30系列是华为在今年4月份推出的新品,凭借着超强的拍照能力以及天空之境配色广受喜爱。而在近日,LV为华为P30系列推出了专属手机壳,售价3050元,在官网和北京、上海的LV线下店开售。华为P30系列是华为在今年4月份推出的新品&am…...
曲阳有没有做网站里/东莞互联网推广
剑指 Offer 56 - I. 数组中数字出现的次数这里需要用到一个位运算的原理:相同的两个数的二进制表示进行异或运算后,结果为变为 0 。这个原理会让出现偶数次的内容过滤掉。本题可以分为 3 个部分:全部元素异或,过滤出 2 个只出现一…...
绑定ip地址的网站/新能源汽车公司
文章目录1. bootstrap简单介绍_栅格_布局容器1.1 bootstrap简单使用1.2 布局容器1.3 栅格单位1.4 表单2. bootstrao组件和插件简单使用2.1 简单样式演示2.2 导航栏2.3 巨幕2.4 进度条2.5 轮播图3. 自定义web框架(nbweb项目)3.1 目录结构3.2 static文件夹…...
招投标网站销售怎么做/2021年最为成功的营销案例
文章目录1、初识MySQL1.1、数据库分类2、列类型2.1、数值2.2、字符串2.3、事件日期3、字段属性4、表操作4.1、字符集编码4.2、修改表结构4.3、清除表5、DQL查询数据(最重点)5.1、DQL5.2、查询去重5.3、数据库的表达式5.4、模糊查询5.5、连表查询5.6、分页…...
兵团第二师建设环保局网站/长沙正规竞价优化推荐
更好的学习网址:http://www.voidspace.org.uk/python/articles/urllib2.shtml#openers-and-handlers以下为个人学习笔记。在开始后面的内容之前,先来解释一下urllib2中的两个个方法:info and geturl urlopen返回的应答对象response(或者HTTPE…...
怎样推广自己做的网站/qq群推广
Tensorflow2-Lenet-5实现Cifar10分类引言模型SequentialModel基本函数1.全连接层Dense2.卷积层Conv2D3.池化层Maxpool2D搭建网络1.导入数据集2.创建模型3.model.compile4.model.fit5.model.summary代码实验结果引言 为了掌握tensorflow一些函数的基本操作,写写博客…...