[{"data":1,"prerenderedAt":1728},["ShallowReactive",2],{"doc-page:\u002Fdocs\u002Frust-basics":3},{"doc":4,"prev":1695,"next":1699,"resolvedType":8,"readingMinutes":99,"audience":1702,"checklist":1706,"related":1710},{"path":5,"title":6,"description":7,"docType":8,"resourceKind":9,"categoryId":10,"categoryLabel":11,"updatedAt":12,"publishedAt":12,"icon":13,"body":14},"\u002Fdocs\u002Frust-basics","Rust 入门","Rust 安装、Cargo 使用、所有权系统、常用模式与工具链","article",null,"programming-languages","编程语言","2026-02-27","i-carbon-application",{"type":15,"value":16,"toc":1669},"minimark",[17,21,32,35,40,43,59,62,65,161,206,210,317,320,323,362,365,370,471,474,801,804,955,958,985,988,991,1247,1250,1277,1280,1427,1430,1444,1447,1451,1529,1532,1536,1539,1553,1560,1563,1596,1599,1602,1605,1608,1628,1631,1665],[18,19,6],"h1",{"id":20},"rust-入门",[22,23,24,31],"p",{},[25,26,30],"a",{"href":27,"rel":28},"https:\u002F\u002Fwww.rust-lang.org\u002F",[29],"nofollow","Rust"," 是注重安全和性能的系统编程语言。",[22,33,34],{},"这页适合作为“第一次系统接触 Rust 的起步页”。真正容易卡住的地方通常不是语法，而是所有权、借用、错误处理和 Cargo 工作流这几块没有一起建立起来。",[36,37,39],"h2",{"id":38},"什么时候值得学-rust","什么时候值得学 Rust",[22,41,42],{},"Rust 特别适合下面这些方向：",[44,45,46,50,53,56],"ul",{},[47,48,49],"li",{},"需要性能、并发安全和内存安全的工具或服务",[47,51,52],{},"想写 CLI、后端服务、网络程序、系统工具",[47,54,55],{},"希望把一部分高性能模块嵌入现有项目",[47,57,58],{},"想要比 C\u002FC++ 更稳的低层开发体验",[22,60,61],{},"如果你现在只是想快速写脚本、自动化或数据处理，往往先用 Python、Node.js 会更快；Rust 更适合在“正确性 + 性能 + 可维护性”都重要时投入。",[36,63,64],{"id":64},"安装",[66,67,72],"pre",{"className":68,"code":69,"language":70,"meta":71,"style":71},"language-powershell shiki shiki-themes github-light github-dark","# Windows（推荐 rustup）\nwinget install Rustlang.Rustup\n# 或\nscoop install rustup\n\n# Linux\u002FmacOS\ncurl --proto '=https' --tlsv1.2 -sSf https:\u002F\u002Fsh.rustup.rs | sh\n","powershell","",[73,74,75,84,91,97,103,110,116],"code",{"__ignoreMap":71},[76,77,80],"span",{"class":78,"line":79},"line",1,[76,81,83],{"class":82},"sJ8bj","# Windows（推荐 rustup）\n",[76,85,87],{"class":78,"line":86},2,[76,88,90],{"class":89},"sVt8B","winget install Rustlang.Rustup\n",[76,92,94],{"class":78,"line":93},3,[76,95,96],{"class":82},"# 或\n",[76,98,100],{"class":78,"line":99},4,[76,101,102],{"class":89},"scoop install rustup\n",[76,104,106],{"class":78,"line":105},5,[76,107,109],{"emptyLinePlaceholder":108},true,"\n",[76,111,113],{"class":78,"line":112},6,[76,114,115],{"class":82},"# Linux\u002FmacOS\n",[76,117,119,122,126,129,133,136,139,143,146,149,152,155,158],{"class":78,"line":118},7,[76,120,121],{"class":89},"curl ",[76,123,125],{"class":124},"szBVR","--",[76,127,128],{"class":89},"proto ",[76,130,132],{"class":131},"sZZnC","'=https'",[76,134,135],{"class":124}," --",[76,137,138],{"class":89},"tlsv1.",[76,140,142],{"class":141},"sj4cs","2",[76,144,145],{"class":124}," -",[76,147,148],{"class":89},"sSf https:",[76,150,151],{"class":124},"\u002F\u002F",[76,153,154],{"class":89},"sh.rustup.rs ",[76,156,157],{"class":124},"|",[76,159,160],{"class":89}," sh\n",[66,162,166],{"className":163,"code":164,"language":165,"meta":71,"style":71},"language-bash shiki shiki-themes github-light github-dark","# 验证\nrustc --version\ncargo --version\n\n# 更新\nrustup update\n","bash",[73,167,168,173,182,189,193,198],{"__ignoreMap":71},[76,169,170],{"class":78,"line":79},[76,171,172],{"class":82},"# 验证\n",[76,174,175,179],{"class":78,"line":86},[76,176,178],{"class":177},"sScJk","rustc",[76,180,181],{"class":141}," --version\n",[76,183,184,187],{"class":78,"line":93},[76,185,186],{"class":177},"cargo",[76,188,181],{"class":141},[76,190,191],{"class":78,"line":99},[76,192,109],{"emptyLinePlaceholder":108},[76,194,195],{"class":78,"line":105},[76,196,197],{"class":82},"# 更新\n",[76,199,200,203],{"class":78,"line":112},[76,201,202],{"class":177},"rustup",[76,204,205],{"class":131}," update\n",[36,207,209],{"id":208},"cargo-项目管理","Cargo 项目管理",[66,211,213],{"className":163,"code":212,"language":165,"meta":71,"style":71},"cargo new myproject          # 新建项目\ncargo new mylib --lib        # 新建库\ncargo build                  # 编译\ncargo build --release        # 发布编译\ncargo run                    # 编译并运行\ncargo test                   # 运行测试\ncargo check                  # 快速检查（不生成二进制）\ncargo fmt                    # 格式化\ncargo clippy                 # Lint 检查\n",[73,214,215,228,243,253,265,275,285,295,306],{"__ignoreMap":71},[76,216,217,219,222,225],{"class":78,"line":79},[76,218,186],{"class":177},[76,220,221],{"class":131}," new",[76,223,224],{"class":131}," myproject",[76,226,227],{"class":82},"          # 新建项目\n",[76,229,230,232,234,237,240],{"class":78,"line":86},[76,231,186],{"class":177},[76,233,221],{"class":131},[76,235,236],{"class":131}," mylib",[76,238,239],{"class":141}," --lib",[76,241,242],{"class":82},"        # 新建库\n",[76,244,245,247,250],{"class":78,"line":93},[76,246,186],{"class":177},[76,248,249],{"class":131}," build",[76,251,252],{"class":82},"                  # 编译\n",[76,254,255,257,259,262],{"class":78,"line":99},[76,256,186],{"class":177},[76,258,249],{"class":131},[76,260,261],{"class":141}," --release",[76,263,264],{"class":82},"        # 发布编译\n",[76,266,267,269,272],{"class":78,"line":105},[76,268,186],{"class":177},[76,270,271],{"class":131}," run",[76,273,274],{"class":82},"                    # 编译并运行\n",[76,276,277,279,282],{"class":78,"line":112},[76,278,186],{"class":177},[76,280,281],{"class":131}," test",[76,283,284],{"class":82},"                   # 运行测试\n",[76,286,287,289,292],{"class":78,"line":118},[76,288,186],{"class":177},[76,290,291],{"class":131}," check",[76,293,294],{"class":82},"                  # 快速检查（不生成二进制）\n",[76,296,298,300,303],{"class":78,"line":297},8,[76,299,186],{"class":177},[76,301,302],{"class":131}," fmt",[76,304,305],{"class":82},"                    # 格式化\n",[76,307,309,311,314],{"class":78,"line":308},9,[76,310,186],{"class":177},[76,312,313],{"class":131}," clippy",[76,315,316],{"class":82},"                 # Lint 检查\n",[36,318,319],{"id":319},"推荐学习顺序",[22,321,322],{},"比较稳的顺序通常是：",[324,325,326,332,335,346,359],"ol",{},[47,327,328,329],{},"先学变量、函数、结构体、枚举和 ",[73,330,331],{},"match",[47,333,334],{},"再学所有权、借用、生命周期的直觉",[47,336,337,338,341,342,345],{},"接着学 ",[73,339,340],{},"Result","、",[73,343,344],{},"Option"," 和错误处理",[47,347,348,349,341,352,341,355,358],{},"然后把 ",[73,350,351],{},"cargo check",[73,353,354],{},"fmt",[73,356,357],{},"clippy"," 用顺",[47,360,361],{},"最后再进入异步、Trait、泛型和工程化",[22,363,364],{},"不要一开始就冲 Tokio、宏和复杂生命周期，先把小程序写顺最重要。",[366,367,369],"h3",{"id":368},"cargotoml","Cargo.toml",[66,371,375],{"className":372,"code":373,"language":374,"meta":71,"style":71},"language-toml shiki shiki-themes github-light github-dark","[package]\nname = \"myproject\"\nversion = \"0.1.0\"\nedition = \"2024\"\n\n[dependencies]\nserde = { version = \"1\", features = [\"derive\"] }\ntokio = { version = \"1\", features = [\"full\"] }\nreqwest = { version = \"0.12\", features = [\"json\"] }\n","toml",[73,376,377,388,396,404,412,416,425,442,456],{"__ignoreMap":71},[76,378,379,382,385],{"class":78,"line":79},[76,380,381],{"class":89},"[",[76,383,384],{"class":177},"package",[76,386,387],{"class":89},"]\n",[76,389,390,393],{"class":78,"line":86},[76,391,392],{"class":89},"name = ",[76,394,395],{"class":131},"\"myproject\"\n",[76,397,398,401],{"class":78,"line":93},[76,399,400],{"class":89},"version = ",[76,402,403],{"class":131},"\"0.1.0\"\n",[76,405,406,409],{"class":78,"line":99},[76,407,408],{"class":89},"edition = ",[76,410,411],{"class":131},"\"2024\"\n",[76,413,414],{"class":78,"line":105},[76,415,109],{"emptyLinePlaceholder":108},[76,417,418,420,423],{"class":78,"line":112},[76,419,381],{"class":89},[76,421,422],{"class":177},"dependencies",[76,424,387],{"class":89},[76,426,427,430,433,436,439],{"class":78,"line":118},[76,428,429],{"class":89},"serde = { version = ",[76,431,432],{"class":131},"\"1\"",[76,434,435],{"class":89},", features = [",[76,437,438],{"class":131},"\"derive\"",[76,440,441],{"class":89},"] }\n",[76,443,444,447,449,451,454],{"class":78,"line":297},[76,445,446],{"class":89},"tokio = { version = ",[76,448,432],{"class":131},[76,450,435],{"class":89},[76,452,453],{"class":131},"\"full\"",[76,455,441],{"class":89},[76,457,458,461,464,466,469],{"class":78,"line":308},[76,459,460],{"class":89},"reqwest = { version = ",[76,462,463],{"class":131},"\"0.12\"",[76,465,435],{"class":89},[76,467,468],{"class":131},"\"json\"",[76,470,441],{"class":89},[36,472,473],{"id":473},"基础语法",[66,475,479],{"className":476,"code":477,"language":478,"meta":71,"style":71},"language-rust shiki shiki-themes github-light github-dark","\u002F\u002F 变量（默认不可变）\nlet name = \"Domi\";\nlet mut count = 0;    \u002F\u002F 可变\ncount += 1;\n\n\u002F\u002F 函数\nfn add(a: i32, b: i32) -> i32 {\n    a + b  \u002F\u002F 最后一个表达式作为返回值\n}\n\n\u002F\u002F 结构体\nstruct User {\n    name: String,\n    age: u32,\n}\n\nimpl User {\n    fn new(name: &str, age: u32) -> Self {\n        Self { name: name.to_string(), age }\n    }\n\n    fn greet(&self) -> String {\n        format!(\"Hi, I'm {} ({})\", self.name, self.age)\n    }\n}\n","rust",[73,480,481,486,503,524,537,541,546,581,595,600,605,611,622,636,649,654,659,669,704,727,733,738,763,791,796],{"__ignoreMap":71},[76,482,483],{"class":78,"line":79},[76,484,485],{"class":82},"\u002F\u002F 变量（默认不可变）\n",[76,487,488,491,494,497,500],{"class":78,"line":86},[76,489,490],{"class":124},"let",[76,492,493],{"class":89}," name ",[76,495,496],{"class":124},"=",[76,498,499],{"class":131}," \"Domi\"",[76,501,502],{"class":89},";\n",[76,504,505,507,510,513,515,518,521],{"class":78,"line":93},[76,506,490],{"class":124},[76,508,509],{"class":124}," mut",[76,511,512],{"class":89}," count ",[76,514,496],{"class":124},[76,516,517],{"class":141}," 0",[76,519,520],{"class":89},";    ",[76,522,523],{"class":82},"\u002F\u002F 可变\n",[76,525,526,529,532,535],{"class":78,"line":99},[76,527,528],{"class":89},"count ",[76,530,531],{"class":124},"+=",[76,533,534],{"class":141}," 1",[76,536,502],{"class":89},[76,538,539],{"class":78,"line":105},[76,540,109],{"emptyLinePlaceholder":108},[76,542,543],{"class":78,"line":112},[76,544,545],{"class":82},"\u002F\u002F 函数\n",[76,547,548,551,554,557,560,563,566,568,570,573,576,578],{"class":78,"line":118},[76,549,550],{"class":124},"fn",[76,552,553],{"class":177}," add",[76,555,556],{"class":89},"(a",[76,558,559],{"class":124},":",[76,561,562],{"class":177}," i32",[76,564,565],{"class":89},", b",[76,567,559],{"class":124},[76,569,562],{"class":177},[76,571,572],{"class":89},") ",[76,574,575],{"class":124},"->",[76,577,562],{"class":177},[76,579,580],{"class":89}," {\n",[76,582,583,586,589,592],{"class":78,"line":297},[76,584,585],{"class":89},"    a ",[76,587,588],{"class":124},"+",[76,590,591],{"class":89}," b  ",[76,593,594],{"class":82},"\u002F\u002F 最后一个表达式作为返回值\n",[76,596,597],{"class":78,"line":308},[76,598,599],{"class":89},"}\n",[76,601,603],{"class":78,"line":602},10,[76,604,109],{"emptyLinePlaceholder":108},[76,606,608],{"class":78,"line":607},11,[76,609,610],{"class":82},"\u002F\u002F 结构体\n",[76,612,614,617,620],{"class":78,"line":613},12,[76,615,616],{"class":124},"struct",[76,618,619],{"class":177}," User",[76,621,580],{"class":89},[76,623,625,628,630,633],{"class":78,"line":624},13,[76,626,627],{"class":89},"    name",[76,629,559],{"class":124},[76,631,632],{"class":177}," String",[76,634,635],{"class":89},",\n",[76,637,639,642,644,647],{"class":78,"line":638},14,[76,640,641],{"class":89},"    age",[76,643,559],{"class":124},[76,645,646],{"class":177}," u32",[76,648,635],{"class":89},[76,650,652],{"class":78,"line":651},15,[76,653,599],{"class":89},[76,655,657],{"class":78,"line":656},16,[76,658,109],{"emptyLinePlaceholder":108},[76,660,662,665,667],{"class":78,"line":661},17,[76,663,664],{"class":124},"impl",[76,666,619],{"class":177},[76,668,580],{"class":89},[76,670,672,675,677,680,682,685,688,691,693,695,697,699,702],{"class":78,"line":671},18,[76,673,674],{"class":124},"    fn",[76,676,221],{"class":177},[76,678,679],{"class":89},"(name",[76,681,559],{"class":124},[76,683,684],{"class":124}," &",[76,686,687],{"class":177},"str",[76,689,690],{"class":89},", age",[76,692,559],{"class":124},[76,694,646],{"class":177},[76,696,572],{"class":89},[76,698,575],{"class":124},[76,700,701],{"class":141}," Self",[76,703,580],{"class":89},[76,705,707,710,713,715,718,721,724],{"class":78,"line":706},19,[76,708,709],{"class":141},"        Self",[76,711,712],{"class":89}," { name",[76,714,559],{"class":124},[76,716,717],{"class":89}," name",[76,719,720],{"class":124},".",[76,722,723],{"class":177},"to_string",[76,725,726],{"class":89},"(), age }\n",[76,728,730],{"class":78,"line":729},20,[76,731,732],{"class":89},"    }\n",[76,734,736],{"class":78,"line":735},21,[76,737,109],{"emptyLinePlaceholder":108},[76,739,741,743,746,749,752,755,757,759,761],{"class":78,"line":740},22,[76,742,674],{"class":124},[76,744,745],{"class":177}," greet",[76,747,748],{"class":89},"(",[76,750,751],{"class":124},"&",[76,753,754],{"class":141},"self",[76,756,572],{"class":89},[76,758,575],{"class":124},[76,760,632],{"class":177},[76,762,580],{"class":89},[76,764,766,769,771,774,777,779,781,784,786,788],{"class":78,"line":765},23,[76,767,768],{"class":177},"        format!",[76,770,748],{"class":89},[76,772,773],{"class":131},"\"Hi, I'm {} ({})\"",[76,775,776],{"class":89},", ",[76,778,754],{"class":141},[76,780,720],{"class":124},[76,782,783],{"class":89},"name, ",[76,785,754],{"class":141},[76,787,720],{"class":124},[76,789,790],{"class":89},"age)\n",[76,792,794],{"class":78,"line":793},24,[76,795,732],{"class":89},[76,797,799],{"class":78,"line":798},25,[76,800,599],{"class":89},[36,802,803],{"id":803},"所有权与借用",[66,805,807],{"className":476,"code":806,"language":478,"meta":71,"style":71},"\u002F\u002F 所有权转移\nlet s1 = String::from(\"hello\");\nlet s2 = s1;  \u002F\u002F s1 不再可用\n\n\u002F\u002F 借用（引用）\nfn print_len(s: &str) {\n    println!(\"{}\", s.len());\n}\n\n\u002F\u002F 可变借用\nfn push_str(s: &mut String) {\n    s.push_str(\" world\");\n}\n",[73,808,809,814,839,854,858,863,882,903,907,911,916,934,951],{"__ignoreMap":71},[76,810,811],{"class":78,"line":79},[76,812,813],{"class":82},"\u002F\u002F 所有权转移\n",[76,815,816,818,821,823,825,828,831,833,836],{"class":78,"line":86},[76,817,490],{"class":124},[76,819,820],{"class":89}," s1 ",[76,822,496],{"class":124},[76,824,632],{"class":177},[76,826,827],{"class":124},"::",[76,829,830],{"class":177},"from",[76,832,748],{"class":89},[76,834,835],{"class":131},"\"hello\"",[76,837,838],{"class":89},");\n",[76,840,841,843,846,848,851],{"class":78,"line":93},[76,842,490],{"class":124},[76,844,845],{"class":89}," s2 ",[76,847,496],{"class":124},[76,849,850],{"class":89}," s1;  ",[76,852,853],{"class":82},"\u002F\u002F s1 不再可用\n",[76,855,856],{"class":78,"line":99},[76,857,109],{"emptyLinePlaceholder":108},[76,859,860],{"class":78,"line":105},[76,861,862],{"class":82},"\u002F\u002F 借用（引用）\n",[76,864,865,867,870,873,875,877,879],{"class":78,"line":112},[76,866,550],{"class":124},[76,868,869],{"class":177}," print_len",[76,871,872],{"class":89},"(s",[76,874,559],{"class":124},[76,876,684],{"class":124},[76,878,687],{"class":177},[76,880,881],{"class":89},") {\n",[76,883,884,887,889,892,895,897,900],{"class":78,"line":118},[76,885,886],{"class":177},"    println!",[76,888,748],{"class":89},[76,890,891],{"class":131},"\"{}\"",[76,893,894],{"class":89},", s",[76,896,720],{"class":124},[76,898,899],{"class":177},"len",[76,901,902],{"class":89},"());\n",[76,904,905],{"class":78,"line":297},[76,906,599],{"class":89},[76,908,909],{"class":78,"line":308},[76,910,109],{"emptyLinePlaceholder":108},[76,912,913],{"class":78,"line":602},[76,914,915],{"class":82},"\u002F\u002F 可变借用\n",[76,917,918,920,923,925,927,930,932],{"class":78,"line":607},[76,919,550],{"class":124},[76,921,922],{"class":177}," push_str",[76,924,872],{"class":89},[76,926,559],{"class":124},[76,928,929],{"class":124}," &mut",[76,931,632],{"class":177},[76,933,881],{"class":89},[76,935,936,939,941,944,946,949],{"class":78,"line":613},[76,937,938],{"class":89},"    s",[76,940,720],{"class":124},[76,942,943],{"class":177},"push_str",[76,945,748],{"class":89},[76,947,948],{"class":131},"\" world\"",[76,950,838],{"class":89},[76,952,953],{"class":78,"line":624},[76,954,599],{"class":89},[366,956,957],{"id":957},"新手理解所有权的实用心法",[44,959,960,963,969,975],{},[47,961,962],{},"一个值同一时刻只能有一个所有者",[47,964,965,966],{},"读数据优先借用 ",[73,967,968],{},"&T",[47,970,971,972],{},"要修改时再用 ",[73,973,974],{},"&mut T",[47,976,977,978,981,982],{},"能传 ",[73,979,980],{},"&str"," 就别急着传 ",[73,983,984],{},"String",[22,986,987],{},"写 Rust 时，很多报错并不是“编译器太严格”，而是在提醒你：数据到底归谁管、会不会被同时修改、离开作用域后还会不会被继续引用。",[36,989,990],{"id":990},"错误处理",[66,992,994],{"className":476,"code":993,"language":478,"meta":71,"style":71},"use std::fs;\n\n\u002F\u002F Result 类型\nfn read_file(path: &str) -> Result\u003CString, std::io::Error> {\n    fs::read_to_string(path)\n}\n\n\u002F\u002F ? 操作符\nfn process() -> Result\u003C(), Box\u003Cdyn std::error::Error>> {\n    let content = fs::read_to_string(\"config.toml\")?;\n    println!(\"{}\", content);\n    Ok(())\n}\n\n\u002F\u002F match 处理\nmatch read_file(\"data.txt\") {\n    Ok(content) => println!(\"{}\", content),\n    Err(e) => eprintln!(\"Error: {}\", e),\n}\n",[73,995,996,1009,1013,1018,1062,1075,1079,1083,1088,1127,1157,1168,1176,1180,1184,1189,1202,1222,1243],{"__ignoreMap":71},[76,997,998,1001,1004,1006],{"class":78,"line":79},[76,999,1000],{"class":124},"use",[76,1002,1003],{"class":177}," std",[76,1005,827],{"class":124},[76,1007,1008],{"class":89},"fs;\n",[76,1010,1011],{"class":78,"line":86},[76,1012,109],{"emptyLinePlaceholder":108},[76,1014,1015],{"class":78,"line":93},[76,1016,1017],{"class":82},"\u002F\u002F Result 类型\n",[76,1019,1020,1022,1025,1028,1030,1032,1034,1036,1038,1041,1044,1046,1049,1051,1054,1056,1059],{"class":78,"line":99},[76,1021,550],{"class":124},[76,1023,1024],{"class":177}," read_file",[76,1026,1027],{"class":89},"(path",[76,1029,559],{"class":124},[76,1031,684],{"class":124},[76,1033,687],{"class":177},[76,1035,572],{"class":89},[76,1037,575],{"class":124},[76,1039,1040],{"class":177}," Result",[76,1042,1043],{"class":89},"\u003C",[76,1045,984],{"class":177},[76,1047,1048],{"class":89},", std",[76,1050,827],{"class":124},[76,1052,1053],{"class":89},"io",[76,1055,827],{"class":124},[76,1057,1058],{"class":177},"Error",[76,1060,1061],{"class":89},"> {\n",[76,1063,1064,1067,1069,1072],{"class":78,"line":105},[76,1065,1066],{"class":177},"    fs",[76,1068,827],{"class":124},[76,1070,1071],{"class":177},"read_to_string",[76,1073,1074],{"class":89},"(path)\n",[76,1076,1077],{"class":78,"line":112},[76,1078,599],{"class":89},[76,1080,1081],{"class":78,"line":118},[76,1082,109],{"emptyLinePlaceholder":108},[76,1084,1085],{"class":78,"line":297},[76,1086,1087],{"class":82},"\u002F\u002F ? 操作符\n",[76,1089,1090,1092,1095,1098,1100,1102,1105,1108,1110,1113,1115,1117,1120,1122,1124],{"class":78,"line":308},[76,1091,550],{"class":124},[76,1093,1094],{"class":177}," process",[76,1096,1097],{"class":89},"() ",[76,1099,575],{"class":124},[76,1101,1040],{"class":177},[76,1103,1104],{"class":89},"\u003C(), ",[76,1106,1107],{"class":177},"Box",[76,1109,1043],{"class":89},[76,1111,1112],{"class":124},"dyn",[76,1114,1003],{"class":89},[76,1116,827],{"class":124},[76,1118,1119],{"class":89},"error",[76,1121,827],{"class":124},[76,1123,1058],{"class":177},[76,1125,1126],{"class":89},">> {\n",[76,1128,1129,1132,1135,1137,1140,1142,1144,1146,1149,1152,1155],{"class":78,"line":602},[76,1130,1131],{"class":124},"    let",[76,1133,1134],{"class":89}," content ",[76,1136,496],{"class":124},[76,1138,1139],{"class":177}," fs",[76,1141,827],{"class":124},[76,1143,1071],{"class":177},[76,1145,748],{"class":89},[76,1147,1148],{"class":131},"\"config.toml\"",[76,1150,1151],{"class":89},")",[76,1153,1154],{"class":124},"?",[76,1156,502],{"class":89},[76,1158,1159,1161,1163,1165],{"class":78,"line":607},[76,1160,886],{"class":177},[76,1162,748],{"class":89},[76,1164,891],{"class":131},[76,1166,1167],{"class":89},", content);\n",[76,1169,1170,1173],{"class":78,"line":613},[76,1171,1172],{"class":177},"    Ok",[76,1174,1175],{"class":89},"(())\n",[76,1177,1178],{"class":78,"line":624},[76,1179,599],{"class":89},[76,1181,1182],{"class":78,"line":638},[76,1183,109],{"emptyLinePlaceholder":108},[76,1185,1186],{"class":78,"line":651},[76,1187,1188],{"class":82},"\u002F\u002F match 处理\n",[76,1190,1191,1193,1195,1197,1200],{"class":78,"line":656},[76,1192,331],{"class":124},[76,1194,1024],{"class":177},[76,1196,748],{"class":89},[76,1198,1199],{"class":131},"\"data.txt\"",[76,1201,881],{"class":89},[76,1203,1204,1206,1209,1212,1215,1217,1219],{"class":78,"line":661},[76,1205,1172],{"class":177},[76,1207,1208],{"class":89},"(content) ",[76,1210,1211],{"class":124},"=>",[76,1213,1214],{"class":177}," println!",[76,1216,748],{"class":89},[76,1218,891],{"class":131},[76,1220,1221],{"class":89},", content),\n",[76,1223,1224,1227,1230,1232,1235,1237,1240],{"class":78,"line":671},[76,1225,1226],{"class":177},"    Err",[76,1228,1229],{"class":89},"(e) ",[76,1231,1211],{"class":124},[76,1233,1234],{"class":177}," eprintln!",[76,1236,748],{"class":89},[76,1238,1239],{"class":131},"\"Error: {}\"",[76,1241,1242],{"class":89},", e),\n",[76,1244,1245],{"class":78,"line":706},[76,1246,599],{"class":89},[366,1248,1249],{"id":1249},"实战建议",[44,1251,1252,1258,1261,1270],{},[47,1253,1254,1255],{},"应用入口层可以用 ",[73,1256,1257],{},"anyhow",[47,1259,1260],{},"库代码更适合定义明确错误类型",[47,1262,1263,1264,1266,1267],{},"能返回 ",[73,1265,340],{}," 就不要随手 ",[73,1268,1269],{},"unwrap()",[47,1271,1272,1273,1276],{},"调试阶段可以 ",[73,1274,1275],{},"expect(\"清晰报错\")","，上线前尽量减少无保护崩溃点",[36,1278,1279],{"id":1279},"枚举与模式匹配",[66,1281,1283],{"className":476,"code":1282,"language":478,"meta":71,"style":71},"enum Command {\n    Start,\n    Stop,\n    Send(String),\n}\n\nfn handle(cmd: Command) {\n    match cmd {\n        Command::Start => println!(\"Starting\"),\n        Command::Stop => println!(\"Stopping\"),\n        Command::Send(msg) => println!(\"Sending: {}\", msg),\n    }\n}\n",[73,1284,1285,1295,1302,1309,1321,1325,1329,1345,1353,1375,1395,1419,1423],{"__ignoreMap":71},[76,1286,1287,1290,1293],{"class":78,"line":79},[76,1288,1289],{"class":124},"enum",[76,1291,1292],{"class":177}," Command",[76,1294,580],{"class":89},[76,1296,1297,1300],{"class":78,"line":86},[76,1298,1299],{"class":177},"    Start",[76,1301,635],{"class":89},[76,1303,1304,1307],{"class":78,"line":93},[76,1305,1306],{"class":177},"    Stop",[76,1308,635],{"class":89},[76,1310,1311,1314,1316,1318],{"class":78,"line":99},[76,1312,1313],{"class":177},"    Send",[76,1315,748],{"class":89},[76,1317,984],{"class":177},[76,1319,1320],{"class":89},"),\n",[76,1322,1323],{"class":78,"line":105},[76,1324,599],{"class":89},[76,1326,1327],{"class":78,"line":112},[76,1328,109],{"emptyLinePlaceholder":108},[76,1330,1331,1333,1336,1339,1341,1343],{"class":78,"line":118},[76,1332,550],{"class":124},[76,1334,1335],{"class":177}," handle",[76,1337,1338],{"class":89},"(cmd",[76,1340,559],{"class":124},[76,1342,1292],{"class":177},[76,1344,881],{"class":89},[76,1346,1347,1350],{"class":78,"line":297},[76,1348,1349],{"class":124},"    match",[76,1351,1352],{"class":89}," cmd {\n",[76,1354,1355,1358,1360,1363,1366,1368,1370,1373],{"class":78,"line":308},[76,1356,1357],{"class":177},"        Command",[76,1359,827],{"class":124},[76,1361,1362],{"class":177},"Start",[76,1364,1365],{"class":124}," =>",[76,1367,1214],{"class":177},[76,1369,748],{"class":89},[76,1371,1372],{"class":131},"\"Starting\"",[76,1374,1320],{"class":89},[76,1376,1377,1379,1381,1384,1386,1388,1390,1393],{"class":78,"line":602},[76,1378,1357],{"class":177},[76,1380,827],{"class":124},[76,1382,1383],{"class":177},"Stop",[76,1385,1365],{"class":124},[76,1387,1214],{"class":177},[76,1389,748],{"class":89},[76,1391,1392],{"class":131},"\"Stopping\"",[76,1394,1320],{"class":89},[76,1396,1397,1399,1401,1404,1407,1409,1411,1413,1416],{"class":78,"line":607},[76,1398,1357],{"class":177},[76,1400,827],{"class":124},[76,1402,1403],{"class":177},"Send",[76,1405,1406],{"class":89},"(msg) ",[76,1408,1211],{"class":124},[76,1410,1214],{"class":177},[76,1412,748],{"class":89},[76,1414,1415],{"class":131},"\"Sending: {}\"",[76,1417,1418],{"class":89},", msg),\n",[76,1420,1421],{"class":78,"line":613},[76,1422,732],{"class":89},[76,1424,1425],{"class":78,"line":624},[76,1426,599],{"class":89},[36,1428,1429],{"id":1429},"先从这几类小项目练手",[44,1431,1432,1435,1438,1441],{},[47,1433,1434],{},"文件整理或重命名工具",[47,1436,1437],{},"简单命令行 Todo \u002F 记账 \u002F 下载器",[47,1439,1440],{},"读取配置文件并输出结果的小 CLI",[47,1442,1443],{},"调一个 HTTP API 并保存 JSON 的小程序",[22,1445,1446],{},"这几类项目足够小，又能让你把 Cargo、错误处理、序列化和模块拆分一起练到。",[36,1448,1450],{"id":1449},"常用-crate","常用 Crate",[1452,1453,1454,1467],"table",{},[1455,1456,1457],"thead",{},[1458,1459,1460,1464],"tr",{},[1461,1462,1463],"th",{},"Crate",[1461,1465,1466],{},"说明",[1468,1469,1470,1483,1495,1507,1519],"tbody",{},[1458,1471,1472,1480],{},[1473,1474,1475],"td",{},[25,1476,1479],{"href":1477,"rel":1478},"https:\u002F\u002Fserde.rs\u002F",[29],"serde",[1473,1481,1482],{},"序列化\u002F反序列化",[1458,1484,1485,1492],{},[1473,1486,1487],{},[25,1488,1491],{"href":1489,"rel":1490},"https:\u002F\u002Ftokio.rs\u002F",[29],"tokio",[1473,1493,1494],{},"异步运行时",[1458,1496,1497,1504],{},[1473,1498,1499],{},[25,1500,1503],{"href":1501,"rel":1502},"https:\u002F\u002Fdocs.rs\u002Freqwest",[29],"reqwest",[1473,1505,1506],{},"HTTP 客户端",[1458,1508,1509,1516],{},[1473,1510,1511],{},[25,1512,1515],{"href":1513,"rel":1514},"https:\u002F\u002Fdocs.rs\u002Fclap",[29],"clap",[1473,1517,1518],{},"CLI 参数解析",[1458,1520,1521,1527],{},[1473,1522,1523],{},[25,1524,1257],{"href":1525,"rel":1526},"https:\u002F\u002Fdocs.rs\u002Fanyhow",[29],[1473,1528,990],{},[36,1530,1531],{"id":1531},"常见坑",[366,1533,1535],{"id":1534},"一遇到借用报错就想硬修","一遇到借用报错就想“硬修”",[22,1537,1538],{},"先别急着加生命周期。更常见的正确解法通常是：",[44,1540,1541,1544,1547,1550],{},[47,1542,1543],{},"缩小变量作用域",[47,1545,1546],{},"拆小函数",[47,1548,1549],{},"改成借用而不是转移所有权",[47,1551,1552],{},"把需要长期持有的数据改成更清晰的结构",[366,1554,1556,1559],{"id":1555},"cargo-run-很顺一到工程化就乱",[73,1557,1558],{},"cargo run"," 很顺，一到工程化就乱",[22,1561,1562],{},"建议固定养成这套节奏：",[66,1564,1566],{"className":163,"code":1565,"language":165,"meta":71,"style":71},"cargo check\ncargo fmt\ncargo clippy\ncargo test\n",[73,1567,1568,1575,1582,1589],{"__ignoreMap":71},[76,1569,1570,1572],{"class":78,"line":79},[76,1571,186],{"class":177},[76,1573,1574],{"class":131}," check\n",[76,1576,1577,1579],{"class":78,"line":86},[76,1578,186],{"class":177},[76,1580,1581],{"class":131}," fmt\n",[76,1583,1584,1586],{"class":78,"line":93},[76,1585,186],{"class":177},[76,1587,1588],{"class":131}," clippy\n",[76,1590,1591,1593],{"class":78,"line":99},[76,1592,186],{"class":177},[76,1594,1595],{"class":131}," test\n",[22,1597,1598],{},"把这四步当成日常工作流，代码质量会稳定很多。",[366,1600,1601],{"id":1601},"依赖越加越多",[22,1603,1604],{},"Rust 生态很强，但也容易“为了一个小需求引入大依赖”。上线前建议回头看一遍依赖是否真的必要。",[36,1606,1607],{"id":1607},"延伸阅读",[44,1609,1610,1616,1622],{},[47,1611,1612],{},[25,1613,1615],{"href":1614},"\u002Fdocs\u002Frust-install","Rust 安装与工具链",[47,1617,1618],{},[25,1619,1621],{"href":1620},"\u002Fdocs\u002Fgo-basics","Go 入门",[47,1623,1624],{},[25,1625,1627],{"href":1626},"\u002Fdocs\u002Fshell-scripting","Shell 脚本基础",[36,1629,1630],{"id":1630},"参考链接",[44,1632,1633,1641,1649,1657],{},[47,1634,1635,1640],{},[25,1636,1639],{"href":1637,"rel":1638},"https:\u002F\u002Fdoc.rust-lang.org\u002Fbook\u002F",[29],"Rust Book"," — 官方教程",[47,1642,1643,1648],{},[25,1644,1647],{"href":1645,"rel":1646},"https:\u002F\u002Fdoc.rust-lang.org\u002Frust-by-example\u002F",[29],"Rust by Example"," — 示例学习",[47,1650,1651,1656],{},[25,1652,1655],{"href":1653,"rel":1654},"https:\u002F\u002Fcrates.io\u002F",[29],"crates.io"," — 包仓库",[47,1658,1659,1664],{},[25,1660,1663],{"href":1661,"rel":1662},"https:\u002F\u002Fgithub.com\u002Frust-lang\u002Frustlings",[29],"Rustlings"," — 练习题",[1666,1667,1668],"style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}",{"title":71,"searchDepth":86,"depth":86,"links":1670},[1671,1672,1673,1674,1677,1678,1681,1684,1685,1686,1687,1693,1694],{"id":38,"depth":86,"text":39},{"id":64,"depth":86,"text":64},{"id":208,"depth":86,"text":209},{"id":319,"depth":86,"text":319,"children":1675},[1676],{"id":368,"depth":93,"text":369},{"id":473,"depth":86,"text":473},{"id":803,"depth":86,"text":803,"children":1679},[1680],{"id":957,"depth":93,"text":957},{"id":990,"depth":86,"text":990,"children":1682},[1683],{"id":1249,"depth":93,"text":1249},{"id":1279,"depth":86,"text":1279},{"id":1429,"depth":86,"text":1429},{"id":1449,"depth":86,"text":1450},{"id":1531,"depth":86,"text":1531,"children":1688},[1689,1690,1692],{"id":1534,"depth":93,"text":1535},{"id":1555,"depth":93,"text":1691},"cargo run 很顺，一到工程化就乱",{"id":1601,"depth":93,"text":1601},{"id":1607,"depth":86,"text":1607},{"id":1630,"depth":86,"text":1630},{"path":1696,"title":1697,"description":1698,"docType":8,"resourceKind":9,"categoryId":10,"categoryLabel":11,"updatedAt":12,"publishedAt":12,"icon":13},"\u002Fdocs\u002Fapi-design","RESTful API 设计","REST API 设计规范、状态码、认证方案、版本控制与文档工具",{"path":1626,"title":1700,"description":1701,"docType":8,"resourceKind":9,"categoryId":10,"categoryLabel":11,"updatedAt":12,"publishedAt":12,"icon":13},"Shell 脚本入门","Bash 脚本基础语法、变量、条件判断、循环与实用脚本示例",[1703,1704,1705],"希望把零散经验整理成长期可复用工作流的人","想先建立认知，再决定是否深入实践的人","希望阅读时顺手建立自己的操作清单或收藏体系的人",[1707,1708,1709],"先浏览标题、摘要和目录，带着问题阅读会更高效","顺手记录真正对你有用的命令、链接和注意事项，避免重复搜索","如果页面里提到相关文档，尽量一起打开对照，效果通常更完整",[1711,1716,1720,1724],{"path":1712,"title":1713,"description":1714,"docType":8,"resourceKind":9,"categoryId":10,"categoryLabel":11,"updatedAt":1715,"publishedAt":1715,"icon":13},"\u002Fdocs\u002Ftesting-guide","前端测试指南","Vitest 单元测试、Playwright E2E 测试、测试策略与最佳实践","2026-02-28",{"path":1717,"title":1718,"description":1719,"docType":8,"resourceKind":9,"categoryId":10,"categoryLabel":11,"updatedAt":1715,"publishedAt":1715,"icon":13},"\u002Fdocs\u002Fbun-deno","Bun 与 Deno 运行时","Bun 和 Deno 的安装使用、与 Node.js 对比、包管理与实用命令",{"path":1721,"title":1722,"description":1723,"docType":8,"resourceKind":9,"categoryId":10,"categoryLabel":11,"updatedAt":1715,"publishedAt":1715,"icon":13},"\u002Fdocs\u002Fcss-tricks","CSS 实用技巧","现代 CSS 特性、布局技巧、动画、暗色模式与常用代码片段",{"path":1725,"title":1726,"description":1727,"docType":8,"resourceKind":9,"categoryId":10,"categoryLabel":11,"updatedAt":1715,"publishedAt":1715,"icon":13},"\u002Fdocs\u002Fredis-guide","Redis 使用指南","Redis 安装、数据类型、常用命令、缓存策略与 Node.js 集成",1776215715125]