Go 朝着错误的方向发展

这是 Aliaksandr Valialkin 昨天刚写的一篇文章, 心有戚戚焉,所以特意翻译成中文,个人感觉,自从Rob Pike退休后,Go在大方向迷失了,正如老貘(Go101)所说,目前Go的开发就像完成KPI一样,也许, 大师不会再回来了。

Aliaksandr Valialkin是fasthttp的作者,也是VictoriaMetrics开发者,一位资深的Go程序员。

以下是译文。

阅读全文

Rob Pike 语录

1. 计算机领域里,没有什么问题是加一层间接寻址解决不了的。

There's nothing in computing that can't be broken by another level of indirection.

这是 Rob Pike 的修改版。

经常 level of insriection 误引用为 abstraction layer

原始版本出自 Butler Lampson
All problems in computer science can be solved by another level of indirection

但是 David Wheeler 完成了下半句:
All problems in computer science can be solved by another level of indirection, except for the problem of too many layers of indirection.

还有 Kevlin Henney 的下半句:
ll problems in computer science can be solved by another level of indirection, except for the problem of too many layers of indirection."

From Beautiful Code: Another Level of Indirection

这句话幽默地指出,在计算机编程中,通过引入额外的抽象层或中间层,几乎可以解决任何复杂的问题。这种思路在软件设计和架构中很常见。

阅读全文

Rust tips #81 ~ #90

Rust tips #41 ~ #60

Tip #41

类似于 Go 语言中的通道(Go 的 channel),Rust 中的 std::sync::mpsc 提供了一种线程间安全地读写数据的机制:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
use std::sync::mpsc;
use std::thread;
fn main() {
let (tx, rx) = mpsc::channel();
thread::spawn(move || {
let val = String::from("hi");
tx.send(val).unwrap();
});
let received = rx.recv().unwrap();
println!("Got: {}", received);
}

在这个例子中,我们创建了一个通道,然后在一个线程中发送了一个字符串。在主线程中,我们等待接收这个字符串并打印它。

阅读全文

Rust tips #21 ~ #40

Tip #21

在 Rust 中,我们经常使用 Clone()Copy()。这两者之间的区别是什么?

  • Copy:支持 Copy 的类型可以安全地通过字节复制的方式进行复制,可以类比 C 语言中的 memcpy 函数。

  • Clone:支持 Clone 的类型也可以被复制,但它通常需要执行一些逻辑操作来完成深拷贝。

阅读全文

如何将图片编码成base64?

图片的 base64 编码在多种上下文中都很有用。当需要通过旨在处理文本数据的媒体存储或传输图片时,它通常会被使用,比如嵌入到网页或者通过 API 上传图片。这篇文章将介绍如何使用 Go 标准库得到任何图片的 base64 编码的值。

阅读全文

Rust tips #1 ~ #20

Tip #001

Rust 不支持静态 vec(static vec),但是最接近的是静态数组。例如,如果你想存储三个字符串的数组,可以尝试这样: static STRINGS : [&str;3] = ["a", "b", "c"]

阅读全文

Redka - 父亲是Redis,母亲是SQLite

Redka旨在使用SQLite重新实现Redis的优秀部分,同时保持与Redis API的兼容性。

有意思的特性:

  • 数据不必完全装载在内存中。
  • 支持ACID事务。
  • 使用SQL视图以便于内省和报告。
  • 同时提供进程内(Go API)和独立(RESP)服务器。
  • 兼容Redis的命令和线路协议。

Redia 并不期望完全达到 Redis 那么高的性能,但是性能上也并不会落后很多。它的主要功能还是 SQL + Redis 的功能,集成了两种优秀产品 SQLite 和 Redis 的盛世美颜。

阅读全文