GoNote第三章 主流框架加对比
GoNote第三章 主流框架加对比
Golang主流框架介绍
自从面市以来,Golang成为了程序员在编写API和开发Web服务时的首选之一。近90%的受访者表示会在自己下一组项目中持续使用Golang。与我们熟悉的C和C++类似,Go语言也是现有Golang的“灵魂”。而Golang则是专为并发而设计的。
作为一个编译型语言和开源平台,Golang在独特的功能和更好的替代方案方面可谓各大Web软件开发公司的首选框架。它可以协助开发人员构建出稳定可靠的软件应用。例如,在开发API时,开发人员可以使用Golang框架去构建REST API。
以下是主流的Golang框架,适合用于Web开发:
GIN
Go语言编写的HTTP Web框架,它以更好的性能实现了类似Martini的API,性能更好
GinGonic是一个知名且简约的Golang Web应用框架。该框架拥有各种开发所需的库和功能。许多知名的开发公司都会采用该Web框架,来处理各种监控、跟踪、以及调试等问题。此外,相对其他平台,该框架还具有如下特点:
它使用HTTP路由器,来管理Golang流量。
它使用简单的设计规则,并提供精确的文档。
优点
- 高性能:Gin是一个轻量级的框架,占用的系统资源相对较少,因此其性能非常高效。
- 易用性:Gin提供了简单易用的API,能够快速构建RESTful API和Web应用程序,同时还提供了中间件机制,支持多种功能扩展。
- 社区支持:Gin拥有庞大的开发者社区和生态环境,可以通过各种方式获得支持和解决问题。
缺点
- 是非常精简的web开发框架,没有提供众多模块。这既是缺点也是优点
GoFrame
GoFrame 是一个强大的 Go Web 应用开发框架,它提供了一系列优秀的功能模块和常用工具,方便开发者快速构建高性能、高可用的 Web 应用程序。
相较于 Go 标准库,GoFrame 提供了更多的功能模块,例如:ORM、Cache、Session、WebSocket、邮件发送等等。此外,GoFrame 也提供了更友好的 API 和更好的性能。
Goframe是一个优秀的Golang Web框架,其主要优点和缺点如下:
优点:
- 高性能:Goframe具有非常高的性能,可以轻松处理高并发请求。
- 轻量级:Goframe非常轻量级,代码简洁易懂,而且安装和使用非常方便。
- 多功能性:Goframe支持RESTful API和Web应用程序的开发,同时还支持ORM和模板引擎等多种功能。
- 安全性:Goframe具有良好的安全性,可以对用户输入的数据进行有效的过滤和验证。
缺点:
- 社区支持相对较弱:与一些主流框架相比,Goframe的社区支持相对较弱,因此在极端情况下,可能会存在一些问题无法得到及时解决。
- 学习曲线较高:由于Goframe使用了一些独特的设计思想和技术实现,因此对初学者来说,学习曲线可能会比较高。
- 生态相对薄弱:尽管Goframe提供了不少的功能和扩展支持,但其生态相对薄弱,因此在某些场景下,可能需要进行更多的二次开发和定制。
总体来说,Goframe是一个非常优秀的Web框架,其性能和功能都比较出色,但需要注意的是,对于初学者来说,存在一定的学习难度,而且在一些特殊场景下,可能需要进行更多的自定义开发。
Echo
Echo 高性能、极简Go语言Web框架
优点
- 高性能:Echo采用了类似Golang的栈处理方式,提供了非常高效的请求处理和路由功能。
- 轻量级:Echo使用起来非常简单易懂,代码不多,使用非常方便。
- 中间件机制:Echo内置中间件机制,可以方便地处理各种HTTP请求。
缺点
- 调试不方便,报错信息不友好
- 路由性能虽高,但是路由实现的算法底层不支持路由排序,会引起路由冲突
- 社区支持不如Gin:虽然Echo拥有自己的开发者社区,但相对于Gin来说,其社区规模较小,扩展支持也相对不足。
小结
Echo非常适合于开发轻量级的微服务
Beego
Beego 面向Go编程语言的开源高性能web框架
类似于面向Python的兼容性Django Web框架,Beego具有Web应用程序共有的一系列独特功能和特性。目前,它由八个不同的模块所组成,可按需取舍或组合使用。
除了在大多数Web框架中常见的MVC组件,Beego还包括一个ORM(Object-Relationship Map,对象关系映射),可访问信息与数据、会话管理工具、以及内置的缓存处理程序。同时,它还包含了用于联合操作(joint operations)和HTTP元素、组件、以及各种日志系统的代码库。
我们可以认为Beego是Django在其不同命令行工具中的另一种表示方式。例如,开发人员可以使用bee命令,从头开始构建Beego应用、或使用当前应用程序进行管理。此外,Beego还能够提供如下功能:
类似于Django的CL(命令行)工具。
从头开始、或在现有的应用中构建强大的应用程序。
只需一个bee命令,即可全面开展任何项目。
优点
- 功能全面:Beego是一个全栈Web框架,提供了很多常用功能(如ORM、模板引擎等),方便开发人员快速构建Web应用程序。
- 易学习:Beego的设计思想清晰,使用起来相对容易上手。
- 文档丰富:Beego的官方文档非常详尽,提供了很多示例代码和教程,方便开发人员学习和使用。
缺点
- 比较臃肿,因为提供了很多支持,当遇到坑时需要花很多时间查源码解决问题
- 模块众多,这既是优点也是缺点
小结
Beego整体来讲是非常优秀的框架,吸引了大批Go语言初学者作为第一框架,适合工业级项目开发
项目地址:https://github.com/beego/beego
Fiber
一种 Express 风格的、基于 fasthttp 的 HTTP Web 框架
Iris
Iris 自称是全宇宙最快的Go语言Web框架,完备MVC支持,拥抱未来
优点
- 高性能:Iris采用了高度优化的路由和请求处理机制,在处理大量请求时非常高效。
- 功能全面:Iris支持TOML文件配置、多语言支持、模板引擎等众多功能。
- 中间件机制:Iris内置中间件机制,可以非常方便地扩展各种功能。
缺点
- 不够稳定,社区里有人反馈:最新的release版本是alpha版非常不稳定
- 支持Iris的人很多,但是目前仍然不如Gin和Echo多
- 学习曲线较高:Iris相对其他主流框架来说,有一定的学习曲线,需要花费一定的时间来掌握其使用方法。
小结
Iris为了优化性能,不惜自己开发和集成最快的组件,比如日志记录内置了golog模块,比如json序列化就选择了第三方库jsoniter,从框架设计的态度上,非常给力。
go-zero
Go-Zero 是一个基于 Go 语言的微服务开发框架。它旨在提供简单、高效和可靠的微服务开发解决方案。Go-Zero 主要功能包括 RPC、缓存、限流、熔断、监控等。相较于其他 Go 框架,如 Gin 或 Beego,Go-Zero 更加专注于微服务开发,并提供了更多的开箱即用的功能。
go-Micro
go-micro 是一个微服务框架,它可以用于构建可伸缩和可维护的微服务应用程序。它支持多种语言和传输协议,并提供了一系列服务发现、负载均衡、消息传递和远程过程调用(RPC)等基础设施功能。
Gorilla
作为另一个Google顶级Golang框架,Gorilla是应用开发社区中最完备的Web框架。它完美地迎合了net/HTTP库的各种可重用元素和组件。目前,Gorilla能够提供如下特点:
模块化和可扩展性。
通过包含和启用新的扩展、模块、删除包,解决过时的功能给系统带来的隐患。
涵括从原生支持到对Web Sockets的支持。
Martini
由于Martini可以在整个开发过程中轻松地支持与第三方的集成,因此它更像一个精妙的生态系统,而不是一个框架。除了能够以最小的开销去处理大量功能,该Web框架还可以灵活地扩展出其他功能。由于具有极高的可扩展性,因此该框架主要专注于编写Golang服务,以及构建出优秀的Web应用。此外,Martini还能够提供如下特点:
启用诸如路由、异常处理和常用技术服务,以进一步为通配符、变量参数、以及正则表达式结构等提供支持。
Martini拥有非常完备的Golang Web应用社区。该社区虽然不大,但是非常活跃,并且目前他们拥有着约20多个实用插件。
Buffalo
相比其他Golang Web开发框架,Buffalo不但能够协助您快速地启动开发项目,而且可以被用作集成的Web开发生态系统。目前,Buffalo能够提供如下功能:
通过同时满足后端和前端应用开发的需求,实现简单、有效且快速地构建出Web应用。
带有热重载(hot reloading)功能的Buffalo框架,可以通过dev命令,自动观察.html和.go文件,以重建和重新启动二进制文件。
Goji
Goji是一个极其轻量级和快速的GolangWeb开发框架,具有直接组合的能力。目前,该Web框架成为了绝大多数移动应用开发公司、以及从事不同Web项目公司的理想选择。该框架在如下方面进行了探索:
与net/HTTP ServeMux类似,拥有简约的HTTP请求多路复用器(multiplexer)。
Goji不但适合生产环境,而且包括了各种URL模式、可重新配置的中间件栈、以及无缝关闭等功能。
Revel
Revel是面向Web开发人员的最新Golang框架之一。它能够提供如下功能:
它带有一系列预配置的创新特性和功能,可被运用在不同的使用场景中。
该框架并不一定需要寻找相关配置与设置。
与其他Go语言框架不同,Revel完全自给自足,并不依赖任何中间件或第三方插件。
Revel是构建多任务式API的一站式解决方案。
优点
- 功能全面:Revel是一个全面的Web框架,支持ORM、Websocket、MVC等多种功能,可用于开发各类Web应用。
- 易学习:Revel的设计原则与Golang相符合,非常易上手,同时也提供了丰富的文档和示例代码。
- 安全性高:Revel拥有非常好的安全性,可以有效地避免常见的Web安全问题。
缺点:
- 性能相对较低:Revel的性能虽然不错,但相对于其他主流框架来说,可能略显逊色。
Mango
虽然未能得到主动维护,但是许多Golang用户仍然会使用到模块化的Mango Web框架。Mango框架可帮助您尽可能轻松快速地去构建和创建可重用的HTTP功能模块。此外,它还将一系列应用程序和中间件,包含在一个HTTP服务器对象中,以保持代码的自我导向性(self-directed)。因此,您可以从不同的库中,决定当前项目中需要用到的不同功能。Mango框架还能够提供如下功能:
对于所有类别的Web开发项目,Mango都可以让应用开发人员从各种库选项中进行按需选择,进而简化了应用的实现。
Mango框架能够方便开发人员快速、直接地使用基于HTTP的模块。
为了保持代码的独立性和高效性,它能够与各种应用及中间件协同使用。
Gocraft
作为老牌稳定的框架,Gocraft提供了可扩展和快速路由的功能。此类路由可以被作为新的功能,添加到HTTP或标准库中的网络包里。由于它是一种定制的Go mux中间件包,且具有反射和转换(casting)能力,因此您可以将其静态地植入自己的应用代码中。
此外,您也可以使用当前的内置中间件,自行创建或添加其他功能。由于程序员往往将性能作为优先考虑因素,因此他们会使用Gocraft框架,来轻松地创建和编写后端Web应用。因此,Gocraft混合并提供了如下功能:
程序开发人员可以通过具有内置中间件的移动应用,去访问并添加更多的功能。
Gocraft可以提供更好的API峰值性能。
由于支持自定义的中间件包,因此它可以处理代码的反射和转换。
Web.go
Web.go属于最简单的Google Golang Web框架类。它通过树型路由(tree-routing)系统提供各项附加功能,协助开发者在任何用例中,实施和处理需要路由的项目。
评估指标
| 指标 | 说明 |
|---|---|
| 基本介绍 | 来源各自官网。 |
| 模块化设计 | 是否支持模块化插拔设计、模块之间低耦合设计,是否可以独立使用其中某部分组件。 |
| 模块完善度 | 框架提供的功能模块是否丰富。模块能否能覆盖日常普遍的开发需求。 |
| 使用易用性 | 易用性不仅仅是值框架好不好用,更多是团队能否在低成本下快速接入,长期来看能否低成本维护。 |
| 文档完善性 | 参考官网提供的介绍资料,包括但不限于:文档、视频、示例、案例资料。同时,本地中文文档支持也是参考项。 |
| 工程化完备 | 是否能够快速接入项目开发,是否提供项目接入规范、设计模式、开发工具链,文档是否完善、源码是否易读、是否便于长期维护。 |
| 开发模式 | 框架适用的开发模式,或者官方推荐的开发模式。 |
| 工程规范 | 项目接入时的开发规范,如目录规范、设计规范、编码规范、命名规范等。 |
| 社区活跃 | 官方与社区沟通是否便捷,问题是否能够快速解答,BUG是否能够快速响应处理。 |
| 开发工具链 | 项目开发时使用到的CLI开发工具,如初始化项目、交叉编译、代码生成、swagger、热编译能力等等。 |
| Web: 性能测试 | 来源第三方评测 https://github.com/the-benchmarker/web-frameworks 。 |
| Web: 路由冲突处理 | 存在路由注册冲突时有无良好的解决方案,在业务项目开发中比较常见。 |
| Web: 域名支持 | Web路由是否支持域名绑定,甚至多域名的绑定。 |
| Web: 文件服务 | Web服务是否提供静态资源的访问能力。 |
| Web: 优雅重启/关闭 | Web服务在重启时不会影响请求执行,关闭时会等待正在执行的请求处理完,新请求不再接入。 |
| ORM | 框架是否自带ORM组件,ORM组件是业务项目的核心组件。无论是自研还是通过第三方组件引入。 |
| Session | 框架是否提供会话管理组件,无论是通用型Session组件,还是仅针对于Web服务的Session组件。 |
| I18N支持 | 国际化组件支持(常用但非核心组件)。 |
| 配置管理 | 配置管理也是框架需要完备的核心组件能力。 |
| 日志组件 | 日志组件也是框架需要完备的核心组件能力。 |
| 数据校验 | 数据校验也是框架需要完备的核心组件能力。 |
| 缓存管理 | 缓存管理也是框架需要完备的核心组件能力。无论是内存还是Redis,无论是自研还是通过第三方组件引入。 |
| 资源打包 | 支持将依赖的文件资源例如静态资源、配置文件等固定文件编译到可执行文件中。框架组件自动支持资源检索。 |
| 链路跟踪 | 框架是否具备分布式链路跟踪能力,分布式跟踪在微服务架构中是必不可少的能力。 |
| 测试框架 | 框架是否支持单元测试接入,提供单元测试接入规范。无论是使用标准库还是第三方测试框架。 |
| 突出优点 | 比较明显的几点优点。 |
| 突出缺点 | 比较明显的几点缺点。 |
横向比较
- 以下部分对比参数涉及评分的部分,满分总共按照10分为标准。
- 如果标记为"-"的部分,表示不支持或者需要引入第三方插件支持。
- 以下特性如果官网提供文档则直接提供文档地址,找不到文档但是笔者知道有就会简单标注。
- 各个"框架"功能特性实现不同,在文档、功能、易用性上存在较大差异,各位朋友可自行查阅链接。
| GoFrame | Beego | Iris | Gin | |
|---|---|---|---|---|
| 比较版本 | v1.15.2 | v1.12.3 | v12.0.2 | v1.6.3 |
| 项目类型 | 开源(国内) | 开源(国内) | 开源(海外) | 开源(海外) |
| 开源协议 | MIT | Apache-2 | BSD-3-Clause | MIT |
| 框架类型 | 模块化框架 | Web框架 | Web"框架" | Web"框架" |
| 基本介绍 | 工程完备、简单易用,模块化、高质量、高性能、企业级开发框架。 | 最简单易用的企业级Go应用开发框架。 | 目前发展最快的Go Web框架。提供完整的MVC功能并且面向未来。 | 一个Go语言写的HTTP Web框架。它提供了Martini风格的API并有更好的性能。 |
| 项目地址 | http://github.com/gogf/gf | http://github.com/beego/beego | http://github.com/kataras/iris | http://github.com/gin-gonic/gin |
| 官网地址 | http://goframe.org | http://beego.me | http://iris-go.com | http://gin-gonic.com |
| 模块化设计 | 是 | - | - | - |
| 模块完善度 | 10 | 6 | 4 | 2 |
| 使用易用性 | 9 | 9 | 9 | 10 |
| 文档完善度 | 10 | 8 | 6 | 4 |
| 工程化完备 | 10 | 8 | 5 | 1 |
| 社区活跃 | 9 | 10 | 9 | 10 |
| 开发模式 | 模块引入、三层架构、MVC | MVC | MVC | - |
| 工程规范 | 分层设计、对象设计 | 项目结构 | - | - |
| 开发工具链 | gf工具链 | bee工具链 | - | - |
| Web: 性能测试 | 10 | 8 | 8 | 9 |
| Web: HTTPS | HTTPS & TLS | 支持 | CustomHttpConfiguration | 支持 |
| Web: HTTP2 | - | - | 支持 | 支持 |
| Web: WebSocket | WebSocket服务 | 有 | 有 | - |
| Web: 分组路由 | 路由注册-分组路由 | Namespace | GroupingRoutes | 有 |
| Web: 路由冲突处理 | 有 | - | 有 | - |
| Web: 域名支持 | 域名绑定 | - | - | - |
| Web: 文件服务 | 静态文件服务 | 静态文件处理 | ServingStaticFiles | 有 |
| Web: 多端口/实例 | 多端口监听、多实例监听 | - | RunMultipleServiceUsingIris | - |
| Web: 优雅重启/关闭 | 平滑重启特性 | 热升级 | GracefulShutdownOrRestart | GracefulRestartOrStop |
| ORM | ORM文档 | ORM文档 | - | - |
| Session | Session | Session | 有 | - |
| I18N支持 | I18N | I18N | Localization | - |
| 模板引擎 | 模板引擎 | View设计 | TemplateRendering | HtmlRendering |
| 配置管理 | 配置管理 | 参数配置 | - | CustomHttpConfig |
| 日志组件 | 日志组件 | Logging | - | - |
| 数据校验 | 数据校验 | 表单数据验证 | - | CustomValidators |
| 缓存管理 | 缓存管理 | Cache | - | - |
| 资源打包 | 资源管理 | bee工具bale命令 | - | - |
| 链路跟踪 | 链路跟踪 | - | - | - |
| 测试框架 | 单元测试 | - | Testing | Testing |
| 突出优点 | goframe主要以工程化和企业级方向为主,特别是模块化设计和工程化设计思想非常棒。针对业务项目而言,提供了开发规范、项目规范、命名规范、设计模式、开发工具链、丰富的模块、高质量代码和文档,社区活跃。作者也是资深的PHP开发者,PHP转Go的小伙伴会倍感亲切。 | beego开源的比较早,最早的一款功能比较全面的Golang开发框架,一直在Golang领域有着比较大的影响力,作者谢大多年组织着国内影响力比较大GopherCN活动。beego有着比较丰富的开发模块、开箱即用,提供了基于MVC设计模式的项目结构、开发工具链,主要定位为Web开发,当然也可以用于非Web项目开发。 | iris主要侧重于Web开发,提供了Web开发的一系列功能组件,基于MVC开发模式。iris这一年发展比较快,从一个Web Server的组件,也慢慢朝着beego的设计方向努力。 | gin专注于轻量级的Web Server,比较简单,易于理解,路由和中间件设计不错,可以看做替代标准库net/http.Server的路由加强版web server。献给爱造轮子的朋友们。 |
| 突出缺点 | 开源时间较晚,推广过于佛系,目前主要面向国内用户,未推广海外。 | 起步较早,自谢大创业后,近几年发展较慢。非模块化设计,对第三方重量级模块依赖较多。 | 号称性能最强,结果平平。非模块化设计。最近两年开始朝beego方向发展,但整体框架能力还不完备,需要加油。 | 功能简单易用,既是优点,也是缺点。 |
总结
对于入门者来说,选择一个易于学习的框架比较重要,我推荐Gin和Echo
对于企业开发者来说,需要结合自己的项目特点选择框架,框架只是项目实施的一部分,Go本身就提供了丰富的类库,框架的选择相比于优雅的进行业务实现并没有那么重要。我们可以结合自己的实际项目进行二次封装。
对待新框架的态度:我认为花时间复刻自己的项目,及时复盘,精通一个主流框架,主流语言,比花时间走马观花的了解框架更重要。
综合来说,不同的Golang Web框架都有各自的优缺点。选择一个合适的框架可以根据具体项目需求,比如性能要求、开发难易度、扩展支持等等因素进行权衡。
参考:
https://juejin.cn/post/7067347764899741709
https://zhuanlan.zhihu.com/p/350002797
相关文章:
GoNote第三章 主流框架加对比
GoNote第三章 主流框架加对比 Golang主流框架介绍 自从面市以来,Golang成为了程序员在编写API和开发Web服务时的首选之一。近90%的受访者表示会在自己下一组项目中持续使用Golang。与我们熟悉的C和C类似,Go语言也是现有Golang的“灵魂”。而Golang则是…...
Quartz框架详解分析
文章目录 1 Quartz框架1.1 入门demo1.2 Job 讲解1.2.1 Job简介1.2.2 Job 并发1.2.3 Job 异常1.2.4 Job 中断 1.3 Trigger 触发器1.3.1 SimpleTrigger1.3.2 CornTrigger 1.4 Listener监听器1.5 Jdbc store1.5.1 简介1.5.2 添加pom依赖1.5.3 建表SQL1.5.4 配置文件quartz.propert…...
Nginx专题-基于多网卡的主机配置
文章目录 Nginx 基于多网卡的主机实现一、虚拟机前置环境准备ifcfg-ens32配置文件的内容参考ifcfg-ens33配置文件的内容 二、案例演示修改nginx.conf配置文件解决中文乱码 Nginx 基于多网卡的主机实现 一、虚拟机前置环境准备 点击虚拟机右下角的 红色标框按钮,然后…...
4.2和4.3、MAC地址、IP地址、端口
计算机网络等相关知识可以去小林coding进行巩固(点击前往) 4.2和4.3、MAC地址、IP地址、端口 1.MAC地址的简介2.IP地址①IP地址简介②IP地址编址方式③A类IP地址④B类IP地址⑤C类IP地址⑥D类IP地址⑧子网掩码 3.端口①简介②端口类型 1.MAC地址的简介 …...
放弃 console.log 吧!用 Debugger 你能读懂各种源码
很多同学不知道为什么要用 debugger 来调试,console.log 不行么? 还有,会用 debugger 了,还是有很多代码看不懂,如何调试复杂源码呢? 这篇文章就来讲一下为什么要用这些调试工具: console.lo…...
epoll机制解析
一、epoll实现原理 1、实现原理 epoll通过3个方法来实现对句柄的监控操作,要深刻理解epoll,首先得了解epoll的三大关键要素:mmap、红黑树、链表。下面是epoll的框架图,如下: mmap epoll是通过内核与用户空间mmap同一块…...
基于 SpringBoot + Vue 实现的可视化拖拽编辑的大屏项目
今天给小伙伴们分享一个基于 SpringBoot Vue 实现的可视化拖拽编辑的大屏项目; 一、简介 这个是一个开源的一个BI平台,酷炫大屏展示,能随时随地掌控业务动态,让每个决策都有数据支撑。 多数据源支持,内置mysql、el…...
我们为什么要写作?
为什么要写书是一个很难回答的问题,因为从不同的角度,会有不同的答案。 最近ChatGPT很火!诸事不决,先问问ChatGPT,看看它是怎么回答的。 ChatGPT给出的答案还是比较全,虽然没有“一本正经的胡说八道”&…...
设计模式:创建者模式 - 建造者模式
文章目录 1.概述2.结构3.实例4.优缺点5.使用场景6.模式扩展 1.概述 将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。 分离了部件的构造(由Builder来负责)和装配(由Director负责)。 从而可以构造出复杂的对象。这个模式适用于:某…...
String a = new String(“abc“); 创建了几个对象?String a = “abc“; 呢?
String a new String(“abc”); 创建了几个对象?String a “abc”; 呢? 答案:String a new String(“abc”); 创建了1个或2个对象;String a “abc”; 创建了0个或1个都对象 String a new String(“abc”); 创建过程 首先在…...
keepalived+nginx安装
欢迎使用ShowDoc! 1、安装基础包: yum -y install libnl libnl-devel 2、上传包: tar -zxvf keepalived-2.0.20.tar.gz -C /data/imas/base_soft mkdir -p /data/imas/base_soft/keepalived cd /data/imas/base_soft/keepalived-2.0.20 .…...
硬盘格式化工具,强烈推荐这个!
案例:硬盘格式化工具推荐 【我的电脑已经用了好几年了,硬盘存储容量严重不够了,最近想把它格式化,但却不知道怎么操作,大家有什么比较好的硬盘格式化工具可以推荐吗?】 硬盘作为存储设备,我们…...
Python的异常捕获和处理
程序在运行过程当中,不可避免的会出现一些错误,比如:使用了没有赋值过的变量,使用了不存在的索引,一个数字除以0 …… 这些错误在程序中,我们称其为异常。 程序运行过程中,一旦出现异常将会导致…...
oracle学习之rownum和rowid
rownum先百度一波https://www.cnblogs.com/xfeiyun/p/16355165.html rownum是oracle特有的一个关键字。 对于基表,在insert记录时,oracle就按照insert的顺序,将rownum分配给每一行记录,因此在select一个基表的时候,r…...
为什么说过早优化是万恶之源?
Donald Knuth(高德纳)是一位计算机科学界的著名学者和计算机程序设计的先驱之一。他被誉为计算机科学的“圣经”《计算机程序设计艺术》的作者,提出了著名的“大O符号”来描述算法的时间复杂度和空间复杂度,开发了TeX系统用于排版…...
如何用 ModelScope 实现 “AI 换脸” 视频
前言 当下,视频内容火爆,带有争议性或反差大的换脸视频总能吸引人视线。虽然 AI 换脸在市面上已经流行了许久,相关制作工具或移动应用也是数不胜数。但是多数制作工具多数情况下不是会员就是收费,而且替换模板有限。以下在实战的角…...
怎么样成为一名Python工程师?到底要会哪些东西?你会了多少?
目录 重点:爬虫部分项目、源码展示python数据分析可视化大屏看板python爬虫爬取淘宝卤鸭货商品数据python游戏开发python自动化办公 重点: 1、做一名程序员,绝对要耐得住寂寞,并且要一直有点兴趣促进你学习。如果你完全没兴趣&am…...
项目前期1.0
今天是项目的第二天 昨天一顿迷茫,可恶 今天啥也不关先来点基本的构架 #include<queue>//队列 #define FALSE 0 #define TRUE 1 #define ERROR 0 #define OK 1 #define nocnect 999999//未链接的距离 #define maxplace 31//景区的观景点的最大个30数不要0下标的 #defi…...
MySQL语句执行耗时分析
MySQL语句执行耗时分析 MySQL Profile查看SQL执行各阶段耗时Performance Schema查看SQL执行各阶段耗时配置收集哪些用户的SQL执行信息开启SQL执行信息收集的相关特性执行目标SQL获取SQL执行的EVENT_ID获取SQL执行各阶段耗时 MySQL Profile查看SQL执行各阶段耗时 --开启SQL Pro…...
FVM链的Themis Pro(0x,f4) 5日IDO超百万美元,领Filecoin重回高点
交易一直是 DeFi 乃至web3领域最经久不衰的话题,也因此催生了众多优秀的去中心化协议,如 Uniswap 和 Curve。这些协议逐渐成为了整个系统的基石。 在永续合约方面,DYDX 的出现将 WEB2 时代的订单簿带回了web3。其链下交易的设计,仿…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...
R 语言科研绘图第 55 期 --- 网络图-聚类
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...
适应性Java用于现代 API:REST、GraphQL 和事件驱动
在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...
通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器
拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件: 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...
