Rust 的迭代器

Posted in 默认分类 | Tagged | Leave a comment

Rust 泛型应用

在面向对象编程中,泛型是一个很重要的特性,rust 支持面向对象编程,这里,我们来看看 rust 的泛型如何应用

rust 中的泛型参数跟 java 等语言别无二致,但 rust 高级的地方在于,其泛型参数支持类型约束。

Posted in 默认分类 | Tagged | Leave a comment

字符串与日期的互相转换

在 python 中可以这样转换

如果是 bash 脚本,可以这样格式化输出当前日期时间的字符串形式

Posted in 默认分类 | Tagged | Leave a comment

迁移 postgresql 到 mysql

博客原本部署时使用的数据库是 postgresql 11.04,但后续在使用 wordpress 插件时,总会遇到各种问题,趁着最近有时间,将数据库迁移到 mysql,另外,也一并更新 wordpress 到最新稳定版。

初始化安装

先安装和配置好 nginx php 和 mysql,然后,下载 wordpress 中文最新稳定版源码到 nginx 配置的 root 目录下,按照 wordpress 的指引一步步设置好博客。

导出数据

使用如下命令从 postgresql 中导出博客的数据

然后,编辑 data.sql
1、去掉 postgresql 相关部分

2、去掉 public. 表前缀

3、修改 wp_options 表
这部分看个人了,如果只是需要原来数据库的博客内容等数据,可以清空掉该表

导入数据

至此,postgresql 里的数据已经全部导出到 mysql 了。
参考:Convert WordPress from PostgreSQL to MySQL (to fix 4.2.2 compatibility issue)

Posted in 默认分类 | Tagged , | Leave a comment

postgresql 的替换函数

PostgreSQL 提供了几个函数用来做字符串替换

replace

其语法为

以更新 wordpress 的域名为例

regexp_replace

其基本语法为

1、替换第一个匹配到的字符串

2、替换所有匹配到的字符串

3、忽略大小写的匹配

4、匹配单词开头

5、匹配单词结尾

6、匹配单个单词

translate

其基本语法为

set 和 new_set 一一对应进行替换,如果 set 的字符个数多于 new_set,那么 source 中对应的字符会被丢弃,也就是用空字符替换。

参考:PostgreSQL REPLACE Function

Posted in 默认分类 | Tagged | Leave a comment

gRPC 的简单使用

最近项目的一个需求涉及到 django model 的循环引用问题,没有想到比较好的解决办法,最后使用了 rpc 解决。现在业界有比较多的 rpc 解决方案,知名度比较高的应该是谷歌家的 protobuf 了,其实,protobuf 只是一种 rpc 通信机制,实际项目中使用的 rpc 框架则是 gRPC。

安装工具链

我打算使用 go 语言来编写 grpc 的服务端,然后,在项目中使用 grpc 的 python 客户端来调用 grpc 服务端定义好的服务,因此,除了需要安装 protobuf 编译器外,还需要安装 go 语言和 python 的 grpc 插件,以及在 go 语言和 python 中使用到的 grpc 库。protobuf 有一套自己的数据编码格式,我们在.proto文件中定义好交互的数据结构和服务函数后,需要用protoc将其编译成服务端和客户端语言支持的代码文件。
1. protoc
从 https://github.com/protocolbuffers/protobuf/releases/ 下载 protobuf 的源码后,将其解压到 PATH 路径下
2. go 语言插件

  1. python 插件

编写 .proto 文件

这里定义了一个 GetBaseAreas 服务,用于客户端单向调用该服务的服务端实现

编写客户端和服务端

分别安装好 grpc 的 python 和 go 语言支持包

接下来,就可以基于上面生成的客户端和服务端代码编写业务逻辑了。
参考:
gRPC 官方文档中文版
Go语言初探gRPC服务
grpc| python 实战 grpc

Posted in 默认分类 | Tagged | Leave a comment

Go 语言的 gob 包

go 语言的 gob 包类似 python 中的 pickle 包,用来将数据或者对象实例编码成二进制格式

需要注意的是,在编码时,只有可导出类型会被编码,而且,零值会被忽略。
参考:用 Gob 传输数据

Posted in 默认分类 | Tagged | Leave a comment

Go 语言的通道

通道(chan)用于在多个协程间通信和共享内存

Posted in 默认分类 | Tagged | Leave a comment

Go 语言的传值和传引用

Go 语言中大部分类型都是按值传递,但是,对于切片、map 和通道等类型,则是传递的引用

Posted in 默认分类 | Tagged | Leave a comment

构建 redis docker 容器

Dockerfile

docker-compose.yml

redis.conf

可以在 redis 的源码仓库或者官网下载该配置文件

Posted in 默认分类 | Tagged , | Leave a comment