比较两个切片可以使用两种方式:
- 遍历切片比较每个元素,可以判断临界条件以快速失败提高性能
- 使用反射,
reflect.DeepEqual(x, y any) bool
,因为是通用型函数,并且使用反射获取类型信息,在有性能要求的场景中不建议使用
...大约 2 分钟
比较两个切片可以使用两种方式:
reflect.DeepEqual(x, y any) bool
,因为是通用型函数,并且使用反射获取类型信息,在有性能要求的场景中不建议使用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
}
RPC(Remote Procedure Call,远程过程调用)是一种计算机通信协议,允许调用不同进程空间的程序。RPC 的客户端和服务器可以在一台机器上,也可以在不同的机器上。使用时,就像调用本地程序一样,无需关注内部的实现细节。
Gee 的基本原理是实现http.Handler
接口:
package http
type Handler interface {
ServeHTTP(w ResponseWriter, r *Request)
}
func ListenAndServe(address string, h Handler) error
以 gov1.18为例总结 map 的底层实现。
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
}
type Mutex struct {
state int32
sema uint32
}
runtime._defer
是延迟调用链表上的元素,所有的runtime._defer
构成一个单向链表。
panic
关键字在 Go 语言的源代码是由数据结构 runtime._panic
表示的: