依赖注入工具-wire
wire 简介Wire 是一种代码生成工具,其使用依赖注入自动连接组件。 在 Wire 中,组件之间的依赖关系是通过函数参数来表示的。 组件 B 依赖组件 A,那么构造组件 B 的函数大致需要定义为:NewB(a A) B。 这里,鼓励显式初始化组件 A,而不是,定义一个组件 A 全局变量,然后不通过传参而直接在 NewB 函数中使用全局变量。 wire 安装1go get github.com/google/wire/cmd/wire 确保 $GOPATH/bin 已添加到 $PATH 环境变量。 wire 基础概念在 wire 中,有两个核心概念:Providers、Injectors。 Providerswire 的主要机制是 Provider:具有返回值的函数。 这些函数都是常规的 go 代码。 12345678910package foobarbaztype Foo struct { X int}// ProvideFoo 函数返回一个 Foo 结构体值。func ProvideFoo() Foo { return...
Golang的协程调度器原理及GMP设计思想
Golang的协程调度器原理及GMP设计思想一、Golang“调度器”的由来?(1)...
sql优化方法
sql优化是一个大家都比较关注的热门话题,无论你在面试,还是工作中,都很有可能会遇到。 如果某天你负责的某个线上接口,出现了性能问题,需要做优化。那么你首先想到的很有可能是优化sql语句,因为它的改造成本相对于代码来说也要小得多。 那么,如何优化sql语句呢? 这篇文章从15个方面,分享了sql优化的一些小技巧,希望对你有所帮助。 1 避免使用select * 很多时候,我们写sql语句时,为了方便,喜欢直接使用select *,一次性查出表中所有列的数据。 反例: 1select * from user where id=1; 在实际业务场景中,可能我们真正需要使用的只有其中一两列。查了很多数据,但是不用,白白浪费了数据库资源,比如:内存或者cpu。 此外,多查出来的数据,通过网络IO传输的过程中,也会增加数据传输的时间。 还有一个重要的问题是:select *不会走覆盖索引,会出现大量的回表操作,而从导致查询sql的性能很低。 那么,如何优化呢? 正例: 1select name,age from user where...