Idea激活2022.2.3(IntelliJ IDEA 2022.2 EAP 3 发布,带来更换字体大小的快捷键)

Idea激活2022.2.3(IntelliJ IDEA 2022.2 EAP 3 发布,带来更换字体大小的快捷键)

IntelliJ IDEA 2022.2 的第三个 EAP 版本已经发布,此版本带来用于更改所有编辑器字体大小的快捷方式、使用 IntelliJ Profiler 更新快照记录、支持 Groovy 集成查询等新功能。

用户体验

更改全局字体大小的键盘快捷键 

该版本引入可更改所有编辑器字体大小的键盘快捷键, 要增加字体大小,请按 ⌃⇧. /Alt+Shift+. ;要减小字体,请按 ⌃⇧,/Alt+Shift+Comma。

Idea激活2022.2.3(IntelliJ IDEA 2022.2 EAP 3 发布,带来更换字体大小的快捷键)

Groovy

支持 GINQ

添加了对 Groovy 集成查询 (GINQ) 的支持,IDE 现在为 Groovy 4 的 GINQ 功能提供语法突出显示、代码完成和检查。 

Idea激活2022.2.3(IntelliJ IDEA 2022.2 EAP 3 发布,带来更换字体大小的快捷键)

IntelliJ Profiler

升级了 IntelliJ Profiler,让收集快照变得更加容易。开始分析时,CPU 和堆内存实时图表与控制台并排显示。

Idea激活2022.2.3(IntelliJ IDEA 2022.2 EAP 3 发布,带来更换字体大小的快捷键)

编辑器

控制自动插入括号的新设置

该版本添加了一个选项,可以设置 IDE 是否在代码补全时自动插入括号,该设置以前仅适用于 JavaScript,现在也可用于其他语言。

Idea激活2022.2.3(IntelliJ IDEA 2022.2 EAP 3 发布,带来更换字体大小的快捷键)

 

以上是新版 EAP 带来的关键更新,有关最新改进的完整列表,请查看发行说明。 

租户模式 描述 优点 缺点 NONE (非租户模式) 没有租户 简单、适合独立系统 缺少租户系统的优点 COLUMN (字段模式) 租户共用一个数据库,在业务表中增加字段来区分 简单、不复杂、开发无感知 数据隔离性差、安全性差、数据备份和恢复困难、 SCHEMA (独立数据库) 每个租户独立一个 数据库 (schema),执行 sql 时,动态在表名前增加 schema 简单、开发无感知、数据隔离性好 配置文件中必须配置数据库的 root 账号、不支持复杂 sql 和 sql 嵌套自定义函数 DATASOURCE (独立数据源) 每个租户独立一个数据源,执行代码时,动态切换数据源 可独立部署数据库,数据隔离性好、扩展性高、故障影响小 相对复杂、开发需要注意切换数据源时的事务问题、需要较多的数据库 SCHEMA_COLUMN (独立数据库 + 字段模式) 每个租户独立一个 数据库,执行代码时,先动态切换数据源,在动态拼接 子租户 id 进行二次隔离 简单、开发无感知、数据隔离性好、支持大租户小门店形式 配置文件中必须配置数据库的 root 账号、不支持复杂 sql 和 sql 嵌套自定义函数 DATASOURCE_COLUMN (独立数据源 + 字段模式) 每个租户独立一个 数据库 (数据源),执行代码时,动态切换数据源,在动态拼接 子租户 id 二次隔离 可独立部署数据库,数据隔离性好、扩展性高、故障影响小、支持大租户小门店形式 相对复杂、开发需要注意切换数据源时的事务问题、需要较多的数据库 技术 版本 说明 Spring Boot 3.0.0-SNAPSHOT 容器 + MVC 框架 MyBatis 3.5.9 ORM 框架 MyBatis-Plus 3.5.1 MyBatis 增强工具 JJWT 0.11.5 JWT 登录支持 Lombok 1.18.24 简化对象封装工具 Caffeine 3.1.0 本地缓存支持 Redis 7.0 分布式缓存支持 MySQL 8.0 数据库服务 ShardingSphere-JDBC 5.1.1 数据库分库分表支持 Elasticsearch 8.2.0 搜索引擎服务 RabbitMQ 3.10.2 开源消息中间件 XXL-JOB 2.3.1 分布式任务调度平台 Sentinel 1.8.4 流量控制组件 Undertow 2.2.17.Final Java 开发的高性能 Web 服务器 Docker – 应用容器引擎 Jenkins – 自动化部署工具 Sonarqube – 代码质量控制 版本名称 版本说明 版本地址 GoFrame+Layui 混编版 采用 GoFrame、Layui 等框架研发 https://gitee.com/easygoadmin/EasyGoAdmin_GoFrame_Layui Beego+Layui 混编版 采用 Beego、Layui 等框架研发 https://gitee.com/easygoadmin/EasyGoAdmin_Beego_Layui Gin+Layui 混编版 采用 Gin、Layui 等框架研发 https://gitee.com/easygoadmin/EasyGoAdmin_Gin_Layui Iris+Layui 混编版 采用 Iris、Layui 等框架研发 https://gitee.com/easygoadmin/EasyGoAdmin_Iris_Layui GoFrame+EleVue 前后端分离版 采用 GoFrame、Vue、ElementUI 等框架研发前后端分离版本 https://gitee.com/easygoadmin/EasyGoAdmin_GoFrame_EleVue Beego+EleVue 前后端分离版 采用 Beego、Vue、ElementUI 等框架研发前后端分离版本 https://gitee.com/easygoadmin/EasyGoAdmin_Beego_EleVue Gin+EleVue 前后端分离版 采用 Gin、Vue、ElementUI 等框架研发前后端分离版本 https://gitee.com/easygoadmin/EasyGoAdmin_Gin_EleVue Iris+EleVue 前后端分离版 采用 Iris、Vue、ElementUI 等框架研发前后端分离版本 https://gitee.com/easygoadmin/EasyGoAdmin_Iris_EleVue GoFrame+AntdVue 前后端分离版 采用 GoFrame、Vue、AntDesign 等框架研发前后端分离版本 https://gitee.com/easygoadmin/EasyGoAdmin_GoFrame_AntdVue Beego+AntdVue 前后端分离版 采用 Beego、Vue、AntDesign 等框架研发前后端分离版本 https://gitee.com/easygoadmin/EasyGoAdmin_Beego_AntdVue Gin+AntdVue 前后端分离版 采用 Gin、Vue、AntDesign 等框架研发前后端分离版本 https://gitee.com/easygoadmin/EasyGoAdmin_Gin_AntdVue Iris+AntdVue 前后端分离版 采用 Iris、Vue、AntDesign 等框架研发前后端分离版本 https://gitee.com/easygoadmin/EasyGoAdmin_Iris_AntdVue

之前我们已经看过了 Golang 常见设计模式中的装饰和选项模式,今天要看的是 Golang 设计模式里最简单的单例模式。单例模式的作用是确保无论对象被实例化多少次,全局都只有一个实例存在。根据这一特性,我们可以将其应用到全局唯一性配置、数据库连接对象、文件访问对象等。Go 语言实现单例模式的方法有很多种,下面我们就一起来看一下。

饿汉式

饿汉式实现单例模式非常简单,直接看代码:


singleton 包在被导入时会自动初始化 instance 实例,使用时通过调用 singleton.GetSingleton() 函数即可获得 singleton 这个结构体的单例对象。

这种方式的单例对象是在包加载时立即被创建,所以这个方式叫作饿汉式。与之对应的另一种实现方式叫作懒汉式,懒汉式模式下实例会在第一次被使用时被创建。

需要注意的是,尽管饿汉式实现单例模式的方式简单,但大多数情况下并不推荐。因为如果单例实例化时初始化内容过多,会造成程序加载用时较长。

懒汉式

接下来我们再来看下如何通过懒汉式实现单例模式:


相较于饿汉式的实现,懒汉式将实例化 singleton 结构体部分的代码移到了 GetSingleton() 函数内部。这样能够将对象实例化的步骤延迟到 GetSingleton() 第一次被调用时。

不过通过 instance == nil 的判断来实现单例并不十分可靠,如果有多个 goroutine 同时调用 GetSingleton() 就无法保证并发安全。

支持并发的单例

如果你使用 Go 语言写过并发编程,应该很快能想到该如何解决懒汉式单例模式并发安全问题,比如像下面这样:


上面代码的修改是通过加锁机制,即在 GetSingleton() 函数最开始加了如下两行代码:


加锁的机制可以有效保证这个实现单例模式的函数是并发安全的。

不过使用了锁机制也带来了一些问题,这让每次调用 GetSingleton() 时程序都会进行加锁、解锁的步骤,从而导致程序性能的下降。

双重锁定

加锁会导致程序性能下降,但又不用锁又无法保证程序的并发安全。为了解决这个问题有人提出了双重锁定(Double-Check Locking)的方案:


通过上面的可以看到,所谓双重锁定实际上就是在程序加锁前又加了一层 instance == nil 判断,通过这种方式来兼顾性能和安全两个方面。不过这让代码看起来有些奇怪,外层已经判断了 instance == nil,但是加锁后又进行了第二次 instance == nil 判断。

其实外层的 instance == nil 判断是为了提高程序的执行效率,免去原来每次调用 GetSingleton() 都上锁的操作,将加锁的粒度更加精细化。简单说就是如果 instance 已经存在,则无需进入 if 逻辑,程序直接返回 instance 即可。而内层的 instance == nil 判断则考虑了并发安全,考虑到万一在极端情况下,多个 goroutine 同时走到了加锁这一步,内层判断会在这里起到作用。

Gopher 惯用方案

虽然双重锁定机制兼顾和性能和并发安全,但显然代码有些丑陋,不符合广大 Gopher 的期待。好在 Go 语言在 sync 包中提供了 Once 机制能够帮助我们写出更加优雅的代码:


Once 是一个结构体,在执行 Do 方法的内部通过 atomic 操作和加锁机制来保证并发安全,且 once.Do 能够保证多个 goroutine 同时执行时 &singleton{} 只被创建一次。

其实 Once 并不神秘,其内部实现跟上面使用的双重锁定机制非常类似,只不过把 instance == nilIdea激活2022.2.3 换成了 atomic 操作,感兴趣的同学可以查看下其对应源码。

总结

以上就是 Go 语言中实现单例模式的 Idea激活2022.2.3几种常用套路,经过对比可以得出结论,最推荐的方式是使用 once.Do 来实现,sync.Once 包帮我们隐藏了部分细节,却可以让代码可读性得到很大提升。

推荐阅读

Golang 常见设计模式之装饰模式

Golang 常见设计模式之选项模式

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/176170.html

(0)
上一篇 2024年 7月 31日 下午1:28
下一篇 2024年 7月 31日 下午1:36

相关推荐

关注微信