Fred

学习是反复的事情

Fred's Github chart

8-2.sqlx的使用

在项目中我们通常可能会使用database/sql连接MySQL数据库。本文借助使用sqlx实现批量插入数据的例子,介绍了sqlx中可能被你忽视了的sqlx.In和DB.NamedExec方法。 一. 基本操作 1. sqlx介绍 在项目中我们通常可能会使用database/sql连接MySQL数据库。sqlx

8-1.Go中的Mutex和RWMutex

互斥锁(Mutex): 当一个goroutine获得互斥锁后,其他goroutine无法在使用被上锁的资源,只能等待资源释放 读写锁 (RWMutex): RWMutex是单写多读锁,该锁可以加多个读锁或者一个写锁 1 Mutex: 互斥锁 结构 1 2 3 4 type Mutex struct { state int32 // 表示互斥锁的状态,比如是否被锁定等。 sema uint32 // sema表示信号量,协程阻塞等待该

7.Go异常处理

1 panic和recover使用场景 1.1 1. panic 程序报错退出,返回码是os.exit(0) 对于真正意外的情况,那些表示不可恢复的程序错误,例如索引越界、不可恢复的环境问题、栈溢出,我们才使用 panic。对于其他的错误情况,我们应该是期望使用 error 来进行判定。 速错推荐panic 1.2 2. recover 从 panic 恢复 tip场景: 别人写的

6-2.高性能日志库zap

1 高性能日志库zap doc: https://github.com/uber-go/zap 安装和基本使用 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 // go get -u go.uber.org/zap package main import ( "go.uber.org/zap" ) func main() { logger, _ := zap.NewProduction() defer logger.Sync() // flushes buffer, if any url := "https://imooc.com" sugar := logger.Sugar() sugar.Infow("failed to fetch URL", // Structured context as loosely typed key-value pairs. "url", url, "attempt", 3, ) sugar.Infof("Failed to fetch URL: %s", url) } Zap提供了两种类型的日志记录器—Sugared Logger和Logger。 在性能很好但不是很关键的上下文中,使用

6-1.配置管理库—Viper

线上线下配置隔离 在自己本地创建一个环境变量 ENV_DEBUG=1 Go配置管理—Viper 安装go get github.com/spf13/viper 1 什么是Viper?Viper是适用于Go应用程序(包括Twelve-Factor App)的完整配置解决方案。它被设计用于在应用程序中工作,并且可以处理所有类型的配置需求和格式。它支持以下特性: 设置默认值 从JSON、TO

5.TCP网络连接以及TIME_WAIT的意义

1 一. 三次握手 1.0.1 tcp在建立连接时需要三次握手:1.accept接受过程中等待客户端的连接,当客户端发起连接时,会发起一个syn连接请求, 2.服务端收到该连接请求之后会立即响应一个ack的响应,与此同时还会向客户端发送一个syn连接请求 3.当客户端收到服务端的ack响应请求和syn连接请求之后,再向

4-2控制goroutine的数量

一. 不控制goroutine数量 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 package main import ( "fmt" "math" "runtime" ) func main() { //模拟用户需求业务的数量 task_cnt := math.MaxInt64 for i := 0; i < task_cnt; i++ { go func(i int) { //... do some busi... fmt.Println("go func ", i, " goroutine count = ", runtime.NumGoroutine()) }(i) } } // panic: too many concurrent operations on a single file or socket (max 1048575) 我们迅速的开辟goroutine(不控制并发的 goroutine 数量 )会在短时间内占据操作系统的资

4-1.单点Server的N种并发模型汇总

主要介绍常见的Server的并发模型,这些模型与编程语言本身无关,有的编程语言可能在语法上直接透明了模型本质,所以开发者没必要一定要基于模型去编写,只是需要知道和了解并发模型的构成和特点即可。 1 模型一、单线程Accept(无IO复用) 1.0.1 (1) 模型结构图 1.0.2 (2) 模型分析① 主线程main thread执行阻塞Ac

3.分布式从ACID、CAP、BASE的理论推进

分布式实际上就是单一的本地一体解决方案,在硬件或者资源上不够业务需求,而采取的一种分散式多节点,可以扩容资源的一种解决思路。它研究如何把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分,然后把这些部分分配给多个计算机进行处理,最后把这些计算结果综合起来得到最终的结果。 一. 从本地事务到分布式理

2-1.流和IO多路复用

一. 流, I/O操作, 阻塞 1 1. 流 可以进行I/O操作的内核对象 文件、管道、套接字…… 流的入口:文件描述符(fd) 2 2. I/O操作 所有对流的读写操作,我们都可以称之为IO操作。 当一个流中, 在没有数据read的时候,或者说在流中已经写满了数据,再write,我们的IO操作就会出现一种现象,就是阻塞现象,如下图
0%