Beego 使用教程 5:页面视图

beego 是一个用于Go编程语言的开源、高性能的 web 框架

beego 被用于在Go语言中企业应用程序的快速开发,包括RESTful API、web应用程序和后端服务。它的灵感来源于Tornado, Sinatra 和 Flask

beego 官网:http://beego.gocn.vip/

上面的 beego 官网如果访问不到,看这篇文章《beego 官网文档本地环境搭建》

注意:本文的 beego 文档使用的就是本地环境搭建的文档,因为官网文档已经不可用了

beego 官方 github 仓库:https://github.com/beego/beego

上一讲,讲了 beego 过滤器部分内容,需要的朋友可以查看《Beego 使用教程 4:过滤器》

这一讲,讲解 页面视图

代码使用上一讲的代码

目录

1、返回页面

2、模板数据

2.1、返回字符串

2.2、返回结构体

2.3、返回 map

2.4、返回切片

3、模板函数

3.1、格式化时间函数

3.2、html 和字符串转换函数

3.3、自定义模板函数

3.4、其他模板函数

4、静态文件

5、Layout 设计


1、返回页面

在 controller 目录下新建 page.go,在 page.go 中添加下面代码

package controllerimport ("github.com/beego/beego/v2/server/web"
)type PageController struct {web.Controller
}func (p *PageController) Index() {//返回页面p.TplName = "index.html"
}

Beego 默认情况下支持 tpl 和 html 后缀名的模板文件,如果你的后缀名不是这两种,请进行如下设置

web.AddTemplateExt("你文件的后缀名")

在项目根目录下新建 views 目录,Beego 中默认的模板目录是 views,可以通过配置 web.BConfig.WebConfig.ViewsPath = "pages" 修改默认的模版目录名称,笔者使用默认的模版目录

在 views 目录下新建 index.html,index.html 内容如下

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><h1>灵种传闻出越裳,何人提挈上蛮航。他年我若修花史,列作人间第一香</h1>
</body>
</html>

修改 main.go 为下面代码

package mainimport ("beego-demo/controller""beego-demo/filter""fmt""github.com/beego/beego/v2/core/config""github.com/beego/beego/v2/server/web"
)func main() {//通过config获取自定义配置workername, _ := config.String("workername")fmt.Println(workername)//执行定时任务//go job.DemoTask()//注册自动路由//web.AutoPrefix("api", &controller.UserController{})web.CtrlGet("/name", (*controller.UserController).Name)web.CtrlGet("/get/:id", (*controller.UserController).GetUserById)web.CtrlGet("/get/:id/:num", (*controller.UserController).GetUserByIdAndNum)//返回页面web.CtrlGet("/page/index", (*controller.PageController).Index)//注册函数式路由controller.RegisterFunctionalRoutes()//web命名空间controller.RegisterNamespaceRoutes()//过滤器filter.RegisterFilters()//开启 Admin 管理后台web.BConfig.Listen.EnableAdmin = trueweb.BConfig.Listen.AdminAddr = "localhost"web.BConfig.Listen.AdminPort = 8088//查看已注册路由tree := web.PrintTree()methods := tree["Data"].(web.M)for k, v := range methods {fmt.Printf("%s => %v\n", k, v)}web.Run()
}

运行效果

浏览器请求:http://localhost:9090/page/index

修改 页面模版文件位置,在main.go 中添加下面代码

web.BConfig.WebConfig.ViewsPath = "pages"

在项目根目录下新建 pages 目录,在pages 目录下新建 index.tpl 文件

index.tpl 内容如下

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><h1>灵种传闻出越裳,何人提挈上蛮航。他年我若修花史,列作人间第一香</h1>
</body>
</html>

修改 page.go 为下面代码

package controllerimport ("github.com/beego/beego/v2/server/web"
)type PageController struct {web.Controller
}func (p *PageController) Index() {//返回页面//p.TplName = "index.html"p.TplName = "index.tpl"
}

main.go

package mainimport ("beego-demo/controller""beego-demo/filter""fmt""github.com/beego/beego/v2/core/config""github.com/beego/beego/v2/server/web"
)func main() {//通过config获取自定义配置workername, _ := config.String("workername")fmt.Println(workername)//执行定时任务//go job.DemoTask()//注册自动路由//web.AutoPrefix("api", &controller.UserController{})web.CtrlGet("/name", (*controller.UserController).Name)web.CtrlGet("/get/:id", (*controller.UserController).GetUserById)web.CtrlGet("/get/:id/:num", (*controller.UserController).GetUserByIdAndNum)//返回页面web.CtrlGet("/page/index", (*controller.PageController).Index)//注册函数式路由controller.RegisterFunctionalRoutes()//web命名空间controller.RegisterNamespaceRoutes()//过滤器filter.RegisterFilters()//开启 Admin 管理后台web.BConfig.Listen.EnableAdmin = trueweb.BConfig.Listen.AdminAddr = "localhost"web.BConfig.Listen.AdminPort = 8088web.BConfig.WebConfig.ViewsPath = "pages"//查看已注册路由tree := web.PrintTree()methods := tree["Data"].(web.M)for k, v := range methods {fmt.Printf("%s => %v\n", k, v)}web.Run()
}

运行效果

2、模板数据

下面的代码笔者使用 views 下的模板文件

2.1、返回字符串

修改 page.go 为下面内容

package controllerimport ("github.com/beego/beego/v2/server/web"
)type PageController struct {web.Controller
}func (p *PageController) Index() {p.Data["content"] = "如许闲宵似广寒,翠丛倒影浸冰团。梅花宜冷君宜热,一样香魂两样看"//返回页面p.TplName = "index.html"//p.TplName = "index.tpl"
}

修改 index.html 为下面内容

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><h1>灵种传闻出越裳,何人提挈上蛮航。他年我若修花史,列作人间第一香</h1><p>{{.content}}</p>
</body>
</html>

运行效果

2.2、返回结构体

修改  page.go 为下面内容

package controllerimport ("github.com/beego/beego/v2/server/web"
)type PageController struct {web.Controller
}type Poetry struct {Name    stringAuthor  stringContent string
}func (p *PageController) Index() {//p.Data["content"] = "如许闲宵似广寒,翠丛倒影浸冰团。梅花宜冷君宜热,一样香魂两样看"poetry := Poetry{Name:    "茉莉花",Author:  "许景迂",Content: "自是天上冰雪种,占尽人间富贵香。不烦鼻观偷馥郁,解使心俱清凉。南船卖客俱到岸,东道主人容寄廊",}p.Data["poetry"] = &poetry//返回页面p.TplName = "index.html"//p.TplName = "index.tpl"
}

修改 index.html 为下面内容

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><h1>灵种传闻出越裳,何人提挈上蛮航。他年我若修花史,列作人间第一香</h1><p>{{.poetry.Name}}</p><p>{{.poetry.Author}}</p><p>{{.poetry.Content}}</p>
</body>
</html>

重启后运行效果

2.3、返回 map

修改  page.go 为下面内容

package controllerimport ("github.com/beego/beego/v2/server/web"
)type PageController struct {web.Controller
}type Poetry struct {Name    stringAuthor  stringContent string
}func (p *PageController) Index() {//p.Data["content"] = "如许闲宵似广寒,翠丛倒影浸冰团。梅花宜冷君宜热,一样香魂两样看"//poetry := Poetry{//	Name:    "茉莉花",//	Author:  "许景迂",//	Content: "自是天上冰雪种,占尽人间富贵香。不烦鼻观偷馥郁,解使心俱清凉。南船卖客俱到岸,东道主人容寄廊",//}//p.Data["poetry"] = &poetrymp := make(map[string]string)mp["name"] = "茉莉花"mp["author"] = "江奎"mp["content"] = "虽无艳态惊群目,幸有清香压九秋。应是仙娥宴归去,醉来掉下玉搔头"p.Data["mp"] = mp//返回页面p.TplName = "index.html"//p.TplName = "index.tpl"
}

修改 index.html 为下面内容

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><h1>灵种传闻出越裳,何人提挈上蛮航。他年我若修花史,列作人间第一香</h1><p>{{.mp.name}}</p><p>{{.mp.author}}</p><p>{{.mp.content}}</p>
</body>
</html>

运行效果

2.4、返回切片

修改 page.go 为下面内容

package controllerimport ("github.com/beego/beego/v2/server/web"
)type PageController struct {web.Controller
}type Poetry struct {Name    stringAuthor  stringContent string
}func (p *PageController) Index() {//p.Data["content"] = "如许闲宵似广寒,翠丛倒影浸冰团。梅花宜冷君宜热,一样香魂两样看"//poetry := Poetry{//	Name:    "茉莉花",//	Author:  "许景迂",//	Content: "自是天上冰雪种,占尽人间富贵香。不烦鼻观偷馥郁,解使心俱清凉。南船卖客俱到岸,东道主人容寄廊",//}//p.Data["poetry"] = &poetry//mp := make(map[string]string)//mp["name"] = "茉莉花"//mp["author"] = "江奎"//mp["content"] = "虽无艳态惊群目,幸有清香压九秋。应是仙娥宴归去,醉来掉下玉搔头"//p.Data["mp"] = mpflowers := []string{"梅", "兰", "竹", "菊"}p.Data["flowers"] = flowers//返回页面p.TplName = "index.html"//p.TplName = "index.tpl"
}

修改 index.html 为下面内容

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><h1>灵种传闻出越裳,何人提挈上蛮航。他年我若修花史,列作人间第一香</h1>{{range $key, $val := .flowers}} {{$key}} {{$val}} {{end}}
</body>
</html>

运行效果

3、模板函数

3.1、格式化时间函数

在  page.go  中添加 F 函数

package controllerimport ("github.com/beego/beego/v2/server/web""time"
)type PageController struct {web.Controller
}type Poetry struct {Name    stringAuthor  stringContent string
}func (p *PageController) Index() {//p.Data["content"] = "如许闲宵似广寒,翠丛倒影浸冰团。梅花宜冷君宜热,一样香魂两样看"//poetry := Poetry{//	Name:    "茉莉花",//	Author:  "许景迂",//	Content: "自是天上冰雪种,占尽人间富贵香。不烦鼻观偷馥郁,解使心俱清凉。南船卖客俱到岸,东道主人容寄廊",//}//p.Data["poetry"] = &poetry//mp := make(map[string]string)//mp["name"] = "茉莉花"//mp["author"] = "江奎"//mp["content"] = "虽无艳态惊群目,幸有清香压九秋。应是仙娥宴归去,醉来掉下玉搔头"//p.Data["mp"] = mpflowers := []string{"梅", "兰", "竹", "菊"}p.Data["flowers"] = flowers//返回页面p.TplName = "index.html"//p.TplName = "index.tpl"
}func (p *PageController) F() {p.Data["date"] = time.Now()p.TplName = "f.html"
}

在 views 下新建 f.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><p>{{ dateformat .date "2006-01-02 15:04:05" }}</p><p>{{date .date "Y-m-d H:i:s"}}</p>
</body>
</html>

修改 main.go 为下面内容

package mainimport ("beego-demo/controller""beego-demo/filter""fmt""github.com/beego/beego/v2/core/config""github.com/beego/beego/v2/server/web"
)func main() {//通过config获取自定义配置workername, _ := config.String("workername")fmt.Println(workername)//执行定时任务//go job.DemoTask()//注册自动路由//web.AutoPrefix("api", &controller.UserController{})web.CtrlGet("/name", (*controller.UserController).Name)web.CtrlGet("/get/:id", (*controller.UserController).GetUserById)web.CtrlGet("/get/:id/:num", (*controller.UserController).GetUserByIdAndNum)//返回页面web.CtrlGet("/page/index", (*controller.PageController).Index)web.CtrlGet("/page/f", (*controller.PageController).F)//注册函数式路由controller.RegisterFunctionalRoutes()//web命名空间controller.RegisterNamespaceRoutes()//过滤器filter.RegisterFilters()//开启 Admin 管理后台web.BConfig.Listen.EnableAdmin = trueweb.BConfig.Listen.AdminAddr = "localhost"web.BConfig.Listen.AdminPort = 8088//web.BConfig.WebConfig.ViewsPath = "pages"//查看已注册路由tree := web.PrintTree()methods := tree["Data"].(web.M)for k, v := range methods {fmt.Printf("%s => %v\n", k, v)}web.Run()
}

运行效果

3.2、html 和字符串转换函数

html2str 函数,实现了把 html 转化为字符串,剔除一些 script、css 之类的元素,返回纯文本信息

str2html 函数,实现了把相应的字符串当作 HTML 来输出,不转义

修改 page.go 为下面内容

package controllerimport ("github.com/beego/beego/v2/server/web"
)type PageController struct {web.Controller
}type Poetry struct {Name    stringAuthor  stringContent string
}func (p *PageController) Index() {//p.Data["content"] = "如许闲宵似广寒,翠丛倒影浸冰团。梅花宜冷君宜热,一样香魂两样看"//poetry := Poetry{//	Name:    "茉莉花",//	Author:  "许景迂",//	Content: "自是天上冰雪种,占尽人间富贵香。不烦鼻观偷馥郁,解使心俱清凉。南船卖客俱到岸,东道主人容寄廊",//}//p.Data["poetry"] = &poetry//mp := make(map[string]string)//mp["name"] = "茉莉花"//mp["author"] = "江奎"//mp["content"] = "虽无艳态惊群目,幸有清香压九秋。应是仙娥宴归去,醉来掉下玉搔头"//p.Data["mp"] = mpflowers := []string{"梅", "兰", "竹", "菊"}p.Data["flowers"] = flowers//返回页面p.TplName = "index.html"//p.TplName = "index.tpl"
}func (p *PageController) F() {mp := make(map[string]string)mp["str"] = "<p style='color:red'>环佩青衣,盈盈素靥,临风无限清幽<p>"mp["html"] = "<p style='color:red'>出尘标格,和月最温柔。堪爱芳怀淡雅,纵离别,未肯衔愁<p>"p.Data["mp"] = mpp.TplName = "f.html"
}

修改 index.html 为下面内容

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>{{.mp.str}}<br>{{html2str .mp.str}}<br>{{.mp.html}}<br>{{str2html .mp.html}}
</body>
</html>

运行效果

3.3、自定义模板函数

Beego 支持用户定义模板函数,但是必须在 web.Run() 调用之前

修改 main.go 为下面代码

package mainimport ("beego-demo/controller""beego-demo/filter""fmt""github.com/beego/beego/v2/core/config""github.com/beego/beego/v2/server/web"
)func main() {//通过config获取自定义配置workername, _ := config.String("workername")fmt.Println(workername)//执行定时任务//go job.DemoTask()//注册自动路由//web.AutoPrefix("api", &controller.UserController{})web.CtrlGet("/name", (*controller.UserController).Name)web.CtrlGet("/get/:id", (*controller.UserController).GetUserById)web.CtrlGet("/get/:id/:num", (*controller.UserController).GetUserByIdAndNum)//返回页面web.CtrlGet("/page/index", (*controller.PageController).Index)web.CtrlGet("/page/f", (*controller.PageController).F)//注册函数式路由controller.RegisterFunctionalRoutes()//web命名空间controller.RegisterNamespaceRoutes()//过滤器filter.RegisterFilters()//开启 Admin 管理后台web.BConfig.Listen.EnableAdmin = trueweb.BConfig.Listen.AdminAddr = "localhost"web.BConfig.Listen.AdminPort = 8088//web.BConfig.WebConfig.ViewsPath = "pages"//查看已注册路由tree := web.PrintTree()methods := tree["Data"].(web.M)for k, v := range methods {fmt.Printf("%s => %v\n", k, v)}//自定义模板函数web.AddFuncMap("bookName", bookName)web.Run()
}// 自定义模板函数添加书名号
func bookName(in string) (out string) {out = "《" + in + "》"return
}

添加一个生成书名号的模板函数

修改 index.html 为下面内容

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>{{.name | bookName}}
</body>
</html>

运行效果

3.4、其他模板函数

更多的模版函数可以参考 Beego 文档

4、静态文件

Beego 默认会将项目根目录下的 static 目录作为静态资源的存目录,请求静态资源默认添加前缀 /static,这个官方文档没有说,可以通过查看 Beego 项目源代码中的注释知道

自定义静态资源目录可以通过 web.SetStaticPath 函数添加

如下代码将目录 public 作为静态目录,请求前缀是 staticfile

web.SetStaticPath("/staticfile", "public")

在项目根目录下新建 static 目录,在statc 目录下新建 index.js 和 index.css 文件

index.css

.poetry {background: aqua;
}

index.js

function test(){var content = "咏院中丛竹"alert(content)
}

修改 index.html 为下面代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><link href="/static/index.css" type="text/css" rel="stylesheet" /><script src="/static/index.js"></script>
</head>
<body><h1>灵种传闻出越裳,何人提挈上蛮航。他年我若修花史,列作人间第一香</h1><div class="poetry"><p>擢擢当轩竹,青青重岁寒。</p><p>心贞徒见赏,箨小未成竿。</p></div><button onclick="test()">测试</button>
</body>
</html>

重启项目运行测试

5、Layout 设计

Beego 支持 layout 设计,例如你在管理系统中,整个管理界面是固定的,只会变化中间的部分

在 views 目录下新建 main.html,内容如下

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<h1>main</h1>
<div>{{.Header}}</div>
<div class="container">{{.LayoutContent}}</div>
</body>
</html>

这里面,.Header 是可以随意定义的,笔者表示引入固定的header 部分,.LayoutContent 是Beego 规定的,用来表示页面中间变化的部分

在 views 目录下新建 header.html,代码看下面

<div><h2>头部</h2>
</div>

在 views 目录下新建 login.html,表示页面中间的部分,代码看下面

<div><h2>登录</h2>
</div>

在 page.go 中修改为下面代码

package controllerimport ("github.com/beego/beego/v2/server/web"
)type PageController struct {web.Controller
}type Poetry struct {Name    stringAuthor  stringContent string
}func (p *PageController) Index() {//p.Data["content"] = "如许闲宵似广寒,翠丛倒影浸冰团。梅花宜冷君宜热,一样香魂两样看"//poetry := Poetry{//	Name:    "茉莉花",//	Author:  "许景迂",//	Content: "自是天上冰雪种,占尽人间富贵香。不烦鼻观偷馥郁,解使心俱清凉。南船卖客俱到岸,东道主人容寄廊",//}//p.Data["poetry"] = &poetry//mp := make(map[string]string)//mp["name"] = "茉莉花"//mp["author"] = "江奎"//mp["content"] = "虽无艳态惊群目,幸有清香压九秋。应是仙娥宴归去,醉来掉下玉搔头"//p.Data["mp"] = mpflowers := []string{"梅", "兰", "竹", "菊"}p.Data["flowers"] = flowers//返回页面p.TplName = "index.html"//p.TplName = "index.tpl"
}func (p *PageController) F() {p.Data["name"] = "水浒传"p.TplName = "f.html"
}func (p *PageController) Main() {p.LayoutSections = make(map[string]string)p.LayoutSections["Header"] = "header.html"//模版p.Layout = "main.html"p.TplName = "login.html"
}

其中 Main 方法,p.Layout = "main.html" 指定模版,p.TplName = "login.html" 指定模版中间的页面,p.LayoutSections["Header"] = "header.html" 指定页面固定的部分

在 main.go 中添加路由,修改 main.go 为下面代码

package mainimport ("beego-demo/controller""beego-demo/filter""fmt""github.com/beego/beego/v2/core/config""github.com/beego/beego/v2/server/web"
)func main() {//通过config获取自定义配置workername, _ := config.String("workername")fmt.Println(workername)//执行定时任务//go job.DemoTask()//注册自动路由//web.AutoPrefix("api", &controller.UserController{})web.CtrlGet("/name", (*controller.UserController).Name)web.CtrlGet("/get/:id", (*controller.UserController).GetUserById)web.CtrlGet("/get/:id/:num", (*controller.UserController).GetUserByIdAndNum)//返回页面web.CtrlGet("/page/index", (*controller.PageController).Index)web.CtrlGet("/page/f", (*controller.PageController).F)web.CtrlGet("/page/main", (*controller.PageController).Main)//注册函数式路由controller.RegisterFunctionalRoutes()//web命名空间controller.RegisterNamespaceRoutes()//过滤器filter.RegisterFilters()//开启 Admin 管理后台web.BConfig.Listen.EnableAdmin = trueweb.BConfig.Listen.AdminAddr = "localhost"web.BConfig.Listen.AdminPort = 8088//web.BConfig.WebConfig.ViewsPath = "pages"//查看已注册路由tree := web.PrintTree()methods := tree["Data"].(web.M)for k, v := range methods {fmt.Printf("%s => %v\n", k, v)}//自定义模板函数web.AddFuncMap("bookName", bookName)web.Run()
}// 自定义模板函数添加书名号
func bookName(in string) (out string) {out = "《" + in + "》"return
}

运行效果,访问 http://localhost:9090/page/main

下一讲:《Beego 使用教程 6:Web 输入处理》

至此完

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

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

相关文章

Could not resolve placeholder ‘xx.xxx.host’ in value “xxx“问题解决

Could not resolve placeholder ‘xx.xxx.host’ in value "xxx"问题解决 众多原因其中之一 springboot 项目&#xff0c;idea 配置apollo 时&#xff0c;运行指定了配置文件 uat 所以使用本地配置文件启动 时&#xff0c;一直去找uat 配置文件&#xff0c;结果自…

rust使用serde_json转换Value为rust中的数据类型

为了方便转换未知json数据&#xff0c;我们可以使用serde提供的value类型来进行转换&#xff0c;将json字符串转化为Value值&#xff0c;然后可以快速使用get方法来获取值&#xff1a; let json_str r#"{"name": "John","age": 30,"c…

Satellite Communications Symposium(WCSP2022)

1.Power Allocation for NOMA-Assisted Integrated Satellite-Aerial-Terrestrial Networks with Practical Constraints(具有实际约束的 NOMA 辅助天地一体化网络的功率分配) 摘要&#xff1a;天地一体化网络和非正交多址接入被认为是下一代网络的关键组成部分&#xff0c;为…

Git === Git概述 Git安装

第1章 Git概述 Git是一个免费的、开源的分布式版本控制系统&#xff0c;可以快速高效地处理从小型到大型的各种项目。 Git易于学习&#xff0c;占地面积小&#xff0c;性能极快。 它具有廉价的本地库&#xff0c;方便的暂存区域和多个工作流分支等特性。其性能优于Subversion…

Webshell绕过技巧分析之-base64/HEX/Reverse/Html/Inflate/Rot13

在网络安全运营&#xff0c;护网HVV&#xff0c;重保等活动的过程中&#xff0c;webshell是一个无法绕过的话题。通常出现的webshell都不是以明文的形式出现&#xff0c;而是针对webshell关键的内容进行混淆&#xff0c;编码来绕过网络安全产品&#xff08;IDS&#xff0c;WAF&…

YOLO系列自研改进:基于注意力机制的多尺度特征提取模块

目录 一、原理 二、代码 三、在YOLO中的应用 一、原理 这个模块的原理仍然是利用不同大小的卷积核来提取不同尺度的特征,同样将通道划分为两部分,一部分通过注意力机制进行通道信息和空间信息的提取,另一部分通过多个不同大小的卷积核来提取多尺度的特征信息。 二、代码…

Baidu Comate——AI时代的软件开发利器

目录 Comate产品介绍 1.产品背景 ​编辑 2.产品优势 3.产品特性 4. 支持开发环境及语言 5.使用场景 Comate产品体验 Comate场景应用 2.快捷键的使用 专业插件体验 1.行间注释 2. 代码优化 3.解释说明代码 4.调优建议 5.AutoWork Comate实测体验感受 Comate产品介绍…

Java 8特性(一) 之 手写Stream流filter、map和forEach方法

Java 8特性&#xff08;一&#xff09; 之 手写Stream流filter、map和forEach方法 今天看了一下Java 8的Stream流&#xff0c;学习了一下函数式编程&#xff0c;这才感受函数式编程如此爽&#xff0c;之前就使用过ES8.7.1的函数式编程&#xff0c;当时就在想啥时候咱也能写出这…

Java的BIO/NIO/AIO

1. Java中的BIO、NIO和AIO的基本概念及其主要区别 BIO (Blocking I/O): 传统的同步阻塞I/O模型。每个连接创建成功后都需要一个线程来处理&#xff0c;如果连接没有数据可读&#xff0c;则线程会阻塞在读操作上。这种模型简单易理解&#xff0c;但在高并发环境下会消耗大量系统…

ORACLE 19C RAC DIAG进程消耗大量内存的分析

近期一个ORACLE 19C的RAC环境&#xff0c;多次出现数据库实例的后台进程DIAG消耗很多内存&#xff08;达到20G&#xff09;&#xff0c;节点1、节点2都出现过次问题。 问题分析&#xff1a;通过对DIAG进程TRACE分析&#xff0c;结合在ORACLE官方后台进行问题、BUG查询匹配&…

思腾合力受邀参加VALSE 2024视觉与学习青年学者研讨会

在充满学术氛围的五月&#xff0c;思腾合力荣幸受邀参加了于2024年5月5-7日在重庆举行的第十四届VALSE大会。作为视觉与学习领域的顶级交流平台&#xff0c;VALSE大会每年都吸引着全国专家与学者的目光。 本次大会不仅延续了往届的高水平学术研讨&#xff0c;还进一步拓宽了研究…

台湾精锐APEX行星减速机噪音产生及优化策略

台湾精锐APEX行星减速机在各种机械装置中的应用逐渐广泛。然而&#xff0c;其噪音问题也日益凸显。噪音不仅影响工作环境&#xff0c;还可能对设备的正常运行和使用寿命产生负面影响。因此&#xff0c;了解APEX行星减速机噪音的产生以及优化噪音问题变得至关重要。 APEX行星减…

安卓自动化脚本制作流程详解!

在移动应用日益普及的今天&#xff0c;安卓自动化脚本制作成为了开发者提高工作效率、减少重复劳动的重要手段&#xff0c;本文将详细介绍安卓自动化脚本的制作流程&#xff0c;并通过五段源代码的实例&#xff0c;帮助读者更好地理解和掌握这一过程。 一、安卓自动化脚本制作…

从U盘到云端:企业数据泄露的那些事

在企业的日常运营中&#xff0c;数据安全无疑是极为关键的一环。无论是U盘还是云&#xff0c;数据泄露事件的发生都可能导致企业的核心机密被窃取&#xff0c;甚至损害企业的商业利益和声誉。以下是关于从U盘到云端&#xff0c;企业数据泄露的一些常见情况和应对策略。 U盘&…

各种流量包特征

[CVE-2013-1966] Apache Struts2 远程命令执行漏洞 要执行的命令在exec里面&#xff0c;而且回显数据包里面有明显执行结果回显 [CVE-2017-8046] Spring Data Rest 远程命令执行漏洞 回显不明显&#xff0c;考试提供的解码工具不能解密&#xff0c; [CVE-2017-12149] JBOSS…

揭秘全网热门话题:抖音快速涨粉方法,巨量千川投流助你日增10000粉

在当今社交媒体的时代( 千川投流&#xff1a;hzzxar&#xff09;抖音成为了年轻人分享自己才华和生活的平台。然而&#xff0c;要在抖音上快速获得关注和粉丝&#xff0c;却不是一件容易的事情。今天&#xff0c;我们将揭秘全网都在搜索的抖音快速涨1000粉的秘籍&#xff0c;带…

API攻击为啥盛行,企业应该如何防范

一.API接口到底是什么 API,中文名称叫应用程序编程接口,是现代移动、SaaS 和 Web应用程序的一个关键组成部分。听起来很晦涩难懂,但其实我们每个人的生活都会接触 API:早上出门,打开手机看看天气,天气APP需要通过 API 提取数据;到了公司,被安排出差,赶紧上网查票,购票网站更新…

【3dmax笔记】027:配置修改器集、工具栏自定义与加载

文章目录 一、配置修改器集二、自定义工具栏三、加载工具栏 一、配置修改器集 可以把自己常用的修改命令放到右边框中的部分&#xff0c;便于自己的操作&#xff0c;省去了每次都要花半天时间找命令的尴尬。新建一个二维或者三维物体&#xff0c;点击修改面板&#xff0c;点击…

运算符重载:妈妈我会自己写运算符了

目录 一、题目&#xff1a; 二、分析&#xff1a; 1.矩阵&#xff08;matrix&#xff09;部分&#xff1a; 2.程序部分&#xff1a; 三、代码&#xff1a; 四、提升&#xff1a; 1、思路&#xff1a; 2、重载流插入运算符“<<” 3、代码&#xff1a; 五、进阶&…

尊享面试100题(314.二叉树的垂直遍历python)

题目关键词&#xff0c;从左到右&#xff0c;从上到下&#xff0c;那么使用bfs宽度优先算法。 使用字典v保存每一列的值。 class Solution:def verticalOrder(self, root: Optional[TreeNode]) -> List[List[int]]:if not root: return []v defaultdict(list)qu deque()…