一个实验带你真正搞懂 Go 结构体方法指针和值的区别
众所周知,Go struct 定义方法时使用指针还是值的区别就是在方法内修改属性值时,用值定义的方法所做的修改只限于方法内,而指针则没有这个局限。
文章如果到这里就结束了,那么就很平平无奇了,于是我打算带大家去做个无聊但是值得思考的实验。
众所周知,Go struct 定义方法时使用指针还是值的区别就是在方法内修改属性值时,用值定义的方法所做的修改只限于方法内,而指针则没有这个局限。
文章如果到这里就结束了,那么就很平平无奇了,于是我打算带大家去做个无聊但是值得思考的实验。
int*
和 int
说起“int**
是什么” 这个问题其实不难。
我们可以递归分析,先看下 int*
是什么,嗯?好像还可以继续递归到 int
我们都知道,int
是 C 的基础数据类型 整型
,而多了个 *
的 int*
是 指向整型变量的指针
,那么 int**
是什么就不言自明了,列个表:
C语法 | 释义 |
---|---|
int | 整型 |
int* | 指向整型 的指针 |
int** | 指向指向整型的指针 的指针 |
看到这里,你对 int**
应该有了个初步的认识,但你可能觉得有点绕,没关系,下面我们写一段代码看看:
最近看到 GitHub 上有个仓库叫《牙医教你 450 行代码自制编程语言》,研究了一番,感觉很有意思,于是尝试用 PHP 去实现了一个简单的编程语言(PINEAPPLE lang)解释器,也算是对编译原理入了门😅
https://github.com/YianAndCode/pineapple-php
最近将 PHP 更新到 8.0 了,顺便也将 Typecho 更新了一下以便适配 PHP 8,再有就是最近经常将博客迁来迁去的,于是用 docker-compose
搞了个 Typecho 的环境,分享给有需要的小伙伴~
https://github.com/YianAndCode/typecho-in-docker
目前主要集成了 php:8.0-fpm
和 nginx:latest
,但该环境不包含 MySQL 数据库,不过 PHP 环境已经安装 pdo_mysql
和 pdo_sqlite
扩展,可以使用 MySQL 或者是 SQLite 数据库
最近在写 Phalcon ORM 查询结果集遍历的时候发现 Phalcon ORM 有个很神奇的现象:当你用 foreach 遍历 Model->find() 之后的结果(Phalcon\Mvc\Model\Resultset\Simple
),如果在遍历中有访问下一个($key + 1)元素,就会自动执行 next(),下一个元素就不会出现在 foreach
的下一次遍历中了...
举个例子,比如说我们有一张表 users
,我们创建一个 User
model,执行如下代码:
<?php
$users = \Models\User::find([
'conditions' => 'role = 1' // 这里可以是别的查询条件
]);
// 这里假设查询出来的记录只有两条,即 count($users) == 2
foreach ($users as $key => $user) {
echo "key: $key, user_id: {$user->id}\n";
// 假设这里因为业务逻辑的需要访问下一个 model
$foo = $users[$key + 1];
}
你可能会觉得上面的循环在执行到第二次会报 PHP Notice: Undefined offset
,但实际上,它什么也没报,只是安安静静地输出了:
最近用了阿里云消息服务中的主题订阅,发现当 MNS 向 Endpoint 投递消息时,当前的签名机制会存在一定的风险
MNS Endpoint 的签名机制是使用 sha1WithRSAEncryption
对一系列参数签名,Enpoint 接收到请求之后再从 header 里取出相应的参数并校验其签名。
其中 sha1WithRSAEncryption
算法就会用到一张 X509 证书,这个是本次实验的关键。