Go高级知识

代码编译过程

  1. 全局变量会进行全局初始化

    1
    2
    
    type noticeRepository struct{}
    var Notice = &noticeRepository{}
    
  2. model 层为何不全局实例化?因为 model 层的结构体带有属性,如果全局初始化则 model 层结构体实例的属性可能会出现重复,导致数据异常!

Go之并发安全

并发实践

Go 的开发者极力推荐使用 Channel,不过,这两年,大家意识到,Channel 并不是处理并发问题的“银弹”,有时候使用并发原语更简单,而且不容易出错。

GoAdmin

准备工作

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# 访问并登陆:
- 登陆:http://127.0.0.1:9033/admin/login
- 账号:admin,密码:admin

# 用命令安装扩展
go get github.com/GoAdminGroup/go-admin/adm

# 根据指示填写就可以初始化一个项目模板
adm init -l cn

# 执行以下命令运行:
> make serve

# 使用工具快速生成数据模型文件 http://doc.go-admin.cn/zh/plugins/admin/
1. adm generate -l cn // 注意:选择表格的时候,按空格选择,不是按回车
2. 使用在线生成工具 // 注意:输出路径为本地文件绝对路径

一些坑

  1. K8S部署环境下,不支持多个Pod部署,否则非GET方式的接口会出现以下错误提示【todo 具体原因不知:有空再查下】

程序员必备的代码审查清单

编码规范

  • 编程思想由 MVC模式 转向 MBC模式,M:模型层,B: 业务逻辑层,C:控制器层
  • 路由命名:一般以 纯小写 或 小写+中划线 命名,比较易读
  • 变量名称使用小驼峰方案
  • 能不用 else 就不用,减少嵌套层数
  • 待处理代码加上 todo 做备注,容易找到待处理代码位置

常规项

  • 代码能够工作么?它有没有实现预期的功能,逻辑是否正确等。
  • 所有的代码是否简单易懂?
  • 代码符合你所遵循的编程规范么?这通常包括大括号的位置,变量名和函数名,行的长度,缩进,格式和注释。
  • 是否存在多余的或是重复的代码?
  • 代码是否尽可能的模块化了?
  • 是否有可以被替换的全局变量?
  • 是否有被注释掉的代码?
  • 循环是否设置了长度和正确的终止条件?
  • 是否有可以被库函数替代的代码?
  • 是否有可以删除的日志或调试代码?

安全

  • 所有的数据输入是否都进行了检查(检测正确的类型,长度,格式和范围)并且进行了编码?
  • 在哪里使用了第三方工具,返回的错误是否被捕获?
  • 输出的值是否进行了检查并且编码?
  • 无效的参数值是否能够处理?

文档

  • 是否有注释,并且描述了代码的意图?
  • 所有的函数都有注释吗?
  • 对非常规行为和边界情况处理是否有描述?
  • 第三方库的使用和函数是否有文档?
  • 数据结构和计量单位是否进行了解释?
  • 是否有未完成的代码?如果是的话,是不是应该移除,或者用合适的标记进行标记比如‘TODO’?

测试

  • 代码是否可以测试?比如,不要添加太多的或是隐藏的依赖关系,不能够初始化对象,测试框架可以使用方法等。
  • 是否存在测试,它们是否可以被理解?比如,至少达到你满意的代码覆盖(code coverage)。
  • 单元测试是否真正的测试了代码是否可以完成预期的功能?
  • 是否检查了数组的“越界“错误?
  • 是否有可以被已经存在的API所替代的测试代码?

备忘录

互联网时代·个人隐私安全

  1. 输入法禁止联网,或者使用其他单机输入法

    • macos: 系统偏好设置->安全性与隐私->开启防火墙->防火墙选项->阻止传入连接【不好用,无法设置默认允许所有传入连接,只设定某个应用阻止连接】

Canal

canal 简介

canal github

canal 是阿里开发的一款基于数据库增量日志解析,提供增量数据订阅与消费的框架,可以很方便地同步数据库的增量数据到其他的存储应用。

整个框架纯JAVA开发,目前仅支持 Mysql 和 MariaDB(和mysql类似)。

专业的MQ

一个专业的消息队列,必须要做到两点:

  1. 消息不丢
  2. 消息可堆积

PHP+ActiveMQ+Stomp

ActiveMQ 是由 Apache 出品的一款开源消息中间件,旨在为应用程序提供高效、可扩展、稳定、安全的企业级消息通信。 它的设计目标是提供标准的、面向消息的、多语言的应用集成消息通信中间件。ActiveMQ 实现了 JMS 1.1 并提供了很多附加的特性,比如 JMX 管理、主从管理、消息组通信、消息优先级、延迟接收消息、虚拟接收者、消息持久化、消息队列监控等等。

监控辅助平台

日志监控系统

  1. ELK Logs(Open source log monitoring)

服务器监控系统

  1. Zabbix

  2. statsd + influxdb + grafana(监控UI平台)

网关链路追踪

作用:限流、降级、接口请求链路追踪、接口响应时间等

10分钟完成分布式追踪

  1. ELK APM + Opentracing 『使用 Opentracing 在代码埋点,使用 ELK APM 展示追踪信息』

实战案例总结

根据nginx的access_log分析接口请求

access_log:指的是访问日志,我们通过访问日志可以获取用户的 IP、请求处理的时间、接口响应状态、浏览器信息等

查看nginx日志存放地址:find / -name nginx.conf