Rust 引用下的成员不能发生 Move

引用下的成员不能发生 move

For example:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
struct Foo {i: i32, string: String}

impl Foo {
    fn get_data(&self) -> i32 {
        return self.i;                  // 发生 Copy。
    }

    fn get_string(&self) -> String {
        return self.string;             // error. 引用的成员不能发生 Move。
    }

    fn move_string(self) -> String {    // 传拥有资源的标志符 self 才可以
        return self.string
    }
}
fn main() {
}

可见 Rust 比 C++ 在引用方面做了一些更加严格的限制。

记录一次将宝塔的网站换成手工搭建

原因

vps 的宝塔的 Let’s encrypt 证书三个月后无法自动续签。不知道是原因。算了, 手工搭建, 然后 acme.sh 自动续签证书。

acme.sh 申请证书

 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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#!/bin/bash

# 设置 acme.sh 路径变量
ACME_SCRIPT="/root/.acme.sh/acme.sh"

# 设置 Cloudflare API 凭据
export CF_Token=""        # 我的个人资料 -> API 令牌 -> 创建令牌
export CF_Account_ID=""   # 进入域 -> 右下角的 "帐户ID"

DOMAIN_GROUPS=(
    "foo.domain.com *.foo.domain.com"   # 支持申请 SAN 域名
    "bar.domain.com *.bar.domain.com"
)

# 显示开始信息
echo "开始申请SAN SSL证书..."
echo "========================================"

# 检查 acme.sh 是否存在
if [ ! -f "$ACME_SCRIPT" ]; then
    echo "❌ 错误: 找不到 acme.sh 脚本"
    exit 1
fi

# 为每组域名申请证书
for group in "${DOMAIN_GROUPS[@]}"; do
    main_domain=$(echo "$group" | awk '{print $1}')

    echo "🔄 申请证书: $group"

    # 构建并执行命令
    cmd="$ACME_SCRIPT --issue"
    for domain in $group; do
        cmd="$cmd -d $domain"
    done
    cmd="$cmd --dns dns_cf --force"

    eval $cmd

    if [ $? -eq 0 ]; then
        echo "✅ 证书申请成功: $main_domain"
    else
        echo "❌ 证书申请失败: $main_domain"
    fi
    echo "----------------------------------------"
done

echo "📋 最终证书列表:"
"$ACME_SCRIPT" --list

列出 acme 管理的域名: