golang高级编程技巧
https://github.com/chai2010/advanced-go-programming-book/blob/master/ch5-web/ch5-03-middleware.md
其他
- 本地包无法导入,需要将本地的路径添加为gopath,这个路径必须是标准go环境的路径,导入方式按照路径导入即可: import “gogogo/dome/lib”
名词
- QPS : Query Per Second 每秒查询量,这个针对的是服务器上数据的读取操作
- TPS : Transaction Per Second 每秒事务处理量 ,这个针对的是服务器上数据的写入和修改操作
- 这两个指标只是参考,实际还有其他参考指标,平均无故障时间,负载持续时间,以及软件的系统资源使用情况
- 载荷处理超时时间 : 评判软件正确性的重要标准
- 如果某个api持续承受高负载时间过长,就需要考虑api设计是否合理,软件系统是否需要拆分
这一部分关于软件的评判标准来自于本书地200页。
time
1 2 3 4 5 6 7
|
time.NewTimer(timeout)
time.Sleep(time.Millisecond)
time.After(timer.Second)
|
chan
1 2 3 4 5 6 7 8 9 10
|
for{ select { case intChan <- 1: case intChan <- 2: case intChan <- 3: } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13
| <-chan
close(chan)
struct{}{}
var mapChan = make(chan map[string]*Counter,1) countMap := nap[string[*Counter{ "count":&Counter{}, }
|
可以利用 (chan struct{}{},并发量) 来控制并发量
vs code test configuration
1 2 3 4 5 6 7 8 9 10 11 12
| { "name": "Test", "type": "go", "request": "launch", "mode": "test", "port": 2345, "host":"127.0.0.1", "program": "${workspaceFolder}/src/gogogo/loadgen/load_test.go", "env": {}, "args": [], "showLog": true }
|
sync.WaitGroup
1 2
| waitGrou.Add(count) waitGroup.Done()
|
Done次数或者Add(负数)使wg等待次数小于0会引发运行时恐慌。
- Mutex : 互斥锁
- RWMutext : 读写锁 Lock/Unlock 写锁定和写解锁,RLock/RUnlock 读锁定和读解锁。Unlock会解锁因RLock而阻塞的goroutine,RUnlock只会在没有任何Lock的情况下,试图唤醒因为进行Lock而锁定的goroutine。
- sync.Cond : 条件变量
api to be investigate
参考
Go语言高级编程