阅读本文大约需要 3.47 分钟。

21 世纪了,还信这些?

请务必保持理性,我们不猜测,依易理,重逻辑。我相信绝对有人能看懂,收获颇丰。

看文之前,先默念一遍天干地支,有基础的可以略过。
十天干:
甲乙丙丁戊己庚辛壬癸
十二地支:
子丑寅卯辰巳午未申酉戌亥

这是个女命,初学的看到甲乙丙丁,子丑寅卯肯定不知道从哪下手。

乙☐己甲
☐午亥子






阅读全文

阅读本文大约需要 3.13 分钟。

01

点进来的朋友,有多少人跟我一样,盼望着春节 A 股开市的大红包呢?期望有多大,失望就有多大。

如果你点开文章是冲着代码来的,还真没有,我不荐股,文中出现的字眼均不构成投资意见。

回顾节后的两个交易日,我深刻反思,终究是定力不足,管不住手,检讨一下。

“你永远赚不到超出自己认知范围外的钱,除非靠运气。靠运气赚的钱往往靠实力亏掉。”



阅读全文

背景

对于大多数 Gopher 来说,编写 Go 程序会直接在目录建立 main.go,xxx.go,yyy.go……

不是说不好,对于小型工程来说,简单反而简洁明了,我也提倡小工程没必要整一些花里胡哨的东西。

毕竟 Go 语言作为现代微服务的开发新宠,各个方面都比较自由,没有很多约束。我想,这也是它充满活力的原因。

对于大型工程而言,或者团队协作中,没有明确的规范,只会使得项目越来越凌乱……

因为每个人的心中对代码的管理、组织,对业务的理解不完全是一致的。

我参考了 非官网社区的规范 以及公司的规范,谈谈平时是怎么组织的,希望我的理解,对大家有所帮助。

目录结构示例

.
├── api                          路由与服务挂接
├── cmd                          程序入口,可以有多个程序
│   └── server
│       ├── inject               自动生成依赖注入代码
│       └── main.go
├── config                       配置相关文件夹
├── internal                     程序内部逻辑
│   ├── database
│   │   ├── redis.go 
│   │   └── mysql.go
│   ├── dao                      数据库操作接口/实现
│   │   ├── dao_impls
│   │   │   └── user_impls.go
│   │   └── user.go              用户 DAO 接口
│   ├── svc_impls                服务接口实现
│   │   ├── svc_auth
│   │   └── svc_user
│   └── sdks                     外部 SDK 依赖
└── service                      服务接口定义
        ├── auth.go              认证服务定义
        └── user.go              用户服务定义

面向接口编程

正如你所看到的,我的目录结构将接口和实现分开存放了。

根据依赖倒置原则(Dependence Inversion Principle),对象应依赖接口,而不是依赖实现。

阅读全文

今天在业务上云的时候,遇到了些问题。最终发现问题的根源不好排查,于是——

把生产环境的全量配置文件,还有日志全量打包下载到开发机器分析!

刚入职不是很久的整个运维团队,也不是很熟悉生产环境(有时候觉得自己就是个运维哈哈哈哈),于是把机器下线后,一顿 tar 压缩,就准备 scp 发送了。

生产和开发机内网不通,都是走公网传输。很容易想到:10+G,非 80 端口,ssh 协议(自己公司约定好的),肯定特别慢,之前用的时候每秒也就 2 兆。

某同事:“我有办法让你更快点。”

我:“请教下?”

于是,他就教了我:)

  1. 假设开发机器的公网 IP 是 1.1.1.1,在该机器先监听 80 端口,并重定向到文件,接收完进程会自己退出。
nc -l 80 > all.tar.gz
  1. 生产环境机器,直接往 1.1.1.1 的 80 端口写入数据即可,写完进程会自动结束!
nc 1.1.1.1 80 < all.tar.gz
  1. 用 md5sum 校验一下,发现 md5 一致
md5sum all.tar.gz

时间多久就真的忘记了,确实比 scp 快很多!

phpmyadmin

真的很喜欢 phpmyadmin 这个 PHP 程序。

虽然工作上基本都用 Navicat,但是很多东西都是习惯了,就很难改变!

比如建表,执行 SQL 语句,界面操作肯定是 phpmyadmin 更胜一筹:

  • phpmyadmin 建表很直观,是不是主键 ID、有无符号,如果是时间字段,可以直接选择当前时间、自动更新,而 Navicat 要自己把整个单词填进去……
  • 执行 SQL 语句,phpmyadmin 支持语法高亮,Navicat 是黑底白字,非常古老,没有自动完成。

当然,phpmyadmin 也有不好的地方,比如导入/导出就没有 Navicat 那么强大,大表操作还是 Navicat 好使。

开发环境上,我还是离不开 phpmyadmin,搭建环境很容易,电脑需要安装 docker,找个终端执行以下命令即可:

docker run -d --name phpmyadmin -e PMA_HOST=10.43.3.13 -e PMA_PORT=3306 -p 8081:80 phpmyadmin/phpmyadmin

注:PMA_HOSTPMA_PORT 请根据实际情况填写!网上很多教程带了 MySQL,我这边不需要本地数据库,公司提供了测试数据库。

如果你都想自己搭,那也很简单,我一直都是用 MySQL 5.7,实际上 MariaDB 10.2 也可以,后者有 arm 版本,我用 M1 跑起来会舒服些。

docker run -itd --name mariadb -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mariadb:10.2-bionic
docker run -d --name phpmyadmin-mariadb --link mariadb -e PMA_HOST="mariadb" -p 8082:80 phpmyadmin/phpmyadmin