disadvantage
- 输出日志不方便,直接输出无法用于辅助定位错误,指针直接输出是一串地址
1 | unexpected fault address 0x7f01d3b9f000 |
1 | go build github.com/cespare/xxhash/v2: mkdir .... no space left on device |
1 | compile: writing output: write $WORK/....../_pkg_.a: no space left on device |
1 | unexpected fault address 0x7f713df35000 |
Linux 查看端口占用情况可以使用 lsof 和 netstat 命令。
lsof(list open files)是一个列出当前系统打开文件的工具。
lsof -i:端口号
查看服务器 8000 端口的占用情况:
1 | # lsof -i:8000 |
其他参数
1 | lsof -i:8080:查看8080端口占用 |
netstat -tunlp 用于显示 tcp,udp 的端口和进程等相关情况。
1 | netstat -tunlp | grep 端口号 |
更多命令
1 | netstat -ntlp //查看当前所有tcp端口 |
判断机器位数
1 | const intSize = 32 << (^uint(0) >> 63) |
在64平台系统:
1. uint(0)在平台底层是0x0000000000000000
2. ^uint(0)在平台底层是0xFFFFFFFFFFFFFFFF
3. ^uint(0) >> 63 在底层平台是0x0000000000000001,也就是1
4. 32 << 1 结果是32*2 = 64
1 | type Sorter interface{ |
断言防止panic,使用安全方式
1 | var list interface{} |
反射,通过CanSet()判断反射得到的值能否修改
1 | var f float64=3 |
反射在标准库中大量使用,fmt.Fprintf及其他格式化函数大多使用反射实现;
1 | //fmt.Fprintf |
如下为system使用自定义字段
1 | type System struct{ |
为自定义类型实现接口Value/Scan
1 | func (s System)Value()(driver.Value, error) { |
json查询,例如这里要查询version=1.0的System
1 | select * from table_t |
预加载依赖在领域层结构体变量的gorm tag,需要在结构体上变量上增加外键tag,tag有多种写法,根
领域对象间的不同关系如:belongs to/has one/has many等有不同写法.
排序
1 | // 文档:https://gorm.io/zh_CN/docs/preload.html |
2.
常用
指定从数据库检索记录时的排序方式
1 | db.Order("age desc, name").Find(&users) |
order by field 自定义排序
使用上面的写法通过自定义字段排序时注意,WithoutParentheses为true,为false是构建的sql为order by field(column,(“f1,f2,f3,…”)),会报错
组合排序
1 | select id,status,create_time |
如上的sql使用gorm框架可以这么写:
1 | res:=[]*Order{} |
不能使用链式调用(gorm v2版本,版本号:gorm.io/gorm v1.20.11),如:
1 | db.Clauses(clause.OrderBy{ |
参考文档
强制索引
1 | import "gorm.io/hints" |
Index 用于提高数据检索和 SQL 查询性能。 Index Hints 向优化器提供了在查询处理过程中如何选择索引的信息。与 optimizer 相比,它可以更灵活地选择更有效的执行计划
1 | db.Table("`order` FORCE INDEX (order_create_time_d977ab1e,idx_demand_number, idx_stocked_number,idx_di)"). |
gorm 连接池配置通过sql.DB实现
1 | gormDB,err:=gorm.Open(...) |
koroFileHeader
功能: 自动在文件头或函数头增加注释
url: https://marketplace.visualstudio.com/items?itemName=OBKoro1.korofileheader
函数
1 | /** |
文件
1 | <!-- |
1 | 在.vscode下的settigns.json增加配置 |
What
高性能
分布式
多个分布式节点共享分布式内存,与传统部署方式不同,节点越多,memcached的可用内存越多.
memory object caching system
key-value
LRU (memory manage algorithm)