0%

GO IN ACTION

第 1 章:关于 Go 语言的介绍

本章主要内容

  • 用 Go 语言解决现代计算难题
  • 使用 Go 语言工具

本章小结

  • Go 语言是现代的、快速的,带有一个强大的标准库
  • Go 语言内置对并发的支持。
  • Go 语言使用接口作为代码复用的基础模块。
阅读全文 »

GO 并发编程实战

第 1 章:初始 Go 语言

  • 访问控制级别:公开、包级私有之外,还有一种——模块级私有。通过吧名称首字母大写的程序实体放入 internal 代码包实现的。
  • 多编程范式:Go 支持函数式编程。函数类型为第一等类型,可以方便地传递和赋值。此外,它还支持面向对象编程,有接口类型与实现类型的概念,但用嵌入替代了继承。
  • Go 命令:
    • clean。用于清除因执行其他 go 命令而遗留下来的临时目录和文件。
    • doc。用于显示Go语言代码包以及程序实体的文档。
    • fix。用于修正指定代码包的源码文件中包含的过时语法和代码调用。这使得我们在升级Go语言版本时,可以非常方便地同步升级程序。
    • fmt。用于格式化指定代码包中的Go源码文件。实际上,它是通过执行gofmt命令来实现功能的。
    • generate。用于识别指定代码包中源码文件中的go:generate注释,并执行其携带的任意命令。该命令独立于 Go 语言标准的编译和安装体系。如果你有需要解析的go:generate注释,就单独运行它。这个命令非常有用,我常用它自动生成或改动 Go 源码文件。
    • list。用于显示指定代码包的信息,它可谓是代码包分析的一大便捷工具。利用 go 语言标准库代码包 text/template 中规定的模板语法,你可以非常灵活地控制输出信息。
    • tool。用于运行 Go 语言的特殊工具。
    • vet。用于检查指定代码包中的 Go 语言源码,并报告发现可疑代码问题。该命令提供了除编译以外的又一个程序检查方法,可用于找到程序中的潜在错误。
  • 命令额外标记:
    • -a:用于强调重新编译所有涉及的 Go 语言代码包。
    • -n:使命令仅打印其执行过程中用到的所有命令,而不真正执行它们。
    • -race:用于检测程序中的数据竞争问题。
    • -v:用于打印命令执行过程中涉及的代码包。
    • -work:用于打印命令执行时生成和使用的临时工作目录的名字,且命令执行完成后不删除它们。
    • -x:使命令仅打印其执行过程中用到的所有命令,同时执行它们。
  • pprof:用于以交互的方式访问一些性能概要文件。命令将会分析给定的概要文件并根据要求提供高可读性的输出信息。这个工具可以分析的概要文件包括 CPU 概要文件、内存概要文件和程序阻塞概要文件。这些包含 Go 程序运行信息的概要文件,可以通过标准库代码包 runtime 和 runtime/pprof 中的程序来生成。
  • trace:用于读取 Go 程序踪迹文件,并以图形化的方式展示出来。它能够让我们深入了解 Go 程序在运行过程中的内部情况。比如,当前进程中堆的大小及使用情况。又比如,程序中的多个 goroutine 是怎样被调度的,以及它们在某个时刻被调度的原因。Go 程序踪迹文件可以通过标准库代码包 runtime/trace 和 net/http/pprof 中的程序来生成。
阅读全文 »

GO Web 编程

Go 语言介绍

第一章:Go与web应用

HTTP

  • HTTP 是一种无状态、由文本构成的请求-响应(request-response)协议,这种协议使用的是客户端-服务器(client-server)计算模型
  • CGI 通用网管接口(Common Gateway Interface),允许web服务器与一个独立运行于web服务器进程之外的进程对接
  • SSI(server-side includes)服务器端,允许开发者在HTML文件里包含一些指令,衍生出了JSP(Java Server Pages),ASP(Active Server Pages)等Web模板引擎

  • http请求
    • 请求行(request-line)
    • 零个或任意多个请求首部(header)
    • 一个空行
    • 可选的报文主体(body)
  • 请求方法
    • GET
    • POST
    • HEAD
    • PUT
    • DELETE
    • TRACE
    • OPTIONS
    • CONNECT
    • PATCH
阅读全文 »

常见数据库分类

在微服务设计中,数据库的选型是不可缺少的一环,后台的核心是与数据打交道,在不同的业务场景选择的数据库不一样,好的数据库选型能够解决业务的性能瓶颈,如果数据库选择不恰当,会使得服务的性能上不去,因此我们需要对一些常用的数据库有一些了解,这样才能因地制宜,发挥系统最好的性能。

数据库类型 数据库名称
关系型数据库 MySQL,Oracle,PostgreSQL
内存数据库 Redis,Memcache,Riak
时序数据库 Prometheus,InfluxDB,OpenTSDB
文档型数据库 MongoDB,CouchDB,RavenDB
分布式数据库 TIDB
图数据库 Neo4J,InfiniteGraph,OrientDB,Dgraph
列式存储数据库 Cassandra,HBase,ClickHouse,Elasticsearch
文件存储 EPH,GlusterFS

考虑角度汇总

阅读全文 »

casbin

权限管理。

简介

权限管理在几乎每个系统中都是必备的模块。如果项目开发每次都要实现一次权限管理,无疑会浪费开发时间,增加开发成本。因此,casbin库出现了。casbin是一个强大、高效的访问控制库。支持常用的多种访问控制模型,如ACL/RBAC/ABAC等。可以实现灵活的访问权限控制。同时,casbin支持多种编程语言,Go/Java/Node/PHP/Python/.NET/Rust。我们只需要一次学习,多处运用。

结构

权限实际上就是控制能对什么资源进行什么操作。casbin 将访问控制模型抽象到一个基于 PERM(Policy,Effect,Request,Matchers) 元模型的配置文件(模型文件)中。因此切换或更新授权机制只需要简单地修改配置文件。

policy 是策略或者说是规则的定义。它定义了具体的规则。

effect 根据对请求运用匹配器得出的所有结果进行汇总,来决定该请求是允许还是拒绝。

request 是对访问请求的抽象,它与 e.Enforce() 函数的参数是一一对应的

matcher 匹配器会将请求与定义的每个 policy 一一匹配,生成多个匹配结果。

阅读全文 »


PPT 美化四步法

  1. 统一字体。微软雅黑(安全性有保证)。
  2. 突出标题。长短设计,动词短句。
  3. 巧取颜色。从模板和LOGO里面提取强调色。
  4. 快速配图

统一字体

微软雅黑。

  • 一级标题字号设置32号及以上
  • 二级标题字号设置24~28
  • 正文字号设置18~20
  • 标题和正文在纵向上需要有一定的错位。TAB
  • 填充颜色,字体设置白色的方式,形成颜色的反差,形成层次感。

突出标题

  • 长度统一。
  • 动词短句。
  • 一级大标题可以设置阴影。

巧取颜色

  • 注意颜色搭配。eg: 红/黑。
  • 正文颜色可以适当灰度处理,突出标题即可。eg: 正文调整为深灰色。

快速配图

  • 根据标题查找相关图片,注意图文关联。
  • 图片有底色的时候,添加色块来统一底色。
  • 培训类PPT,可以配一些微笑人脸进行情绪调动。
  • 搜图的时候,要打开想象力,用具体场景进行联想搜图,避免和别人重复。
阅读全文 »

计算机网络应用层协议有哪些?

应用层协议:

1、远程登录协议(Telnet)
2、文件传输协议(FTP)
3、超文本传输协议(HTTP)
4、域名服务协议(DNS)
5、简单邮件传输协议(SMTP)
6、邮局协议(POP3)

其中,从网络上下载文件时使用的是FTP协议,上网游览网页时使用的是HTTP协议;在网络上访问一台主机时,通常不直接输入IP地址,而是输入域名,用的是DNS服务协议,它会将域名解析为IP地址;通过FoxMail发送电子邮件时,使用SMTP协议,接收电子邮件时就使用POP3协议。

传输层协议:

1、传输控制协议 TCP
2、用户数据报协议 UDP

TCP协议:面向连接的可靠传输协议。利用TCP进行通信时,首先要通过三步握手,以建立通信双方的连接。TCP提供了数据的确认和数据重传的机制,保证发送的数据一定能到达通信的对方。

UDP协议:是无连接的,不可靠的传输协议。采用UDP进行通信时不用建立连接,可以直接向一个IP地址发送数据,但是不能保证对方是否能收到。

网络层协议:

1、网际协议 IP
2、Internet互联网控制报文协议 ICMP
3、Internet组织管理协议 IGMP
4、地址解析协议 ARP

阅读全文 »

MySQL的基本架构

Server 层:主要包括连接器、查询缓存、分析器、优化器、执行器等,所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图,函数等,还有一个通用的日志模块 binglog 日志模块。

存储引擎层: 主要负责数据的存储和读取,采用可以替换的插件式架构,支持 InnoDB、MyISAM、Memory 等多个存储引擎,其中 InnoDB 引擎有自有的日志模块 redolog 模块。现在最常用的存储引擎是 InnoDB,它从 MySQL 5.5.5 版本开始就被当做默认存储引擎了。

查询语句执行过程解析

1、客户端发起一个请求时,首先会建立一个连接
2、服务端会检查缓存,如果命中则直接返回,否则继续之后后面步骤
3、服务器端根据收到的sql语句进行解析,然后对其进行词法分析,语法分析以及预处理
4、由优化器生成执行计划
5、调用存储引擎层API来执行查询
6、返回查询到的结果

阅读全文 »

CI / CD 基本原理

CI/CD 是两个流水线,持续集成 Continuous Integration(CI)是服务构建流程,持续部署 Continuous Deployment(CD)是服务发布流程。也可以视作三个流水线,加上持续交付 Continuous Delivery(CD)给测试和质量团队的中间过程。

持续集成(CI)

持续将代码集成到主干。

好处:

  • 快速发现错误,定位比较容易
  • 防止分支大幅偏离主干

持续集成强调开发人员提交了新代码之后,立刻进行构建、测试。根据测试结果来判断新代码是否和原有代码正确集成在一起。

阅读全文 »

python 复制操作合集

通过跳转机连接 mysql

场景:本地->跳转机->mysql服务器
分两步:1.通过 sshtunnel 登陆跳转机;2.创建数据库连接。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import pymysql
from sshtunnel import SSHTunnelForwarder

with SSHTunnelForwarder(
('*.*.*.*', 11690), # 指定ssh登录的跳转机的address,端口号
ssh_username="***", # 跳转机的用户
ssh_pkey="/Users/.ssh/id_rsa", #私钥路径
ssh_private_key_password="***", #密码(电脑开机密码)
remote_bind_address=('*.*.*.*', 3306)) as server: # mysql服务器的address,端口号
conn = pymysql.connect(host='127.0.0.1', # 此处必须是是127.0.0.1
port=server.local_bind_port,
user='**', #数据库用户名
passwd='**', #数据库密码
db='**' #数据库名称)

cursor = conn.cursor()
# 使用 execute() 方法执行 SQL 查询
cursor.execute("SELECT VERSION();")

# 使用 fetchone() 方法获取单条数据.
data = cursor.fetchone()

print("Database version : %s " % data)
# 关闭数据库连接
cursor.close()
阅读全文 »