rust学习笔记-2

变量:默认是不可修改的 let用于声明变量,修改变量会导致编译会报错 fn main() { let x = 5; println!("The value of x is: {x}"); x = 6; println!("The value of x is: {x}"); } 加mut声明x为可修改的: fn main() { let mut x = 5; println!("The value of x is: {x}"); x = 6; println!("The value of x is: {x}"); } 话说rust的编译报错的错误提示还是蛮好看的: % cargo build Compiling variables v0.1.0 error[E0384]: cannot assign twice to immutable variable `x` --> src/main.rs:4:5 | 2 | let x = 5; | - | | | first assignment to `x` | help: consider making this binding mutable: `mut x` 3 | println!...

June 8, 2024 · akawhy

rust学习笔记-1

基于官网文档,做下笔记 安装 # Installing rustup on Linux or macOS curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh 直接按回车按default模式安装。安装完后会多不少命令: rust-analyzer rust-gdb rust-gdbgui rust-lldb rustc rustdoc rustfmt rustup cargo cargo-clippy cargo-fmt cargo-miri 更新rust版本的话可以使用 rustup update 编译运行程序 使用rustc编译代码生成可执行文件,执行即可运行。对于稍微大型的项目可以使用cargo进行安装依赖、编译、运行。使用cargo创建项目后的目录结构 % tree # tree命令在macos下需要用homebrew安装下 . ├── Cargo.toml └── src └── main.rs 运行万cargo build和cargo run之后的目录。展示下2层(因为生成的文件比较多) % tree -L 2 . ├── Cargo.lock ├── Cargo.toml ├── src │ └── main.rs └── target ├── CACHEDIR.TAG └── debug 可以在项目中的Cargo.toml中指定依赖。使用cargo build会自动安装。如果感觉下载的慢的话,推荐替换为阿里云的crates源。操作方法: 拷贝如下信息至~/....

June 7, 2024 · akawhy

cloudflare pages部署静态网站

本博客部署在cloudflare的pages中,一顿操作下来感觉有如下好的地方: 免费。无带宽、部署费用,free套餐的并发构建数、每月构建数对小型站点来说是绰绰有余了。 访问速度还行。提供服务的XXXXX.pages.dev析出的地址是位于美国,从国内访问速度还可以。 部署简单。使用git或者直接上传文件即可,文档写的很详细。此外可以方便的切换到指定的构建版本。 自定义域名接入方便。pages部署后默认会生成一个域名,将自己的域名添加一个cname指向该域名即可完成接入。 0配置启用https。无需做任何操作,直接开启https。看了下证书,是即时签发的。 可以配套使用cloudflare其他功能。比如web分析,全局重定向等等. 下面记录一下过程 有关部署 我这边直接采用直接上传静态文件的方式进行部署。因为使用的是hugo来进行文件生成,所以直接上传public文件夹即可。 cloudflare提供两种方式进行静态文件上传:一种是直接在页面上上传,另一种是通过wrangler。因为后续会持续进行部署,推荐使用wrangler这个工具进行脚本化,一来是可以相对安全(避免误操作),二来可以简化操作。先在博客目录下进行安全: # 安装 wrangler # 直接在hugo博客目录下执行 npm install wrangler --save-dev 然后部署 # 上传public文件夹。期间可能会唤起浏览器进行认证 # 这个指令可以保存为deploy.sh,后续直接run脚本就好了 npx wrangler pages deploy public --branch=main 要本地看public的情况推荐使用python3来看,避免hugo server重新渲染 # 直接在hugo博客目录下执行,效果和在pages后一致 python3 -m http.server --bind 127.0.0.1 --directory public pages上的额外配置 页面重定向 创建pages后的默认访问站点是XXXXX.pages.dev,我们一般会使用我们自己的域名cname到这个记录上。为了强制只允许通过我们自己的域名来进行访问,可以通过cloudflare的Bulk Redirects功能来将XXXXX.pages.dev的访问都重定向到我们的自己的域名。 具体操作就不赘述了,可以直接参考官方文档。记得在编辑规则的时候一定要勾选上Preserve query string, Subpath matching和Preserve path suffix。 启用web分析 直接在pages应用的manage选项卡中选择开启即可 感受 感觉cloudflare的功能还是比较容易上手的,页面的功能涵盖了零信任和函数计算,对小用户而言是一个不错的选择。

June 4, 2024 · akawhy

新学的nc小技巧

最近遇到不少转发上的问题, 很大部分是因为一些不太常见的客户端请求. 正常的请求我们可以直接curl模拟, 但是有些异常的, 比如 某些header内容为空, 我们就很难模拟. 这时候可能就需要用上nc来模拟了. 当然它不仅仅可以用来模拟http请求. 下面介绍两个新学的 技巧. 模拟http请求发送 模拟一个POST请求. 直接使用指令nc 127.0.0.1 8080, 然后徒手敲命令;) 当然我们也可以提前把内容写到一个文本文件里面, 然后用管道传给nc # 发送request.txt中的内容到本地的8080端口 cat request.txt | nc 127.0.0.1 8080 这里还会有一个问题, 我希望nc发送完后等待一段时间再退出, 可以这么搞: # 发送request.txt中的内容到本地的8080端口, 并等待10秒 (cat request.txt; sleep 10) | nc 127.0.0.1 8080 这样我们就可以通过修改request.txt文件构造不同的request了. 自定义发送端口 一般应用发送数据的端口是由操作系统随机选择的, 但是有时候在debug的时候可能需要强制使用某个端口, 这时候可以用上nc的-p指令. 这个在排查四层转发问题的时候还是蛮好用的.

February 1, 2019 · akawhy

golang pprof简易玩法

golang的应用诊断可以依靠pprof工具, 这里总结一个快速上手的步骤. step0: 假设 我们现在的应用跑在远端 我们本地的go为1.11版本(webui支持了火焰图) 诊断的应用是caddy step1: 开启 对我们的应用开启profiling. 这个方法有很多, 可以直接参考runtime/pprof和net/http/pprof. 因为我们要调试的是caddy, 直接通过改配置文件并重新加载就可以开启了: ## 正常服务 http://test.com:8888 { root /static log stdout } ## 只允许本地去访问该服务, 安全起见 http://xx.yy:4869 { bind 127.0.0.1 pprof } step2: 触发 在服务器上请求对应的url, 获取对应prof文件: ## 获取应用当前的内存情况 curl '127.0.0.1:4869/debug/pprof/heap' -H 'Host: xx.yy' -o mem.prof ## 采集应用60s内的cpu使用情况 curl '127.0.0.1:4869/debug/pprof/profile?seconds=60' -H 'Host: xx.yy' -o cpu.prof ## 采集应用10s内的goroutine调度与执行情况 curl '127.0.0.1:4869/debug/pprof/trace?seconds=10' -H 'Host: xx.yy' -o r.trace 因为配置文件指定了仅允许本地访问, 因此我们需要将对应的文件传到本地. step3: 分析 这块分析可以用命令行, 当然更方便的是使用浏览器. go tool pprof -http :6666 ....

January 28, 2019 · akawhy