NAT及其使用

nat是什么?nat打洞是什么意思?有什么作用?为什么需要打洞?

NAT是什么?

NAT (Network Address Translation,网络地址转换) 是一种网络技术,用于将私有IP地址转换为公有IP地址。

Rust提案: 优化项目依赖管理,控制空间无序扩张

Rust优化编译出来的可执行文件的大小

目前 很多项目依赖了大量外部库, 在执行cargo clippy等操作后, 项目体积甚至会膨胀100倍. 而且所用到的相关依赖都在target目录下,这样无法复用,实际造成了空间浪费 —- 例如我本地有10个Rust项目,都有用到tokio(假设其中3个用tokio v1.0, 另外7个用tokio v1.1), 如果能把用到的依赖,放在一个公用的目录,那这样只需要存放2个不用版本的tokio, 整台机器上能节省下 大约8个tokio体积大小的空间.

另外,更深层次的问题,Rust中很多较基础功能需要依赖外部库,而外部库又有很多依赖,最终实现一个很小的功能, 整个项目都需要引入大量代码—-庞大到几十万甚至更多,超出人力所能阅读和熟悉的可能. 在木马和恶意攻击愈发猖獗的今天,很可能会背离Rust为安全而生的初衷,造成潜在的攻击和安全隐患.

Go常用Tricks

这段代码可以优化,因为它没有考虑闰年的2月29日和不同月份的实际天数(有些月是31天)。以下是优化后的代码:

1
2
3
// 获取当月的最后一天
lastDay := time.Date(now.Year(), now.Month()+1, 0, 0, 0, 0, 0, now.Location())
targetDay = lastDay

这个优化使用了一个常见的技巧:获取下个月的第0天,Go语言会自动将其解释为当前月份的最后一天。这样的写法有以下优点:

Lint工具汇总

clone某个项目,到.github目录, ag lint

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
ag lint         
workflows/labels.yml
19: labels: "kind:fix, kind:misc, kind:break!, kind:refactor, kind:feat, kind:deps, kind:docs, kind:ci, kind:chore, kind:testing" # yamllint disable-line rule:line-length

workflows/go-ci.yml
31: lint:
33: name: Lint
43: - name: golangci-lint
44: uses: golangci/golangci-lint-action@v6.5.0
49: lint-imports:
51: name: Lint Imports
64: - name: lint imports
65: run: make lint-imports
131: # needs: [lint, go_mod_tidy_check]
148: needs: [go_mod_tidy_check, lint, lint-imports, test_coverage]

workflows/ci_release.yml
51: # Dockerfile Linting
52: hadolint:
53: uses: celestiaorg/.github/.github/workflows/reusable_dockerfile_lint.yml@v0.4.5 # yamllint disable-line rule:line-length
57: yamllint:
61: - uses: celestiaorg/.github/.github/actions/yamllint@v0.4.5
63: markdown-lint:
64: name: Markdown Lint
72: npm install -g markdownlint-cli@0.32.1
73: markdownlint --config .markdownlint.yaml '**/*.md'

workflows/docker-build-publish.yml
24: uses: celestiaorg/.github/.github/workflows/reusable_dockerfile_pipeline.yml@v0.5.0 # yamllint disable-line rule:line-length