判断切片是否相同的两种方式性能比较

比较两个切片可以使用两种方式:

  1. 遍历切片比较每个元素,可以判断临界条件以快速失败提高性能
  2. 使用反射,reflect.DeepEqual(x, y any) bool,因为是通用型函数,并且使用反射获取类型信息,在有性能要求的场景中不建议使用

Kesa...大约 2 分钟golang
GeeCache 笔记总结

1. LRU 缓存策略

implement lru algorithm with golang
implement lru algorithm with golang

Kesa...大约 7 分钟golang
GeeORM 笔记总结

1. 核心思想

1.1 标准库 database/sql

SQL 语句的执行是对标准库方法的封装:

type Session struct {
	db       *sql.DB
	...
}

...

func (s *Session) Exec() (sql.Result, error) {
	defer s.Clear()
	log.Info(s.sql.String(), s.sqlVars)
	res, err := s.DB().Exec(s.sql.String(), s.sqlVars...)
	if err != nil {
		log.Error(err)
	}
	return res, err
}

Kesa...大约 8 分钟golang
GeeRPC 笔记总结

RPC(Remote Procedure Call,远程过程调用)是一种计算机通信协议,允许调用不同进程空间的程序。RPC 的客户端和服务器可以在一台机器上,也可以在不同的机器上。使用时,就像调用本地程序一样,无需关注内部的实现细节。


Kesa...大约 14 分钟golang
Gee 笔记总结

1. 核心思想

Gee 的基本原理是实现http.Handler接口:

package http

type Handler interface {
    ServeHTTP(w ResponseWriter, r *Request)
}

func ListenAndServe(address string, h Handler) error

Kesa...大约 3 分钟golang
channel 底层实现总结

1. 数据结构

type hchan struct {
	qcount   uint
	dataqsiz uint
	buf      unsafe.Pointer
	elemsize uint16
	closed   uint32
	elemtype *_type
	sendx    uint
	recvx    uint
	recvq    waitq
	sendq    waitq

	lock mutex
}

Kesa...大约 4 分钟golang
同步原语与锁

1. Mutex

数据结构

type Mutex struct {
	state int32
	sema  uint32
}

Kesa...大约 7 分钟golang
defer 底层实现总结

1. 数据结构

runtime._defer是延迟调用链表上的元素,所有的runtime._defer构成一个单向链表。


Kesa...大约 4 分钟golang
2