聊聊dbsync的Schedulable
Schedulable定义了URL、ID、*contract.Sync、Schedule、Status、status属性;NewSchedulableFromURL方法根据URL来创建Schedulable
2021-04-22
聊聊eventhorizon的EventBus
序本文主要研究一下eventhorizon的EventBusEventBuseventhorizon/eventbus.go {代码...} EventBus接口内嵌了EventHandler接口,定义了AddHandler、Errors、Wait方法EventBuseventhorizon/eventbus/local/eventbus.go {代码...} EventBus定义了group、registered、registeredMu、errCh、wg、codec属性;HandleEvent方法先...
2021-04-01
聊聊gost的GoSafely
GoSafely接收WaitGroup、ignoreRecover、handler、catchFunc参数,其大致的模板是,首先对WaitGroup进行add(1),然后一步执行带defer的handler
2021-02-17
聊聊gost的CountWatch
CountWatch定义了start属性,它提供了Start、Reset、Count方法;其中Start方法判断start为初始值的时候设置为time.Now;Reset设置start为time.Now;Count计算当前时间距离start的纳秒数
2021-02-22
聊聊loki的Query
序本文主要研究一下loki的QueryQueryloki/pkg/logql/engine.go {代码...} Query接口定义了Exec方法,返回Result;Result定义了Data、Statistics属性Execloki/pkg/logql/engine.go {代码...} Exec方法执行q.Eval(ctx)及stats.SnapshotEvalloki/pkg/logql/engine.go {代码...} Eval方法执行q.parse解析为Expr,之后根据Exp...
聊聊React的Context
如上面的组件树中,A组件与B组件之间隔着非常多的组件,假如A组件希望传递给B组件一个属性,那么不得不使用props将属性从A组件历经一系列中间组件传递给B组件。这样代码不仅非常的麻烦,更重要的是中间的组件可能压根就用不上这个属性,却要承担一个传递的职责,这是我们不希望看见的。Context出现的目的就是为了解决这...
聊聊gorm的Transaction
DB的Transaction方法针对非TxCommitter类型的db.Statement.ConnPool执行db.Begin,之后注册defer针对panicked或者err的执行tx.Rollback(),执行fc之后,判断err为nil的情况下执行tx.Commit(),并将Error赋值为err
2021-01-12
聊聊gorm的CreateInBatches
CreateInBatches会根据batchSize来分配进行create,但是他们是在同一个事务的,其rowsAffected是每个批次的rowsAffected的累加
聊聊klog的klogger
logr类似java的slf4j,其Logger接口定义了Enabled、Info、Error、V、WithValues、WithName方法
聊聊klog的Flush
序本文主要研究一下klog的FlushFlushk8s.io/klog/v2@v2.4.0/klog.go {代码...} Flush方法执行的是logging.lockAndFlushAll()initk8s.io/klog/v2@v2.4.0/klog.go {代码...} klog的init方法异步协程执行logging.flushDaemon()logging.flushDaemon()k8s.io/klog/v2@v2.4.0/klog.go {代码...} flushDaemon方法range新建ticke...
聊聊gorm的GroupBy
gorm的GroupBy定义了Columns和Having属性,其Build方法遍历Columns,最后针对Having在拼接Having子句。
2021-01-19
聊聊zerolog的Formatter
序本文主要研究一下zerolog的FormatterFormattergithub.com/rs/zerolog@v1.20.0/console.go {代码...} Formatter接口定义了一个func用于将interface{}转换为stringConsoleWritergithub.com/rs/zerolog@v1.20.0/console.go {代码...} ConsoleWriter定义了TimeFormat、FormatTimestamp、FormatLevel、FormatCaller、Format...
2021-01-06
聊聊gorm的DeletedAt
DeletedAt为sql.NullTime类型,它实现了Scanner接口的Scan方法,实现了Valuer接口的Value方法;同时定义了MarshalJSON、UnmarshalJSON方法,还定义了QueryClauses方法,使用的是SoftDeleteQueryClause;DeleteClauses方法使用的是SoftDeleteDeleteClause
聊聊gorm的IsolationLevel
golang定义了IsolationLevel,分别为LevelDefault、LevelReadUncommitted、LevelReadCommitted、LevelWriteCommitted、LevelRepeatableRead、LevelSnapshot、LevelSerializable、LevelLinearizable
2021-01-11
聊聊mybatis的ParamNameResolver
在mybatis的interceptor获取MapperMethod.ParamMap这种参数类型时,经常会多出param1,param2,collection,list,array这些参数,这些不是接口自己定义的,而是ParamNameResolver自动添加的
2023-08-28
聊聊nacos的DistroMapper
nacos-1.1.3/naming/src/main/java/com/alibaba/nacos/naming/cluster/servers/ServerChangeListener.java
2019-09-09
聊聊springboot的Customizer
序本文主要研究一下springboot的CustomizerTaskExecutorCustomizer {代码...} 之后再构造的时候通过ObjectProvider获取即可 {代码...} TaskSchedulerCustomizer {代码...} RestTemplateCustomizer {代码...} 小结springboot提供了很多Customizer接口方便用户自行扩展,非常值得设计组件的时候使用
2023-08-22