{"id":44881,"date":"2023-12-25T20:09:38","date_gmt":"2023-12-17T10:14:10","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/44881-2\/"},"modified":"2024-05-04T15:21:47","modified_gmt":"2024-05-04T07:21:47","slug":"44881-2","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/44881-2\/","title":{"rendered":""},"content":{"rendered":"<div>\n<p>\u3053\u306e\u8a18\u4e8b\u306fZOZO AdventCalender 2023\u30b7\u30ea\u30fc\u30ba9\u306e4\u65e5\u76ee\u306e\u8a18\u4e8b\u3067\u3059\u3002<\/p>\n<\/div>\n<h1>\u306f\u3058\u3081\u306b<\/h1>\n<p>Rust\u521d\u5fc3\u8005\u306e\u7b46\u8005\u304cRust\u306e\u74b0\u5883\u69cb\u7bc9\u304b\u3089\u59cb\u3081\u3066\u3001Rust\u5b9f\u88c5\u306ekubenetes client\u3067\u3042\u308bkube-rs\/kube\u3092\u4f7f\u3063\u3066pod\u3092\u7acb\u3061\u4e0a\u3052\u3066Hello, kube-rs!\u3059\u308b\u307e\u3067\u3092\u30cf\u30f3\u30ba\u30aa\u30f3\u3057\u3066\u3044\u304d\u307e\u3059\u3002<br \/>\nkubernetes\u306e\u74b0\u5883\u306fEKS\u4e0a\u306b\u65e2\u306b\u7acb\u3061\u4e0a\u3052\u3066\u3042\u308b\u74b0\u5883\u3092\u4f7f\u7528\u3057\u307e\u3059\u304c\u3001\u4eca\u56de\u306e\u8a18\u4e8b\u3067\u306fEKS\u306e\u8a2d\u5b9a\u306a\u3069\u306b\u306f\u89e6\u308c\u307e\u305b\u3093\u3002<br \/>\n\u958b\u767a\u74b0\u5883\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\u3002<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">M2 Mac<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">zsh<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">AstroNvim\u3092\u5165\u308c\u305fNeovim<\/ul>\n<h1>Rust\u306e\u516c\u5f0f\u60c5\u5831<\/h1>\n<p>\u307e\u305a\u306f\u53c2\u8003\u3068\u306a\u308b\u60c5\u5831\u3092\u63a2\u3057\u307e\u3059\u3002<br \/>\n\u4e00\u756a\u59cb\u3081\u306b\u78ba\u8a8d\u3059\u3079\u304d\u306f\u516c\u5f0f\u60c5\u5831\u306a\u306e\u3067\u3001Rust\u306e\u516c\u5f0f\u30b5\u30a4\u30c8\u3092\u78ba\u8a8d\u3057\u307e\u3057\u3087\u3046\u3002<br \/>\n\u3042\u308a\u304c\u305f\u3044\u3053\u3068\u306b\u65e5\u672c\u8a9e\u8a33\u3082\u7528\u610f\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<ul class=\"post-ul\">https:\/\/www.rust-lang.org\/ja\/<\/ul>\n<h3>\u5b66\u3076<\/h3>\n<p>\u5b66\u3076\u306e\u30da\u30fc\u30b8\u306b\u8272\u3005\u3068\u53c2\u8003\u306b\u306a\u308a\u305d\u3046\u306a\u60c5\u5831\u304c\u63c3\u3063\u3066\u3044\u307e\u3059\u3002<br \/>\n\u6a19\u6e96\u30e9\u30a4\u30d6\u30e9\u30ea\u306eAPI\u30ac\u30a4\u30c9\u3082\u3053\u3053\u304b\u3089\u98db\u3079\u305d\u3046\u3067\u3059\u3002<br \/>\n\u305d\u306e\u4ed6\u306b\u3082The Rust Programming Language\u3068\u3044\u3046\u66f8\u7c4d\u3082\u30aa\u30f3\u30e9\u30a4\u30f3\u3067\u8aad\u3081\u308b\u3088\u3046\u3067\u3059\u3002<br \/>\n\u975e\u516c\u5f0f\u3067\u306f\u3042\u308b\u3088\u3046\u3067\u3059\u304c\u3001\u65e5\u672c\u8a9e\u8a33\u3082\u3042\u308a\u307e\u3057\u305f\u3002<\/p>\n<p>\u3053\u308c\u3089\u306e\u60c5\u5831\u3092\u53c2\u8003\u306b\u3057\u3064\u3064\u9032\u3081\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n<h1>Rust\u306e\u74b0\u5883\u69cb\u7bc9<\/h1>\n<p>\u307e\u305a\u306frust\u306e\u74b0\u5883\u69cb\u7bc9\u304b\u3089\u59cb\u3081\u307e\u3059\u3002<br \/>\n\u7b46\u8005\u306e\u74b0\u5883\u306fM2Mac\u306a\u306e\u3067mac\u3092\u524d\u63d0\u306b\u9032\u3081\u3066\u3044\u304d\u307e\u3059\u3002<br \/>\n\u5c11\u3057\u8abf\u3079\u3066\u307f\u308b\u3068Rust\u3067\u306frustup\u3068\u3044\u3046\u30c4\u30fc\u30eb\u3092\u4f7f\u3063\u3066\u30c4\u30fc\u30eb\u30c1\u30a7\u30fc\u30f3\u306e\u7ba1\u7406\u3092\u884c\u3046\u3088\u3046\u3067\u3059\u3002<br \/>\nmac\u306a\u3089Homebrew\u3067\u3082\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3067\u304d\u308b\u3088\u3046\u3067\u3059\u304c\u3001\u3053\u3053\u306f\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306b\u5f93\u3063\u3066curl\u3067shell\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u53d6\u5f97\u3057\u3066\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066\u3044\u304d\u305f\u3044\u3068\u601d\u3044\u307e\u3059\u3002<br \/>\n\u5b9f\u884c\u30b3\u30de\u30f3\u30c9\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>curl <span class=\"nt\">--proto<\/span> <span class=\"s1\">'=https'<\/span> <span class=\"nt\">--tlsv1<\/span>.2 <span class=\"nt\">-sSf<\/span> https:\/\/sh.rustup.rs | sh\r\n<\/code><\/pre>\n<p>\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306b\u3088\u308b\u3068\u3001<\/p>\n<blockquote><p>Rust\u306e\u958b\u767a\u74b0\u5883\u306b\u304a\u3044\u3066\u3001\u5168\u3066\u306e\u30c4\u30fc\u30eb\u306f~\/.cargo\/bin\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3001\u3053\u3053\u306brustc\u3001cargo\u3001rustup\u3092\u542b\u3080Rust\u306e\u30c4\u30fc\u30eb\u30c1\u30a7\u30fc\u30f3\u304c\u7f6e\u304b\u308c\u307e\u3059\u3002<br \/>\n\u3088\u3063\u3066\u3001\u3053\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092PATH\u74b0\u5883\u5909\u6570\u306b\u542b\u3081\u308b\u306e\u304c\u3001Rust\u306e\u958b\u767a\u8005\u306b\u3068\u3063\u3066\u306e\u901a\u4f8b\u3068\u306a\u3063\u3066\u3044\u307e\u3059\u3002<\/p><\/blockquote>\n<p>\u3068\u3042\u308b\u306e\u3067~\/.cargo\/bin\u3092PATH\u306b\u8ffd\u52a0\u3059\u308b\u3088\u3046\u306b~\/.zshrc\u306b\u4ee5\u4e0b\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nb\">export <\/span><span class=\"nv\">PATH<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"<\/span><span class=\"nv\">$HOME<\/span><span class=\"s2\">\/.cargo\/bin:<\/span><span class=\"nv\">$PATH<\/span><span class=\"s2\">\"<\/span>\r\n<\/code><\/pre>\n<p>\u3053\u308c\u3067\u3072\u3068\u307e\u305a\u6700\u4f4e\u9650rust\u3092\u5b9f\u884c\u3059\u308b\u74b0\u5883\u304c\u6574\u3044\u307e\u3057\u305f\u3002<\/p>\n<h2>\u305d\u306e\u4ed6\u306e\u958b\u767a\u30c4\u30fc\u30eb<\/h2>\n<p>\u516c\u5f0f\u3067\u3082\u7d39\u4ecb\u3055\u308c\u3066\u3044\u308bThe Rust Programming Language \u65e5\u672c\u8a9e\u7248\u306b\u3001\u4ed8\u9332\u3068\u3057\u3066\u4fbf\u5229\u306a\u958b\u767a\u30c4\u30fc\u30eb\u304c\u8f09\u3063\u3066\u3044\u307e\u3059\u3002<br \/>\n\u3053\u3053\u3067\u7d39\u4ecb\u3055\u308c\u3066\u3044\u308b\u5404\u7a2e\u30c4\u30fc\u30eb\u306f\u3068\u308a\u3042\u3048\u305a\u5165\u308c\u3066\u304a\u304d\u307e\u3057\u3087\u3046\u3002<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">rustfmt<\/ul>\n<\/li>\n<\/ul>\n<p>\u30b3\u30fc\u30c9\u30d5\u30a9\u30fc\u30de\u30c3\u30bf<\/p>\n<p>rustfix<\/p>\n<p>rust\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u3068\u540c\u68b1\u3055\u308c\u3066\u3044\u308b\u30c4\u30fc\u30eb\u3067\u30b3\u30f3\u30d1\u30a4\u30e9\u306e\u8b66\u544a\u3092\u81ea\u52d5\u3067\u76f4\u3057\u3066\u304f\u308c\u308b\u3002cargo fix\u3067\u5b9f\u884c\u3059\u308b<\/p>\n<p>clippy<\/p>\n<p>\u3044\u308f\u3086\u308b\u9759\u7684\u89e3\u6790\u30c4\u30fc\u30eb<\/p>\n<p>rust-analyzer<\/p>\n<p>LSP(LanguageServerProtocol)\u306b\u5bfe\u5fdc\u3057\u305fServer\u3002IDE\u3068\u9023\u643a\u3057\u3066\u81ea\u52d5\u88dc\u5b8c\u30fb\u5b9a\u7fa9\u30b8\u30e3\u30f3\u30d7\u30fb\u30a4\u30f3\u30e9\u30a4\u30f3\u306e\u30a8\u30e9\u30fc\u8868\u793a\u304c\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308b\u3002<br \/>\n\u66f8\u7c4d\u3067\u7d39\u4ecb\u3055\u308c\u3066\u3044\u308b\u306e\u306frls\u3067\u3059\u304c\u3001rls\u306eREADME\u306brust-analyzer\u3092\u4f7f\u3046\u3088\u3046\u306b\u66f8\u3044\u3066\u3042\u308b\u306e\u3067rust-analyzer\u3092\u5165\u308c\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n<h2>nvim\u8a2d\u5b9a<\/h2>\n<p>\u4fdd\u5b58\u6642\u306b\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3092\u81ea\u52d5\u3067\u5b9f\u884c\u3059\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3092\u3057\u307e\u3059\u3002<br \/>\nrustfmt\u306eREADME\u306b\u5404\u7a2eeditor\u3067\u306e\u8a2d\u5b9a\u65b9\u6cd5\u3078\u306e\u30ea\u30f3\u30af\u304c\u3042\u308b\u306e\u3067\u3001<br \/>\nvim\u306e\u8a2d\u5b9a\u306b\u98db\u3076\u3068rust.vim\u3068\u3044\u3046vim\u306eplugin\u304c\u7528\u610f\u3055\u308c\u3066\u308b\u3088\u3046\u306a\u306e\u3067\u5165\u308c\u3066\u3044\u304d\u307e\u3057\u3087\u3046\u3002<br \/>\n\u7b46\u8005\u306fAstroNvim\u3092\u4f7f\u3063\u3066\u3044\u308b\u306e\u3067\u3001~\/.config\/nvim\/lua\/user\/init.lua\u306b\u8a2d\u5b9a\u3092\u5165\u308c\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"p\">{<\/span>\r\n  <span class=\"s2\">\"rust-lang\/rust.vim\"<\/span><span class=\"p\">,<\/span>\r\n  <span class=\"n\">lazy<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">false<\/span><span class=\"p\">,<\/span>\r\n  <span class=\"n\">config<\/span> <span class=\"o\">=<\/span> <span class=\"k\">function<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"n\">vim<\/span><span class=\"p\">.<\/span><span class=\"n\">g<\/span><span class=\"p\">.<\/span><span class=\"n\">rustfmt_autosave<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">1<\/span>\r\n  <span class=\"k\">end<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<p>\u3053\u308c\u3067\u4fdd\u5b58\u6642\u306b\u81ea\u52d5\u3067\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3055\u308c\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<p>LSP\u5b9f\u88c5\u306erust-analyzer\u3082\u6e96\u5099\u3057\u3066\u304a\u304d\u307e\u3059\u3002<br \/>\nAstroNvim\u3067\u3042\u308c\u3070mason-lspconfig\u304c\u3042\u308b\u306e\u3067:LspInstall rust\u3067\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3067\u304d\u308b\u306e\u3067\u30b5\u30af\u30c3\u3068\u5165\u308c\u308c\u307e\u3059\u3002<\/p>\n<p>\u3072\u3068\u3068\u304a\u308a\u74b0\u5883\u3092\u6574\u3048\u305f\u3089\u307e\u305a\u306fHello, World!\u3057\u3066\u307f\u307e\u3059\u3002<br \/>\nThe Rust Programming Language \u65e5\u672c\u8a9e\u7248\u306eHello, World!\u306b\u5f93\u3063\u3066\u3084\u3063\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">fn<\/span> <span class=\"nf\">main<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nd\">println!<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Hello, world!\"<\/span><span class=\"p\">)<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<p>\u30b3\u30fc\u30c9\u3092\u30b3\u30f3\u30d1\u30a4\u30eb\u3057\u3066\u5b9f\u884c\u3057\u3066\u307f\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>rustc main.rs\r\n<span class=\"nv\">$ <\/span>.\/main\r\nHello, world!\r\n<span class=\"err\">$<\/span>\r\n<\/code><\/pre>\n<p>\u5b9f\u884c\u3067\u304d\u307e\u3057\u305f\uff01<br \/>\nrust\u306e\u30b3\u30f3\u30d1\u30a4\u30eb\u3068\u5b9f\u884c\u304c\u78ba\u8a8d\u3067\u304d\u305f\u306e\u3067\u3001\u65e9\u901fpod\u3092\u7acb\u3061\u4e0a\u3052\u308b\u30b3\u30fc\u30c9\u3092\u66f8\u3044\u3066\u3044\u304d\u305f\u3044\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n<h1>Hello, Kube-rs<\/h1>\n<p>\u307e\u305a\u306f\u65b0\u3057\u3044\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<br \/>\nRust\u306b\u306fCargo\u3068\u3044\u3046\u30d3\u30eb\u30c9\u30b7\u30b9\u30c6\u30e0\u517c\u30d1\u30c3\u30b1\u30fc\u30b8\u30de\u30cd\u30fc\u30b8\u30e3\u304c\u3042\u308b\u306e\u3067\u3001cargo\u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u3063\u3066\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>cargo new hello_kubers\r\n     Created binary <span class=\"o\">(<\/span>application<span class=\"o\">)<\/span> <span class=\"sb\">`<\/span>hello_kubers<span class=\"sb\">`<\/span> package\r\n<span class=\"nv\">$ <\/span>\r\n<\/code><\/pre>\n<p>\u3053\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u3068\u4ee5\u4e0b\u306e\u69cb\u6210\u3067\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304c\u4f5c\u6210\u3055\u308c\u307e\u3059\u3002<br \/>\ngit\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3068gitignore\u3082\u751f\u6210\u3055\u308c\u308b\u3088\u3046\u3067\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>tree <span class=\"nt\">-a<\/span>\r\n<span class=\"nb\">.<\/span>\r\n\u251c\u2500\u2500 .git\r\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 HEAD\r\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 config\r\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 description\r\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 hooks\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 README.sample\r\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 info\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 exclude\r\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 objects\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 info\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 pack\r\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 refs\r\n\u2502\u00a0\u00a0     \u251c\u2500\u2500 heads\r\n\u2502\u00a0\u00a0     \u2514\u2500\u2500 tags\r\n\u251c\u2500\u2500 .gitignore\r\n\u251c\u2500\u2500 Cargo.toml\r\n\u2514\u2500\u2500 src\r\n    \u2514\u2500\u2500 main.rs\r\n\r\n11 directories, 8 files\r\n<span class=\"err\">$<\/span>\r\n<\/code><\/pre>\n<p>\u305d\u308c\u3067\u306f\u672c\u984c\u306ekube-rs\u3092\u4f7f\u3063\u3066kubernetes\u30af\u30e9\u30b9\u30bf\u306bpod\u3092\u7acb\u3061\u4e0a\u3052\u308b\u307e\u3067\u3092\u3084\u3063\u3066\u3044\u304d\u305f\u3044\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n<h2>kube-rs Install<\/h2>\n<p>kube-rs\u306eREADME\u306b\u5f93\u3063\u3066\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002<br \/>\nCargo.toml\u306b\u4e0b\u8a18\u3092\u8ffd\u52a0\u3057\u307e\u3057\u3087\u3046\u3002<br \/>\n\u975e\u540c\u671f\u51e6\u7406\u3092\u884c\u3046\u305f\u3081\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u3067\u3042\u308btokio\u3082\u4e00\u7dd2\u306b\u5165\u308c\u3066\u304a\u304d\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nn\">[dependencies]<\/span>\r\n<span class=\"nn\">kube<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span> <span class=\"py\">version<\/span> <span class=\"p\">=<\/span> <span class=\"s\">\"0.87.1\"<\/span><span class=\"p\">,<\/span> <span class=\"py\">features<\/span> <span class=\"p\">=<\/span> <span class=\"p\">[<\/span><span class=\"s\">\"runtime\"<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"derive\"<\/span><span class=\"p\">]<\/span> <span class=\"p\">}<\/span>\r\n<span class=\"nn\">k8s-openapi<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span> <span class=\"py\">version<\/span> <span class=\"p\">=<\/span> <span class=\"s\">\"0.20.0\"<\/span><span class=\"p\">,<\/span> <span class=\"py\">features<\/span> <span class=\"p\">=<\/span> <span class=\"p\">[<\/span><span class=\"s\">\"latest\"<\/span><span class=\"p\">]<\/span> <span class=\"p\">}<\/span>\r\n<span class=\"nn\">tokio<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span> <span class=\"py\">version<\/span> <span class=\"p\">=<\/span> <span class=\"s\">\"1\"<\/span><span class=\"p\">,<\/span> <span class=\"py\">features<\/span> <span class=\"p\">=<\/span> <span class=\"p\">[<\/span><span class=\"s\">\"full\"<\/span><span class=\"p\">]<\/span> <span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<h2>pod\u3092\u7acb\u3061\u4e0a\u3052\u3066Hello, kube-rs!\u3059\u308b<\/h2>\n<p>\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u773a\u3081\u3066\u3044\u308b\u3068examples\u306b\u8272\u3005\u3068\u30b5\u30f3\u30d7\u30eb\u30b3\u30fc\u30c9\u304c\u8f09\u3063\u3066\u3044\u307e\u3059\u3002<br \/>\n\u305d\u306e\u4e2d\u306b\u3042\u308bpod_attach.rs\u304c\u3061\u3087\u3046\u3069\u4eca\u56de\u3084\u308a\u305f\u3044\u3053\u3068\u306e\u30b5\u30f3\u30d7\u30eb\u306b\u306a\u3063\u3066\u3044\u308b\u306e\u3067\u305d\u306e\u307e\u307e\u4f7f\u308f\u305b\u3066\u3082\u3089\u3044\u307e\u3057\u3087\u3046\u3002<br \/>\n\u3068\u308a\u3042\u3048\u305a\u30b3\u30fc\u30c9\u3092\u5168\u3066\u30b3\u30d4\u30fc\u3057\u3066\u3001Pod\u3092\u4f5c\u6210\u3059\u308b\u305f\u3081\u306e\u30ea\u30bd\u30fc\u30b9\u5b9a\u7fa9\u3092\u4e0b\u8a18\u306e\u3088\u3046\u306b\u5909\u66f4\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>    <span class=\"k\">let<\/span> <span class=\"n\">p<\/span><span class=\"p\">:<\/span> <span class=\"n\">Pod<\/span> <span class=\"o\">=<\/span> <span class=\"nn\">serde_json<\/span><span class=\"p\">::<\/span><span class=\"nf\">from_value<\/span><span class=\"p\">(<\/span><span class=\"nn\">serde_json<\/span><span class=\"p\">::<\/span><span class=\"nd\">json!<\/span><span class=\"p\">({<\/span>\r\n        <span class=\"s\">\"apiVersion\"<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"v1\"<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"s\">\"kind\"<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"Pod\"<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"s\">\"metadata\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span> <span class=\"s\">\"name\"<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"test-kane8n\"<\/span> <span class=\"p\">},<\/span>\r\n        <span class=\"s\">\"spec\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"s\">\"containers\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">[{<\/span>\r\n                <span class=\"s\">\"name\"<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"test-kane8n\"<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"s\">\"image\"<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"alpine\"<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"s\">\"command\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span><span class=\"s\">\"sh\"<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"-c\"<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"echo <\/span><span class=\"se\">\\\"<\/span><span class=\"s\">Hello, kube-rs!<\/span><span class=\"se\">\\\"<\/span><span class=\"s\"> &amp;&amp; sleep 10\"<\/span><span class=\"p\">],<\/span>\r\n            <span class=\"p\">}],<\/span>\r\n        <span class=\"p\">}<\/span>\r\n    <span class=\"p\">}))<\/span><span class=\"o\">?<\/span><span class=\"p\">;<\/span>\r\n<\/code><\/pre>\n<p>\u307e\u305fpod\u540d\u3092\u6307\u5b9a\u3057\u3066\u3044\u308b\u7b87\u6240\u3082\u9069\u5b9c\u5909\u66f4\u3057\u307e\u3059\u3002<br \/>\n\u30d3\u30eb\u30c9\u306fcargo build\u30b3\u30de\u30f3\u30c9\u3067\u3084\u308a\u307e\u3057\u3087\u3046\u3002<br \/>\n\u3053\u306e\u6642\u70b9\u3067\u30d3\u30eb\u30c9\u3057\u3066\u307f\u308b\u3068\u5927\u91cf\u306e\u30a8\u30e9\u30fc\u3092\u5410\u3044\u3066\u30d3\u30eb\u30c9\u304c\u5931\u6557\u3057\u307e\u3059\u3002<br \/>\n\u884c\u6570\u304c\u591a\u3044\u306e\u3067\u3053\u3053\u306b\u8f09\u305b\u308b\u306e\u306f\u7701\u304d\u307e\u3059\u304c\u3001\u3069\u3046\u3084\u3089\u8272\u3005\u3068\u4f9d\u5b58\u95a2\u4fc2\u306e\u8a2d\u5b9a\u306a\u3093\u304b\u304c\u8db3\u308a\u3066\u306a\u3044\u3088\u3046\u306a\u306e\u3067examples\u306eCargo.toml\u3092\u53c2\u8003\u306b\u8db3\u308a\u3066\u306a\u3055\u305d\u3046\u306a\u3082\u306e\u3092\u8db3\u3057\u3066\u3044\u304d\u307e\u3059\u3002<br \/>\n\u6700\u7d42\u7684\u306b\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u3059\u308b\u3053\u3068\u3067\u30d3\u30eb\u30c9\u304c\u3067\u304d\u307e\u3057\u305f\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nn\">[package]<\/span>\r\n<span class=\"py\">name<\/span> <span class=\"p\">=<\/span> <span class=\"s\">\"hello_kubers\"<\/span>\r\n<span class=\"py\">version<\/span> <span class=\"p\">=<\/span> <span class=\"s\">\"0.1.0\"<\/span>\r\n<span class=\"py\">edition<\/span> <span class=\"p\">=<\/span> <span class=\"s\">\"2021\"<\/span>\r\n\r\n<span class=\"c\"># See more keys and their definitions at https:\/\/doc.rust-lang.org\/cargo\/reference\/manifest.html<\/span>\r\n\r\n<span class=\"nn\">[features]<\/span>\r\n<span class=\"py\">default<\/span> <span class=\"p\">=<\/span> <span class=\"p\">[<\/span><span class=\"s\">\"ws\"<\/span><span class=\"p\">]<\/span>\r\n<span class=\"py\">ws<\/span> <span class=\"p\">=<\/span> <span class=\"p\">[<\/span><span class=\"s\">\"kube\/ws\"<\/span><span class=\"p\">]<\/span>\r\n\r\n<span class=\"nn\">[dependencies]<\/span>\r\n<span class=\"nn\">kube<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span> <span class=\"py\">version<\/span> <span class=\"p\">=<\/span> <span class=\"s\">\"0.87.1\"<\/span><span class=\"p\">,<\/span> <span class=\"py\">features<\/span> <span class=\"p\">=<\/span> <span class=\"p\">[<\/span><span class=\"s\">\"runtime\"<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"derive\"<\/span><span class=\"p\">]<\/span> <span class=\"p\">}<\/span>\r\n<span class=\"nn\">k8s-openapi<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span> <span class=\"py\">version<\/span> <span class=\"p\">=<\/span> <span class=\"s\">\"0.20.0\"<\/span><span class=\"p\">,<\/span> <span class=\"py\">features<\/span> <span class=\"p\">=<\/span> <span class=\"p\">[<\/span><span class=\"s\">\"latest\"<\/span><span class=\"p\">]<\/span> <span class=\"p\">}<\/span>\r\n<span class=\"nn\">tokio<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span> <span class=\"py\">version<\/span> <span class=\"p\">=<\/span> <span class=\"s\">\"1\"<\/span><span class=\"p\">,<\/span> <span class=\"py\">features<\/span> <span class=\"p\">=<\/span> <span class=\"p\">[<\/span><span class=\"s\">\"full\"<\/span><span class=\"p\">]<\/span> <span class=\"p\">}<\/span>\r\n<span class=\"py\">tokio-util<\/span> <span class=\"p\">=<\/span> <span class=\"s\">\"0.7.0\"<\/span>\r\n<span class=\"nn\">serde<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span> <span class=\"py\">version<\/span> <span class=\"p\">=<\/span> <span class=\"s\">\"1\"<\/span><span class=\"p\">,<\/span> <span class=\"py\">features<\/span> <span class=\"p\">=<\/span> <span class=\"p\">[<\/span><span class=\"s\">\"derive\"<\/span><span class=\"p\">]<\/span> <span class=\"p\">}<\/span>\r\n<span class=\"py\">serde_json<\/span> <span class=\"p\">=<\/span> <span class=\"s\">\"1.0\"<\/span>\r\n<span class=\"py\">tracing<\/span> <span class=\"p\">=<\/span> <span class=\"s\">\"0.1.36\"<\/span>\r\n<span class=\"py\">tracing-subscriber<\/span> <span class=\"p\">=<\/span> <span class=\"s\">\"0.3.3\"<\/span>\r\n<span class=\"py\">anyhow<\/span> <span class=\"p\">=<\/span> <span class=\"s\">\"1.0.44\"<\/span>\r\n<span class=\"py\">futures<\/span> <span class=\"p\">=<\/span> <span class=\"s\">\"0.3.17\"<\/span>\r\n<\/code><\/pre>\n<p>\u3044\u3063\u305f\u3093\u30d3\u30eb\u30c9\u304c\u3067\u304d\u305f\u306e\u3067\u3001\u8a66\u3057\u306b\u5b9f\u884c\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002<br \/>\n\u30d3\u30eb\u30c9\u3057\u305f\u30d0\u30a4\u30ca\u30ea\u306ftarget\/debug\/hello_kubers\u306b\u3042\u308a\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>.\/target\/debug\/hello_kubers\r\n2023-11-30T16:03:34.812853Z  INFO hello_kubers: Creating a Pod that outputs <span class=\"s2\">\"Hello, kube-rs!\"<\/span>\r\n2023-11-30T16:03:34.919201Z  INFO hello_kubers: Added test-kane8n\r\n2023-11-30T16:03:37.319434Z  INFO hello_kubers: Ready to attach to test-kane8n\r\n2023-11-30T16:03:46.967688Z  INFO hello_kubers: Status <span class=\"o\">{<\/span> code: None, details: None, message: None, metadata: ListMeta <span class=\"o\">{<\/span> continue_: None, remaining_item_count: None, resource_version: None, self_link: None <span class=\"o\">}<\/span>, reason: None, status: Some<span class=\"o\">(<\/span><span class=\"s2\">\"Success\"<\/span><span class=\"o\">)<\/span> <span class=\"o\">}<\/span>\r\n<span class=\"err\">$<\/span>\r\n<\/code><\/pre>\n<p>pod\u3092\u8d77\u52d5\u3059\u308b\u306e\u306b\u6210\u529f\u3057\u307e\u3057\u305f\uff01<br \/>\n\u3061\u306a\u307f\u306bkubernetes\u306b\u63a5\u7d9a\u3059\u308b\u305f\u3081\u306econfig\u3067\u3059\u304c\u3001Client::try_default()\u3092\u4f7f\u7528\u3059\u308b\u5834\u5408\u3001kube-rs\u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u306ekubeconfig\u30d5\u30a1\u30a4\u30eb\u306e\u5834\u6240\u3092\u63a2\u3057\u3001\u305d\u306e\u5834\u6240\u304b\u3089Config\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u751f\u6210\u3057\u3066\u4f7f\u7528\u3059\u308b\u307f\u305f\u3044\u3067\u3059\u3002<br \/>\nconfig\u3092\u6307\u5b9a\u3057\u305f\u3044\u5834\u5408\u306fClient::try_from_kubeconfig(kubeconfig_path)\u3092\u4f7f\u3048\u3070\u826f\u3044\u3067\u3059\u3002<\/p>\n<p>\u3057\u304b\u3057\u6a19\u6e96\u51fa\u529b\u3057\u3066\u3044\u308b\u306f\u305a\u306eHello, kube-rs!\u304c\u51fa\u529b\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\uff08combined_output\u3067\u51fa\u529b\u3055\u308c\u308b\u60f3\u5b9a\u3060\u3063\u305f\u306e\u3067\u3059\u304c\u30fb\u30fb\u30fb<br \/>\n\u3053\u3053\u306f\u4e00\u65e6\u6df1\u6398\u308a\u3059\u308b\u306e\u306f\u7f6e\u3044\u3066\u304a\u3044\u3066\u3001\u3082\u3046\u4e00\u5ea6examples\u3092\u773a\u3081\u3066\u307f\u308b\u3068log_stream.rs\u306b\u826f\u3055\u305d\u3046\u306a\u30b5\u30f3\u30d7\u30eb\u304c\u3042\u308b\u306e\u3067\u8a66\u3057\u3066\u307f\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nd\">info!<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Fetching logs for test-kane8n\"<\/span><span class=\"p\">);<\/span>\r\n<span class=\"k\">let<\/span> <span class=\"k\">mut<\/span> <span class=\"n\">logs<\/span> <span class=\"o\">=<\/span> <span class=\"n\">pods<\/span>\r\n    <span class=\"nf\">.log_stream<\/span><span class=\"p\">(<\/span>\r\n        <span class=\"s\">\"test-kane8n\"<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"o\">&amp;<\/span><span class=\"n\">LogParams<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"n\">follow<\/span><span class=\"p\">:<\/span> <span class=\"k\">true<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"n\">container<\/span><span class=\"p\">:<\/span> <span class=\"nb\">None<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"n\">tail_lines<\/span><span class=\"p\">:<\/span> <span class=\"nb\">None<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"n\">since_seconds<\/span><span class=\"p\">:<\/span> <span class=\"nb\">None<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"n\">timestamps<\/span><span class=\"p\">:<\/span> <span class=\"k\">false<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"o\">..<\/span><span class=\"nn\">LogParams<\/span><span class=\"p\">::<\/span><span class=\"nf\">default<\/span><span class=\"p\">()<\/span>\r\n        <span class=\"p\">},<\/span>\r\n    <span class=\"p\">)<\/span>\r\n    <span class=\"k\">.await<\/span><span class=\"o\">?<\/span>\r\n    <span class=\"nf\">.lines<\/span><span class=\"p\">();<\/span>\r\n\r\n<span class=\"k\">while<\/span> <span class=\"k\">let<\/span> <span class=\"nf\">Some<\/span><span class=\"p\">(<\/span><span class=\"n\">line<\/span><span class=\"p\">)<\/span> <span class=\"o\">=<\/span> <span class=\"n\">logs<\/span><span class=\"nf\">.try_next<\/span><span class=\"p\">()<\/span><span class=\"k\">.await<\/span><span class=\"o\">?<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nd\">println!<\/span><span class=\"p\">(<\/span><span class=\"s\">\"{}\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">line<\/span><span class=\"p\">);<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<p>doc.rs\u306b\u3088\u308b\u3068\u3001AsyncBufRead\u3067\u30ed\u30b0\u3092\u30b9\u30c8\u30ea\u30fc\u30e0\u3067\u304d\u308b\u3082\u306e\u306e\u3088\u3046\u3067\u3059\u3002<br \/>\n\u3053\u306e\u30b3\u30fc\u30c9\u3092\u5165\u308c\u3066\u8a66\u3057\u3066\u307f\u307e\u3059\u3002<br \/>\nfutures::{AsyncBufReadExt}\u3068kube::{api::{LogParams}}\u3092use\u3059\u308b\u306e\u3082\u5fd8\u308c\u305a\u306b<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>.\/target\/debug\/hello_kubers   \r\n2023-11-30T16:33:08.929252Z  INFO hello_kubers: Creating a Pod that outputs <span class=\"s2\">\"Hello, kube-rs!\"<\/span>\r\n2023-11-30T16:33:09.056016Z  INFO hello_kubers: Added test-kane8n\r\n2023-11-30T16:33:11.571052Z  INFO hello_kubers: Ready to attach to test-kane8n\r\n2023-11-30T16:33:21.116735Z  INFO hello_kubers: Status <span class=\"o\">{<\/span> code: None, details: None, message: None, metadata: ListMeta <span class=\"o\">{<\/span> continue_: None, remaining_item_count: None, resource_version: None, self_link: None <span class=\"o\">}<\/span>, reason: None, status: Some<span class=\"o\">(<\/span><span class=\"s2\">\"Success\"<\/span><span class=\"o\">)<\/span> <span class=\"o\">}<\/span>\r\n2023-11-30T16:33:21.116922Z  INFO hello_kubers: Fetching logs <span class=\"k\">for <\/span>test-kane8n\r\nHello, kube-rs!\r\n<span class=\"nv\">$ <\/span>\r\n<\/code><\/pre>\n<p>Hello, kube-rs\u304c\u53d6\u5f97\u3067\u304d\u307e\u3057\u305f\uff01<\/p>\n<p>Rust\u521d\u5fc3\u8005\u3067\u3059\u304c\u3001\u516c\u5f0f\u306e\u60c5\u5831\u3068kube-rs\u306e\u30b5\u30f3\u30d7\u30eb\u30b3\u30fc\u30c9\u304c\u5145\u5b9f\u3057\u3066\u3044\u305f\u306e\u3067\u305d\u3053\u307e\u3067\u30cf\u30de\u308b\u3053\u3068\u306a\u304f\u5b9f\u88c5\u3067\u304d\u305f\u304b\u306a\u3068\u3044\u3046\u6240\u611f\u3067\u3059\u3002<\/p>\n<p>\u6700\u5f8c\u306b\u4eca\u56de\u5b9f\u88c5\u3057\u305f\u30b3\u30fc\u30c9\u3092Github\u306b\u4e0a\u3052\u3066\u304a\u3044\u305f\u306e\u3067\u8f09\u305b\u3066\u304a\u304d\u307e\u3059\u3002<\/p>\n<ul class=\"post-ul\">https:\/\/github.com\/kane8n\/hello-kubers\/tree\/main<\/ul>\n<p>\u4ee5\u4e0a\u3001Rust\u3067kube-rs\u30cf\u30f3\u30ba\u30aa\u30f3\u3067\u3057\u305f\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u3053\u306e\u8a18\u4e8b\u306fZOZO AdventCalender 2023\u30b7\u30ea\u30fc\u30ba9\u306e4\u65e5\u76ee\u306e\u8a18\u4e8b\u3067\u3059\u3002 \u306f\u3058\u3081\u306b Rust\u521d [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-44881","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>- Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/44881-2\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:description\" content=\"\u3053\u306e\u8a18\u4e8b\u306fZOZO AdventCalender 2023\u30b7\u30ea\u30fc\u30ba9\u306e4\u65e5\u76ee\u306e\u8a18\u4e8b\u3067\u3059\u3002 \u306f\u3058\u3081\u306b Rust\u521d [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/44881-2\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-12-17T10:14:10+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-05-04T07:21:47+00:00\" \/>\n<meta name=\"author\" content=\"\u97f5, \u79d1\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u97f5, \u79d1\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/44881-2\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/44881-2\/\",\"name\":\"- Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-12-17T10:14:10+00:00\",\"dateModified\":\"2024-05-04T07:21:47+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/6530331a63adef3b3443a1fab53a0e6e\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/44881-2\/\"]}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/6530331a63adef3b3443a1fab53a0e6e\",\"name\":\"\u97f5, \u79d1\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/429ccb39b3fff5188bc17986222cfb0936cbadb8cc933cff04ab5ca01bd30a08?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/429ccb39b3fff5188bc17986222cfb0936cbadb8cc933cff04ab5ca01bd30a08?s=96&d=mm&r=g\",\"caption\":\"\u97f5, \u79d1\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/yunke\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/44881-2\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"- Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/44881-2\/","og_locale":"zh_CN","og_type":"article","og_description":"\u3053\u306e\u8a18\u4e8b\u306fZOZO AdventCalender 2023\u30b7\u30ea\u30fc\u30ba9\u306e4\u65e5\u76ee\u306e\u8a18\u4e8b\u3067\u3059\u3002 \u306f\u3058\u3081\u306b Rust\u521d [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/44881-2\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-12-17T10:14:10+00:00","article_modified_time":"2024-05-04T07:21:47+00:00","author":"\u97f5, \u79d1","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u97f5, \u79d1","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"3 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/44881-2\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/44881-2\/","name":"- Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-12-17T10:14:10+00:00","dateModified":"2024-05-04T07:21:47+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/6530331a63adef3b3443a1fab53a0e6e"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/44881-2\/"]}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/6530331a63adef3b3443a1fab53a0e6e","name":"\u97f5, \u79d1","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/429ccb39b3fff5188bc17986222cfb0936cbadb8cc933cff04ab5ca01bd30a08?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/429ccb39b3fff5188bc17986222cfb0936cbadb8cc933cff04ab5ca01bd30a08?s=96&d=mm&r=g","caption":"\u97f5, \u79d1"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/yunke\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/44881-2\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/44881","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=44881"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/44881\/revisions"}],"predecessor-version":[{"id":99113,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/44881\/revisions\/99113"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=44881"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=44881"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=44881"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}