diff --git a/404.html b/404.html index 62615da3..b18d7652 100644 --- a/404.html +++ b/404.html @@ -6,14 +6,14 @@ 404 | mx52jing - +
Skip to content

404

PAGE NOT FOUND

But if you don't change your direction, and if you keep looking, you may end up where you are heading.
- - + + \ No newline at end of file diff --git "a/algorithm/LeetCode\345\210\267\351\242\230/1-\344\270\244\346\225\260\344\271\213\345\222\214.html" "b/algorithm/LeetCode\345\210\267\351\242\230/1-\344\270\244\346\225\260\344\271\213\345\222\214.html" index afb0098a..75a622ab 100644 --- "a/algorithm/LeetCode\345\210\267\351\242\230/1-\344\270\244\346\225\260\344\271\213\345\222\214.html" +++ "b/algorithm/LeetCode\345\210\267\351\242\230/1-\344\270\244\346\225\260\344\271\213\345\222\214.html" @@ -6,9 +6,9 @@ 1-两数之和 | mx52jing - - - + + + @@ -64,8 +64,8 @@ } }; - - + + \ No newline at end of file diff --git "a/algorithm/LeetCode\345\210\267\351\242\230/1047-\345\210\240\351\231\244\345\255\227\347\254\246\344\270\262\344\270\255\347\232\204\346\211\200\346\234\211\347\233\270\351\202\273\351\207\215\345\244\215\351\241\271.html" "b/algorithm/LeetCode\345\210\267\351\242\230/1047-\345\210\240\351\231\244\345\255\227\347\254\246\344\270\262\344\270\255\347\232\204\346\211\200\346\234\211\347\233\270\351\202\273\351\207\215\345\244\215\351\241\271.html" index 3e51fe7d..738eab9c 100644 --- "a/algorithm/LeetCode\345\210\267\351\242\230/1047-\345\210\240\351\231\244\345\255\227\347\254\246\344\270\262\344\270\255\347\232\204\346\211\200\346\234\211\347\233\270\351\202\273\351\207\215\345\244\215\351\241\271.html" +++ "b/algorithm/LeetCode\345\210\267\351\242\230/1047-\345\210\240\351\231\244\345\255\227\347\254\246\344\270\262\344\270\255\347\232\204\346\211\200\346\234\211\347\233\270\351\202\273\351\207\215\345\244\215\351\241\271.html" @@ -6,9 +6,9 @@ 1047-删除字符串中的所有相邻重复项 | mx52jing - - - + + + @@ -65,8 +65,8 @@ return res.join('') }; - - + + \ No newline at end of file diff --git "a/algorithm/LeetCode\345\210\267\351\242\230/136-\345\217\252\345\207\272\347\216\260\344\270\200\346\254\241\347\232\204\346\225\260\345\255\227.html" "b/algorithm/LeetCode\345\210\267\351\242\230/136-\345\217\252\345\207\272\347\216\260\344\270\200\346\254\241\347\232\204\346\225\260\345\255\227.html" index c0a5e398..caf1ac15 100644 --- "a/algorithm/LeetCode\345\210\267\351\242\230/136-\345\217\252\345\207\272\347\216\260\344\270\200\346\254\241\347\232\204\346\225\260\345\255\227.html" +++ "b/algorithm/LeetCode\345\210\267\351\242\230/136-\345\217\252\345\207\272\347\216\260\344\270\200\346\254\241\347\232\204\346\225\260\345\255\227.html" @@ -6,9 +6,9 @@ 136-只出现一次的数字 | mx52jing - - - + + + @@ -71,8 +71,8 @@ return nums.reduce((prev, cur) => prev ^ cur, 0) }; - - + + \ No newline at end of file diff --git "a/algorithm/LeetCode\345\210\267\351\242\230/14-\346\234\200\351\225\277\345\205\254\345\205\261\345\211\215\347\274\200.html" "b/algorithm/LeetCode\345\210\267\351\242\230/14-\346\234\200\351\225\277\345\205\254\345\205\261\345\211\215\347\274\200.html" index 7b7e9e17..b1038108 100644 --- "a/algorithm/LeetCode\345\210\267\351\242\230/14-\346\234\200\351\225\277\345\205\254\345\205\261\345\211\215\347\274\200.html" +++ "b/algorithm/LeetCode\345\210\267\351\242\230/14-\346\234\200\351\225\277\345\205\254\345\205\261\345\211\215\347\274\200.html" @@ -6,9 +6,9 @@ 14-最长公共前缀 | mx52jing - - - + + + @@ -53,8 +53,8 @@ return commonStr }; - - + + \ No newline at end of file diff --git "a/algorithm/LeetCode\345\210\267\351\242\230/144-94-145-\351\201\215\345\216\206\344\272\214\345\217\211\346\240\221.html" "b/algorithm/LeetCode\345\210\267\351\242\230/144-94-145-\351\201\215\345\216\206\344\272\214\345\217\211\346\240\221.html" index c8f4390f..f7154d5b 100644 --- "a/algorithm/LeetCode\345\210\267\351\242\230/144-94-145-\351\201\215\345\216\206\344\272\214\345\217\211\346\240\221.html" +++ "b/algorithm/LeetCode\345\210\267\351\242\230/144-94-145-\351\201\215\345\216\206\344\272\214\345\217\211\346\240\221.html" @@ -6,9 +6,9 @@ 144-94-145-遍历二叉树 | mx52jing - - - + + + @@ -176,8 +176,8 @@ return res }; - - + + \ No newline at end of file diff --git "a/algorithm/LeetCode\345\210\267\351\242\230/15-\344\270\211\346\225\260\344\271\213\345\222\214.html" "b/algorithm/LeetCode\345\210\267\351\242\230/15-\344\270\211\346\225\260\344\271\213\345\222\214.html" index b50442d3..079098ab 100644 --- "a/algorithm/LeetCode\345\210\267\351\242\230/15-\344\270\211\346\225\260\344\271\213\345\222\214.html" +++ "b/algorithm/LeetCode\345\210\267\351\242\230/15-\344\270\211\346\225\260\344\271\213\345\222\214.html" @@ -6,9 +6,9 @@ 15-三数之和 | mx52jing - - - + + + @@ -88,8 +88,8 @@ return res }; - - + + \ No newline at end of file diff --git "a/algorithm/LeetCode\345\210\267\351\242\230/150-\351\200\206\346\263\242\345\205\260\350\241\250\350\276\276\345\274\217\346\261\202\345\200\274.html" "b/algorithm/LeetCode\345\210\267\351\242\230/150-\351\200\206\346\263\242\345\205\260\350\241\250\350\276\276\345\274\217\346\261\202\345\200\274.html" index 54d67ee1..f402de62 100644 --- "a/algorithm/LeetCode\345\210\267\351\242\230/150-\351\200\206\346\263\242\345\205\260\350\241\250\350\276\276\345\274\217\346\261\202\345\200\274.html" +++ "b/algorithm/LeetCode\345\210\267\351\242\230/150-\351\200\206\346\263\242\345\205\260\350\241\250\350\276\276\345\274\217\346\261\202\345\200\274.html" @@ -6,9 +6,9 @@ 150-逆波兰表达式求值 | mx52jing - - - + + + @@ -107,8 +107,8 @@ return stack.pop() }; - - + + \ No newline at end of file diff --git "a/algorithm/LeetCode\345\210\267\351\242\230/151-\345\217\215\350\275\254\345\255\227\347\254\246\344\270\262\344\270\255\347\232\204\345\215\225\350\257\215.html" "b/algorithm/LeetCode\345\210\267\351\242\230/151-\345\217\215\350\275\254\345\255\227\347\254\246\344\270\262\344\270\255\347\232\204\345\215\225\350\257\215.html" index 56837176..207e3c5f 100644 --- "a/algorithm/LeetCode\345\210\267\351\242\230/151-\345\217\215\350\275\254\345\255\227\347\254\246\344\270\262\344\270\255\347\232\204\345\215\225\350\257\215.html" +++ "b/algorithm/LeetCode\345\210\267\351\242\230/151-\345\217\215\350\275\254\345\255\227\347\254\246\344\270\262\344\270\255\347\232\204\345\215\225\350\257\215.html" @@ -6,9 +6,9 @@ 151-反转字符串中的单词 | mx52jing - - - + + + @@ -62,8 +62,8 @@ return reverseResult.join(' ').trim() }; - - + + \ No newline at end of file diff --git "a/algorithm/LeetCode\345\210\267\351\242\230/17-\347\224\265\350\257\235\345\217\267\347\240\201\347\232\204\345\255\227\346\257\215\347\273\204\345\220\210.html" "b/algorithm/LeetCode\345\210\267\351\242\230/17-\347\224\265\350\257\235\345\217\267\347\240\201\347\232\204\345\255\227\346\257\215\347\273\204\345\220\210.html" index 9d52161a..f63354e8 100644 --- "a/algorithm/LeetCode\345\210\267\351\242\230/17-\347\224\265\350\257\235\345\217\267\347\240\201\347\232\204\345\255\227\346\257\215\347\273\204\345\220\210.html" +++ "b/algorithm/LeetCode\345\210\267\351\242\230/17-\347\224\265\350\257\235\345\217\267\347\240\201\347\232\204\345\255\227\346\257\215\347\273\204\345\220\210.html" @@ -6,9 +6,9 @@ 17-电话号码的字母组合 | mx52jing - - - + + + @@ -99,8 +99,8 @@ return res; }; - - + + \ No newline at end of file diff --git "a/algorithm/LeetCode\345\210\267\351\242\230/18-\345\233\233\346\225\260\344\271\213\345\222\214.html" "b/algorithm/LeetCode\345\210\267\351\242\230/18-\345\233\233\346\225\260\344\271\213\345\222\214.html" index e5f0af2c..22b9c945 100644 --- "a/algorithm/LeetCode\345\210\267\351\242\230/18-\345\233\233\346\225\260\344\271\213\345\222\214.html" +++ "b/algorithm/LeetCode\345\210\267\351\242\230/18-\345\233\233\346\225\260\344\271\213\345\222\214.html" @@ -6,9 +6,9 @@ 18-四数之和 | mx52jing - - - + + + @@ -92,8 +92,8 @@ return res }; - - + + \ No newline at end of file diff --git "a/algorithm/LeetCode\345\210\267\351\242\230/19-\345\210\240\351\231\244\351\223\276\350\241\250\347\232\204\345\200\222\346\225\260\347\254\254N\344\270\252\347\273\223\347\202\271.html" "b/algorithm/LeetCode\345\210\267\351\242\230/19-\345\210\240\351\231\244\351\223\276\350\241\250\347\232\204\345\200\222\346\225\260\347\254\254N\344\270\252\347\273\223\347\202\271.html" index 4562a49c..54e4a6ee 100644 --- "a/algorithm/LeetCode\345\210\267\351\242\230/19-\345\210\240\351\231\244\351\223\276\350\241\250\347\232\204\345\200\222\346\225\260\347\254\254N\344\270\252\347\273\223\347\202\271.html" +++ "b/algorithm/LeetCode\345\210\267\351\242\230/19-\345\210\240\351\231\244\351\223\276\350\241\250\347\232\204\345\200\222\346\225\260\347\254\254N\344\270\252\347\273\223\347\202\271.html" @@ -6,9 +6,9 @@ 19-删除链表的倒数第N个结点 | mx52jing - - - + + + @@ -65,8 +65,8 @@ return dummyHead.next }; - - + + \ No newline at end of file diff --git "a/algorithm/LeetCode\345\210\267\351\242\230/20-\346\234\211\346\225\210\347\232\204\346\213\254\345\217\267.html" "b/algorithm/LeetCode\345\210\267\351\242\230/20-\346\234\211\346\225\210\347\232\204\346\213\254\345\217\267.html" index 69851d2a..a5367857 100644 --- "a/algorithm/LeetCode\345\210\267\351\242\230/20-\346\234\211\346\225\210\347\232\204\346\213\254\345\217\267.html" +++ "b/algorithm/LeetCode\345\210\267\351\242\230/20-\346\234\211\346\225\210\347\232\204\346\213\254\345\217\267.html" @@ -6,9 +6,9 @@ 20-有效的括号 | mx52jing - - - + + + @@ -92,8 +92,8 @@ return !stack.length; }; - - + + \ No newline at end of file diff --git "a/algorithm/LeetCode\345\210\267\351\242\230/202-\345\277\253\344\271\220\346\225\260.html" "b/algorithm/LeetCode\345\210\267\351\242\230/202-\345\277\253\344\271\220\346\225\260.html" index 283693a5..26d6f1bd 100644 --- "a/algorithm/LeetCode\345\210\267\351\242\230/202-\345\277\253\344\271\220\346\225\260.html" +++ "b/algorithm/LeetCode\345\210\267\351\242\230/202-\345\277\253\344\271\220\346\225\260.html" @@ -6,9 +6,9 @@ 202-快乐数 | mx52jing - - - + + + @@ -80,8 +80,8 @@ return fastNode === 1 }; - - + + \ No newline at end of file diff --git "a/algorithm/LeetCode\345\210\267\351\242\230/203-\347\247\273\351\231\244\351\223\276\350\241\250\345\205\203\347\264\240.html" "b/algorithm/LeetCode\345\210\267\351\242\230/203-\347\247\273\351\231\244\351\223\276\350\241\250\345\205\203\347\264\240.html" index 205501b9..c0e849eb 100644 --- "a/algorithm/LeetCode\345\210\267\351\242\230/203-\347\247\273\351\231\244\351\223\276\350\241\250\345\205\203\347\264\240.html" +++ "b/algorithm/LeetCode\345\210\267\351\242\230/203-\347\247\273\351\231\244\351\223\276\350\241\250\345\205\203\347\264\240.html" @@ -6,9 +6,9 @@ 203-移除链表元素 | mx52jing - - - + + + @@ -83,8 +83,8 @@ return dummyHead.next }; - - + + \ No newline at end of file diff --git "a/algorithm/LeetCode\345\210\267\351\242\230/206-\345\217\215\350\275\254\351\223\276\350\241\250.html" "b/algorithm/LeetCode\345\210\267\351\242\230/206-\345\217\215\350\275\254\351\223\276\350\241\250.html" index d82cd2b0..fa6bdbd6 100644 --- "a/algorithm/LeetCode\345\210\267\351\242\230/206-\345\217\215\350\275\254\351\223\276\350\241\250.html" +++ "b/algorithm/LeetCode\345\210\267\351\242\230/206-\345\217\215\350\275\254\351\223\276\350\241\250.html" @@ -6,9 +6,9 @@ 206-反转链表 | mx52jing - - - + + + @@ -68,8 +68,8 @@ return reverseLinklist(null, head) }; - - + + \ No newline at end of file diff --git "a/algorithm/LeetCode\345\210\267\351\242\230/209-\351\225\277\345\272\246\346\234\200\345\260\217\347\232\204\345\255\220\346\225\260\347\273\204.html" "b/algorithm/LeetCode\345\210\267\351\242\230/209-\351\225\277\345\272\246\346\234\200\345\260\217\347\232\204\345\255\220\346\225\260\347\273\204.html" index b8fb5bb1..09950ff4 100644 --- "a/algorithm/LeetCode\345\210\267\351\242\230/209-\351\225\277\345\272\246\346\234\200\345\260\217\347\232\204\345\255\220\346\225\260\347\273\204.html" +++ "b/algorithm/LeetCode\345\210\267\351\242\230/209-\351\225\277\345\272\246\346\234\200\345\260\217\347\232\204\345\255\220\346\225\260\347\273\204.html" @@ -6,9 +6,9 @@ 209-长度最小的子数组 | mx52jing - - - + + + @@ -78,8 +78,8 @@ return minLength === Infinity ? 0 : minLength }; - - + + \ No newline at end of file diff --git "a/algorithm/LeetCode\345\210\267\351\242\230/24-\344\270\244\344\270\244\344\272\244\346\215\242\351\223\276\350\241\250\344\270\255\347\232\204\350\212\202\347\202\271.html" "b/algorithm/LeetCode\345\210\267\351\242\230/24-\344\270\244\344\270\244\344\272\244\346\215\242\351\223\276\350\241\250\344\270\255\347\232\204\350\212\202\347\202\271.html" index 0d0f9721..20e602ec 100644 --- "a/algorithm/LeetCode\345\210\267\351\242\230/24-\344\270\244\344\270\244\344\272\244\346\215\242\351\223\276\350\241\250\344\270\255\347\232\204\350\212\202\347\202\271.html" +++ "b/algorithm/LeetCode\345\210\267\351\242\230/24-\344\270\244\344\270\244\344\272\244\346\215\242\351\223\276\350\241\250\344\270\255\347\232\204\350\212\202\347\202\271.html" @@ -6,9 +6,9 @@ 24-两两交换链表中的节点 | mx52jing - - - + + + @@ -87,8 +87,8 @@ return dummyHead.next }; - - + + \ No newline at end of file diff --git "a/algorithm/LeetCode\345\210\267\351\242\230/242-\346\234\211\346\225\210\347\232\204\345\255\227\346\257\215\345\274\202\344\275\215\350\257\215.html" "b/algorithm/LeetCode\345\210\267\351\242\230/242-\346\234\211\346\225\210\347\232\204\345\255\227\346\257\215\345\274\202\344\275\215\350\257\215.html" index 4c5b4d31..c2f2dfaa 100644 --- "a/algorithm/LeetCode\345\210\267\351\242\230/242-\346\234\211\346\225\210\347\232\204\345\255\227\346\257\215\345\274\202\344\275\215\350\257\215.html" +++ "b/algorithm/LeetCode\345\210\267\351\242\230/242-\346\234\211\346\225\210\347\232\204\345\255\227\346\257\215\345\274\202\344\275\215\350\257\215.html" @@ -6,9 +6,9 @@ 242-有效的字母异位词 | mx52jing - - - + + + @@ -108,8 +108,8 @@ return genStrCharCode(s) === genStrCharCode(t) }; - - + + \ No newline at end of file diff --git "a/algorithm/LeetCode\345\210\267\351\242\230/26-\345\210\240\351\231\244\346\234\211\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\351\207\215\345\244\215\351\241\271.html" "b/algorithm/LeetCode\345\210\267\351\242\230/26-\345\210\240\351\231\244\346\234\211\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\351\207\215\345\244\215\351\241\271.html" index 9caa127c..23bc64ce 100644 --- "a/algorithm/LeetCode\345\210\267\351\242\230/26-\345\210\240\351\231\244\346\234\211\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\351\207\215\345\244\215\351\241\271.html" +++ "b/algorithm/LeetCode\345\210\267\351\242\230/26-\345\210\240\351\231\244\346\234\211\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\351\207\215\345\244\215\351\241\271.html" @@ -6,9 +6,9 @@ 26-删除有序数组中的重复项 | mx52jing - - - + + + @@ -61,8 +61,8 @@ return nums.length }; - - + + \ No newline at end of file diff --git "a/algorithm/LeetCode\345\210\267\351\242\230/27-\347\247\273\351\231\244\345\205\203\347\264\240.html" "b/algorithm/LeetCode\345\210\267\351\242\230/27-\347\247\273\351\231\244\345\205\203\347\264\240.html" index 96cdf90c..ecf0c64f 100644 --- "a/algorithm/LeetCode\345\210\267\351\242\230/27-\347\247\273\351\231\244\345\205\203\347\264\240.html" +++ "b/algorithm/LeetCode\345\210\267\351\242\230/27-\347\247\273\351\231\244\345\205\203\347\264\240.html" @@ -6,9 +6,9 @@ 27-移除元素 | mx52jing - - - + + + @@ -82,8 +82,8 @@ return i }; - - + + \ No newline at end of file diff --git "a/algorithm/LeetCode\345\210\267\351\242\230/28-\346\211\276\345\207\272\345\255\227\347\254\246\344\270\262\344\270\255\347\254\254\344\270\200\344\270\252\345\214\271\351\205\215\351\241\271\347\232\204\344\270\213\346\240\207.html" "b/algorithm/LeetCode\345\210\267\351\242\230/28-\346\211\276\345\207\272\345\255\227\347\254\246\344\270\262\344\270\255\347\254\254\344\270\200\344\270\252\345\214\271\351\205\215\351\241\271\347\232\204\344\270\213\346\240\207.html" index 07a7c290..6d543302 100644 --- "a/algorithm/LeetCode\345\210\267\351\242\230/28-\346\211\276\345\207\272\345\255\227\347\254\246\344\270\262\344\270\255\347\254\254\344\270\200\344\270\252\345\214\271\351\205\215\351\241\271\347\232\204\344\270\213\346\240\207.html" +++ "b/algorithm/LeetCode\345\210\267\351\242\230/28-\346\211\276\345\207\272\345\255\227\347\254\246\344\270\262\344\270\255\347\254\254\344\270\200\344\270\252\345\214\271\351\205\215\351\241\271\347\232\204\344\270\213\346\240\207.html" @@ -6,9 +6,9 @@ 28-找出字符串中第一个匹配项的下标 | mx52jing - - - + + + @@ -62,8 +62,8 @@ return -1 }; - - + + \ No newline at end of file diff --git "a/algorithm/LeetCode\345\210\267\351\242\230/3-\346\227\240\351\207\215\345\244\215\345\255\227\347\254\246\347\232\204\346\234\200\351\225\277\345\255\220\344\270\262.html" "b/algorithm/LeetCode\345\210\267\351\242\230/3-\346\227\240\351\207\215\345\244\215\345\255\227\347\254\246\347\232\204\346\234\200\351\225\277\345\255\220\344\270\262.html" index 5dbc518e..6febdcff 100644 --- "a/algorithm/LeetCode\345\210\267\351\242\230/3-\346\227\240\351\207\215\345\244\215\345\255\227\347\254\246\347\232\204\346\234\200\351\225\277\345\255\220\344\270\262.html" +++ "b/algorithm/LeetCode\345\210\267\351\242\230/3-\346\227\240\351\207\215\345\244\215\345\255\227\347\254\246\347\232\204\346\234\200\351\225\277\345\255\220\344\270\262.html" @@ -6,9 +6,9 @@ 3-无重复字符的最长子串 | mx52jing - - - + + + @@ -96,8 +96,8 @@ return max }; - - + + \ No newline at end of file diff --git "a/algorithm/LeetCode\345\210\267\351\242\230/344-\345\217\215\350\275\254\345\255\227\347\254\246\344\270\262.html" "b/algorithm/LeetCode\345\210\267\351\242\230/344-\345\217\215\350\275\254\345\255\227\347\254\246\344\270\262.html" index a1d70ddc..dd4f3a16 100644 --- "a/algorithm/LeetCode\345\210\267\351\242\230/344-\345\217\215\350\275\254\345\255\227\347\254\246\344\270\262.html" +++ "b/algorithm/LeetCode\345\210\267\351\242\230/344-\345\217\215\350\275\254\345\255\227\347\254\246\344\270\262.html" @@ -6,9 +6,9 @@ 344-反转字符串 | mx52jing - - - + + + @@ -61,8 +61,8 @@ return s }; - - + + \ No newline at end of file diff --git "a/algorithm/LeetCode\345\210\267\351\242\230/349-\344\270\244\344\270\252\346\225\260\347\273\204\347\232\204\344\272\244\351\233\206.html" "b/algorithm/LeetCode\345\210\267\351\242\230/349-\344\270\244\344\270\252\346\225\260\347\273\204\347\232\204\344\272\244\351\233\206.html" index d143c226..be016444 100644 --- "a/algorithm/LeetCode\345\210\267\351\242\230/349-\344\270\244\344\270\252\346\225\260\347\273\204\347\232\204\344\272\244\351\233\206.html" +++ "b/algorithm/LeetCode\345\210\267\351\242\230/349-\344\270\244\344\270\252\346\225\260\347\273\204\347\232\204\344\272\244\351\233\206.html" @@ -6,9 +6,9 @@ 349-两个数组的交集 | mx52jing - - - + + + @@ -65,8 +65,8 @@ return res }; - - + + \ No newline at end of file diff --git "a/algorithm/LeetCode\345\210\267\351\242\230/35-\346\220\234\347\264\242\346\217\222\345\205\245\344\275\215\347\275\256.html" "b/algorithm/LeetCode\345\210\267\351\242\230/35-\346\220\234\347\264\242\346\217\222\345\205\245\344\275\215\347\275\256.html" index 5d94332c..87d639d0 100644 --- "a/algorithm/LeetCode\345\210\267\351\242\230/35-\346\220\234\347\264\242\346\217\222\345\205\245\344\275\215\347\275\256.html" +++ "b/algorithm/LeetCode\345\210\267\351\242\230/35-\346\220\234\347\264\242\346\217\222\345\205\245\344\275\215\347\275\256.html" @@ -6,9 +6,9 @@ 35-搜索插入位置 | mx52jing - - - + + + @@ -56,8 +56,8 @@ return left; }; - - + + \ No newline at end of file diff --git "a/algorithm/LeetCode\345\210\267\351\242\230/414-\347\254\254\344\270\211\345\244\247\347\232\204\346\225\260.html" "b/algorithm/LeetCode\345\210\267\351\242\230/414-\347\254\254\344\270\211\345\244\247\347\232\204\346\225\260.html" index ae11d2e8..a36c52b5 100644 --- "a/algorithm/LeetCode\345\210\267\351\242\230/414-\347\254\254\344\270\211\345\244\247\347\232\204\346\225\260.html" +++ "b/algorithm/LeetCode\345\210\267\351\242\230/414-\347\254\254\344\270\211\345\244\247\347\232\204\346\225\260.html" @@ -6,9 +6,9 @@ 414-第三大的数 | mx52jing - - - + + + @@ -77,8 +77,8 @@ return max3 === -Infinity ? max1 : max3 }; - - + + \ No newline at end of file diff --git "a/algorithm/LeetCode\345\210\267\351\242\230/454-\345\233\233\346\225\260\347\233\270\345\212\240II.html" "b/algorithm/LeetCode\345\210\267\351\242\230/454-\345\233\233\346\225\260\347\233\270\345\212\240II.html" index fa3aed73..519cb324 100644 --- "a/algorithm/LeetCode\345\210\267\351\242\230/454-\345\233\233\346\225\260\347\233\270\345\212\240II.html" +++ "b/algorithm/LeetCode\345\210\267\351\242\230/454-\345\233\233\346\225\260\347\233\270\345\212\240II.html" @@ -6,9 +6,9 @@ 454-四数相加II | mx52jing - - - + + + @@ -76,8 +76,8 @@ return count }; - - + + \ No newline at end of file diff --git "a/algorithm/LeetCode\345\210\267\351\242\230/485-\346\234\200\345\244\247\350\277\236\347\273\2551\347\232\204\344\270\252\346\225\260.html" "b/algorithm/LeetCode\345\210\267\351\242\230/485-\346\234\200\345\244\247\350\277\236\347\273\2551\347\232\204\344\270\252\346\225\260.html" index 9c42d747..0d8e8a9a 100644 --- "a/algorithm/LeetCode\345\210\267\351\242\230/485-\346\234\200\345\244\247\350\277\236\347\273\2551\347\232\204\344\270\252\346\225\260.html" +++ "b/algorithm/LeetCode\345\210\267\351\242\230/485-\346\234\200\345\244\247\350\277\236\347\273\2551\347\232\204\344\270\252\346\225\260.html" @@ -6,9 +6,9 @@ 485-最大连续 1 的个数 | mx52jing - - - + + + @@ -61,8 +61,8 @@ return Math.max(maxCount, currentNumCount) }; - - + + \ No newline at end of file diff --git "a/algorithm/LeetCode\345\210\267\351\242\230/520-\346\243\200\346\265\213\345\244\247\345\206\231\345\255\227\346\257\215.html" "b/algorithm/LeetCode\345\210\267\351\242\230/520-\346\243\200\346\265\213\345\244\247\345\206\231\345\255\227\346\257\215.html" index d518b046..cf3bcf73 100644 --- "a/algorithm/LeetCode\345\210\267\351\242\230/520-\346\243\200\346\265\213\345\244\247\345\206\231\345\255\227\346\257\215.html" +++ "b/algorithm/LeetCode\345\210\267\351\242\230/520-\346\243\200\346\265\213\345\244\247\345\206\231\345\255\227\346\257\215.html" @@ -6,9 +6,9 @@ 520-检测大写字母 | mx52jing - - - + + + @@ -70,8 +70,8 @@ return upperStrCount === len || (upperStrCount === 0 && upperSreIndex === -1) || (upperStrCount === 1 && upperSreIndex === 0) }; - - + + \ No newline at end of file diff --git "a/algorithm/LeetCode\345\210\267\351\242\230/541-\345\217\215\350\275\254\345\255\227\347\254\246\344\270\262II.html" "b/algorithm/LeetCode\345\210\267\351\242\230/541-\345\217\215\350\275\254\345\255\227\347\254\246\344\270\262II.html" index 4c917d13..3bfb7a32 100644 --- "a/algorithm/LeetCode\345\210\267\351\242\230/541-\345\217\215\350\275\254\345\255\227\347\254\246\344\270\262II.html" +++ "b/algorithm/LeetCode\345\210\267\351\242\230/541-\345\217\215\350\275\254\345\255\227\347\254\246\344\270\262II.html" @@ -6,9 +6,9 @@ 541-反转字符串II | mx52jing - - - + + + @@ -58,8 +58,8 @@ return s }; - - + + \ No newline at end of file diff --git "a/algorithm/LeetCode\345\210\267\351\242\230/58-\346\234\200\345\220\216\344\270\200\344\270\252\345\215\225\350\257\215\347\232\204\351\225\277\345\272\246.html" "b/algorithm/LeetCode\345\210\267\351\242\230/58-\346\234\200\345\220\216\344\270\200\344\270\252\345\215\225\350\257\215\347\232\204\351\225\277\345\272\246.html" index 89062489..8ddd3030 100644 --- "a/algorithm/LeetCode\345\210\267\351\242\230/58-\346\234\200\345\220\216\344\270\200\344\270\252\345\215\225\350\257\215\347\232\204\351\225\277\345\272\246.html" +++ "b/algorithm/LeetCode\345\210\267\351\242\230/58-\346\234\200\345\220\216\344\270\200\344\270\252\345\215\225\350\257\215\347\232\204\351\225\277\345\272\246.html" @@ -6,9 +6,9 @@ 58-最后一个单词的长度 | mx52jing - - - + + + @@ -60,8 +60,8 @@ } }; - - + + \ No newline at end of file diff --git "a/algorithm/LeetCode\345\210\267\351\242\230/628-\344\270\211\344\270\252\346\225\260\347\232\204\346\234\200\345\244\247\344\271\230\347\247\257.html" "b/algorithm/LeetCode\345\210\267\351\242\230/628-\344\270\211\344\270\252\346\225\260\347\232\204\346\234\200\345\244\247\344\271\230\347\247\257.html" index ee6c2359..7534486c 100644 --- "a/algorithm/LeetCode\345\210\267\351\242\230/628-\344\270\211\344\270\252\346\225\260\347\232\204\346\234\200\345\244\247\344\271\230\347\247\257.html" +++ "b/algorithm/LeetCode\345\210\267\351\242\230/628-\344\270\211\344\270\252\346\225\260\347\232\204\346\234\200\345\244\247\344\271\230\347\247\257.html" @@ -6,9 +6,9 @@ 628-三个数的最大乘积 | mx52jing - - - + + + @@ -75,8 +75,8 @@ ) }; - - + + \ No newline at end of file diff --git "a/algorithm/LeetCode\345\210\267\351\242\230/707-\350\256\276\350\256\241\351\223\276\350\241\250.html" "b/algorithm/LeetCode\345\210\267\351\242\230/707-\350\256\276\350\256\241\351\223\276\350\241\250.html" index bf6a6a16..9cf49f53 100644 --- "a/algorithm/LeetCode\345\210\267\351\242\230/707-\350\256\276\350\256\241\351\223\276\350\241\250.html" +++ "b/algorithm/LeetCode\345\210\267\351\242\230/707-\350\256\276\350\256\241\351\223\276\350\241\250.html" @@ -6,9 +6,9 @@ 707-设计链表 | mx52jing - - - + + + @@ -166,8 +166,8 @@ * obj.deleteAtIndex(index) */ - - + + \ No newline at end of file diff --git "a/algorithm/LeetCode\345\210\267\351\242\230/9-\345\233\236\346\226\207\346\225\260.html" "b/algorithm/LeetCode\345\210\267\351\242\230/9-\345\233\236\346\226\207\346\225\260.html" index 03e873ae..74a94905 100644 --- "a/algorithm/LeetCode\345\210\267\351\242\230/9-\345\233\236\346\226\207\346\225\260.html" +++ "b/algorithm/LeetCode\345\210\267\351\242\230/9-\345\233\236\346\226\207\346\225\260.html" @@ -6,9 +6,9 @@ 9-回文数 | mx52jing - - - + + + @@ -65,8 +65,8 @@ return x === revertedNumber || x === Math.floor(revertedNumber / 10) }; - - + + \ No newline at end of file diff --git "a/algorithm/LeetCode\345\210\267\351\242\230/977-\346\234\211\345\272\217\346\225\260\347\273\204\347\232\204\345\271\263\346\226\271.html" "b/algorithm/LeetCode\345\210\267\351\242\230/977-\346\234\211\345\272\217\346\225\260\347\273\204\347\232\204\345\271\263\346\226\271.html" index 5a37a4d7..a1aa8fb4 100644 --- "a/algorithm/LeetCode\345\210\267\351\242\230/977-\346\234\211\345\272\217\346\225\260\347\273\204\347\232\204\345\271\263\346\226\271.html" +++ "b/algorithm/LeetCode\345\210\267\351\242\230/977-\346\234\211\345\272\217\346\225\260\347\273\204\347\232\204\345\271\263\346\226\271.html" @@ -6,9 +6,9 @@ 977-有序数组的平方 | mx52jing - - - + + + @@ -65,8 +65,8 @@ return result }; - - + + \ No newline at end of file diff --git "a/algorithm/LeetCode\345\210\267\351\242\230/LCR-018-\351\252\214\350\257\201\345\233\236\346\226\207\344\270\262.html" "b/algorithm/LeetCode\345\210\267\351\242\230/LCR-018-\351\252\214\350\257\201\345\233\236\346\226\207\344\270\262.html" index f4fe1554..0d30639a 100644 --- "a/algorithm/LeetCode\345\210\267\351\242\230/LCR-018-\351\252\214\350\257\201\345\233\236\346\226\207\344\270\262.html" +++ "b/algorithm/LeetCode\345\210\267\351\242\230/LCR-018-\351\252\214\350\257\201\345\233\236\346\226\207\344\270\262.html" @@ -6,9 +6,9 @@ LCR-018-验证回文串 | mx52jing - - - + + + @@ -48,8 +48,8 @@ return true }; - - + + \ No newline at end of file diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_1-\344\270\244\346\225\260\344\271\213\345\222\214.md.1075836c.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_1-\344\270\244\346\225\260\344\271\213\345\222\214.md.22843d62.js" similarity index 99% rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_1-\344\270\244\346\225\260\344\271\213\345\222\214.md.1075836c.js" rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_1-\344\270\244\346\225\260\344\271\213\345\222\214.md.22843d62.js" index c1898f69..251faa2f 100644 --- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_1-\344\270\244\346\225\260\344\271\213\345\222\214.md.1075836c.js" +++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_1-\344\270\244\346\225\260\344\271\213\345\222\214.md.22843d62.js" @@ -1,4 +1,4 @@ -import{_ as o,c as p,a as s,b as n,d as l,e as t,o as e,r as c}from"./app.7354b8c5.js";const g=JSON.parse('{"title":"1-两数之和","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/1-两数之和.md"}'),r={name:"algorithm/LeetCode刷题/1-两数之和.md"},y=s("h1",{id:"_1-两数之和",tabindex:"-1"},[n("1-两数之和 "),s("a",{class:"header-anchor",href:"#_1-两数之和","aria-hidden":"true"},"#")],-1),F=t(`

题目信息

题目地址两数之和

题目内容:

javascript
给定一个整数数组nums和一个整数目标值target
+import{_ as o,c as p,a as s,b as n,d as l,e as t,o as e,r as c}from"./app.4a806fb4.js";const g=JSON.parse('{"title":"1-两数之和","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/1-两数之和.md"}'),r={name:"algorithm/LeetCode刷题/1-两数之和.md"},y=s("h1",{id:"_1-两数之和",tabindex:"-1"},[n("1-两数之和 "),s("a",{class:"header-anchor",href:"#_1-两数之和","aria-hidden":"true"},"#")],-1),F=t(`

题目信息

题目地址两数之和

题目内容:

javascript
给定一个整数数组nums和一个整数目标值target
 
 请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。
 
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_1-\344\270\244\346\225\260\344\271\213\345\222\214.md.1075836c.lean.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_1-\344\270\244\346\225\260\344\271\213\345\222\214.md.22843d62.lean.js"
similarity index 93%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_1-\344\270\244\346\225\260\344\271\213\345\222\214.md.1075836c.lean.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_1-\344\270\244\346\225\260\344\271\213\345\222\214.md.22843d62.lean.js"
index 46c74b0f..250e3a70 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_1-\344\270\244\346\225\260\344\271\213\345\222\214.md.1075836c.lean.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_1-\344\270\244\346\225\260\344\271\213\345\222\214.md.22843d62.lean.js"
@@ -1 +1 @@
-import{_ as o,c as p,a as s,b as n,d as l,e as t,o as e,r as c}from"./app.7354b8c5.js";const g=JSON.parse('{"title":"1-两数之和","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/1-两数之和.md"}'),r={name:"algorithm/LeetCode刷题/1-两数之和.md"},y=s("h1",{id:"_1-两数之和",tabindex:"-1"},[n("1-两数之和 "),s("a",{class:"header-anchor",href:"#_1-两数之和","aria-hidden":"true"},"#")],-1),F=t("",15);function D(i,C,A,d,f,u){const a=c("Badge");return e(),p("div",null,[y,s("p",null,[n("标签:"),l(a,{type:"tip",text:"数组"}),n(),l(a,{type:"tip",text:"哈希表"})]),F])}const m=o(r,[["render",D]]);export{g as __pageData,m as default};
+import{_ as o,c as p,a as s,b as n,d as l,e as t,o as e,r as c}from"./app.4a806fb4.js";const g=JSON.parse('{"title":"1-两数之和","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/1-两数之和.md"}'),r={name:"algorithm/LeetCode刷题/1-两数之和.md"},y=s("h1",{id:"_1-两数之和",tabindex:"-1"},[n("1-两数之和 "),s("a",{class:"header-anchor",href:"#_1-两数之和","aria-hidden":"true"},"#")],-1),F=t("",15);function D(i,C,A,d,f,u){const a=c("Badge");return e(),p("div",null,[y,s("p",null,[n("标签:"),l(a,{type:"tip",text:"数组"}),n(),l(a,{type:"tip",text:"哈希表"})]),F])}const m=o(r,[["render",D]]);export{g as __pageData,m as default};
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_1047-\345\210\240\351\231\244\345\255\227\347\254\246\344\270\262\344\270\255\347\232\204\346\211\200\346\234\211\347\233\270\351\202\273\351\207\215\345\244\215\351\241\271.md.0e7bf723.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_1047-\345\210\240\351\231\244\345\255\227\347\254\246\344\270\262\344\270\255\347\232\204\346\211\200\346\234\211\347\233\270\351\202\273\351\207\215\345\244\215\351\241\271.md.de6f20ac.js"
similarity index 99%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_1047-\345\210\240\351\231\244\345\255\227\347\254\246\344\270\262\344\270\255\347\232\204\346\211\200\346\234\211\347\233\270\351\202\273\351\207\215\345\244\215\351\241\271.md.0e7bf723.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_1047-\345\210\240\351\231\244\345\255\227\347\254\246\344\270\262\344\270\255\347\232\204\346\211\200\346\234\211\347\233\270\351\202\273\351\207\215\345\244\215\351\241\271.md.de6f20ac.js"
index 05f45d60..26c6def1 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_1047-\345\210\240\351\231\244\345\255\227\347\254\246\344\270\262\344\270\255\347\232\204\346\211\200\346\234\211\347\233\270\351\202\273\351\207\215\345\244\215\351\241\271.md.0e7bf723.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_1047-\345\210\240\351\231\244\345\255\227\347\254\246\344\270\262\344\270\255\347\232\204\346\211\200\346\234\211\347\233\270\351\202\273\351\207\215\345\244\215\351\241\271.md.de6f20ac.js"
@@ -1,4 +1,4 @@
-import{_ as p,c as o,a as s,b as n,d as l,e,o as t,r as c}from"./app.7354b8c5.js";const _=JSON.parse('{"title":"1047-删除字符串中的所有相邻重复项","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/1047-删除字符串中的所有相邻重复项.md"}'),r={name:"algorithm/LeetCode刷题/1047-删除字符串中的所有相邻重复项.md"},y=s("h1",{id:"_1047-删除字符串中的所有相邻重复项",tabindex:"-1"},[n("1047-删除字符串中的所有相邻重复项 "),s("a",{class:"header-anchor",href:"#_1047-删除字符串中的所有相邻重复项","aria-hidden":"true"},"#")],-1),F=e(`

题目信息

题目地址1047. 删除字符串中的所有相邻重复项

题目内容:

javascript
给出由小写字母组成的字符串S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。
+import{_ as p,c as o,a as s,b as n,d as l,e,o as t,r as c}from"./app.4a806fb4.js";const _=JSON.parse('{"title":"1047-删除字符串中的所有相邻重复项","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/1047-删除字符串中的所有相邻重复项.md"}'),r={name:"algorithm/LeetCode刷题/1047-删除字符串中的所有相邻重复项.md"},y=s("h1",{id:"_1047-删除字符串中的所有相邻重复项",tabindex:"-1"},[n("1047-删除字符串中的所有相邻重复项 "),s("a",{class:"header-anchor",href:"#_1047-删除字符串中的所有相邻重复项","aria-hidden":"true"},"#")],-1),F=e(`

题目信息

题目地址1047. 删除字符串中的所有相邻重复项

题目内容:

javascript
给出由小写字母组成的字符串S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。
 在S上反复执行重复项删除操作,直到无法继续删除。
 
 在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_1047-\345\210\240\351\231\244\345\255\227\347\254\246\344\270\262\344\270\255\347\232\204\346\211\200\346\234\211\347\233\270\351\202\273\351\207\215\345\244\215\351\241\271.md.0e7bf723.lean.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_1047-\345\210\240\351\231\244\345\255\227\347\254\246\344\270\262\344\270\255\347\232\204\346\211\200\346\234\211\347\233\270\351\202\273\351\207\215\345\244\215\351\241\271.md.de6f20ac.lean.js"
similarity index 94%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_1047-\345\210\240\351\231\244\345\255\227\347\254\246\344\270\262\344\270\255\347\232\204\346\211\200\346\234\211\347\233\270\351\202\273\351\207\215\345\244\215\351\241\271.md.0e7bf723.lean.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_1047-\345\210\240\351\231\244\345\255\227\347\254\246\344\270\262\344\270\255\347\232\204\346\211\200\346\234\211\347\233\270\351\202\273\351\207\215\345\244\215\351\241\271.md.de6f20ac.lean.js"
index 550fff64..cc295caf 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_1047-\345\210\240\351\231\244\345\255\227\347\254\246\344\270\262\344\270\255\347\232\204\346\211\200\346\234\211\347\233\270\351\202\273\351\207\215\345\244\215\351\241\271.md.0e7bf723.lean.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_1047-\345\210\240\351\231\244\345\255\227\347\254\246\344\270\262\344\270\255\347\232\204\346\211\200\346\234\211\347\233\270\351\202\273\351\207\215\345\244\215\351\241\271.md.de6f20ac.lean.js"
@@ -1 +1 @@
-import{_ as p,c as o,a as s,b as n,d as l,e,o as t,r as c}from"./app.7354b8c5.js";const _=JSON.parse('{"title":"1047-删除字符串中的所有相邻重复项","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/1047-删除字符串中的所有相邻重复项.md"}'),r={name:"algorithm/LeetCode刷题/1047-删除字符串中的所有相邻重复项.md"},y=s("h1",{id:"_1047-删除字符串中的所有相邻重复项",tabindex:"-1"},[n("1047-删除字符串中的所有相邻重复项 "),s("a",{class:"header-anchor",href:"#_1047-删除字符串中的所有相邻重复项","aria-hidden":"true"},"#")],-1),F=e("",15);function D(i,C,A,d,f,u){const a=c("Badge");return t(),o("div",null,[y,s("p",null,[n("标签:"),l(a,{type:"tip",text:"栈"}),n(),l(a,{type:"tip",text:"字符串"})]),F])}const g=p(r,[["render",D]]);export{_ as __pageData,g as default};
+import{_ as p,c as o,a as s,b as n,d as l,e,o as t,r as c}from"./app.4a806fb4.js";const _=JSON.parse('{"title":"1047-删除字符串中的所有相邻重复项","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/1047-删除字符串中的所有相邻重复项.md"}'),r={name:"algorithm/LeetCode刷题/1047-删除字符串中的所有相邻重复项.md"},y=s("h1",{id:"_1047-删除字符串中的所有相邻重复项",tabindex:"-1"},[n("1047-删除字符串中的所有相邻重复项 "),s("a",{class:"header-anchor",href:"#_1047-删除字符串中的所有相邻重复项","aria-hidden":"true"},"#")],-1),F=e("",15);function D(i,C,A,d,f,u){const a=c("Badge");return t(),o("div",null,[y,s("p",null,[n("标签:"),l(a,{type:"tip",text:"栈"}),n(),l(a,{type:"tip",text:"字符串"})]),F])}const g=p(r,[["render",D]]);export{_ as __pageData,g as default};
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_136-\345\217\252\345\207\272\347\216\260\344\270\200\346\254\241\347\232\204\346\225\260\345\255\227.md.3eab0a7d.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_136-\345\217\252\345\207\272\347\216\260\344\270\200\346\254\241\347\232\204\346\225\260\345\255\227.md.e62490a4.js"
similarity index 99%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_136-\345\217\252\345\207\272\347\216\260\344\270\200\346\254\241\347\232\204\346\225\260\345\255\227.md.3eab0a7d.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_136-\345\217\252\345\207\272\347\216\260\344\270\200\346\254\241\347\232\204\346\225\260\345\255\227.md.e62490a4.js"
index 4f968ccd..09817431 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_136-\345\217\252\345\207\272\347\216\260\344\270\200\346\254\241\347\232\204\346\225\260\345\255\227.md.3eab0a7d.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_136-\345\217\252\345\207\272\347\216\260\344\270\200\346\254\241\347\232\204\346\225\260\345\255\227.md.e62490a4.js"
@@ -1,4 +1,4 @@
-import{_ as p,c as o,a as s,b as n,d as l,e as t,o as e,r as c}from"./app.7354b8c5.js";const m=JSON.parse('{"title":"136-只出现一次的数字","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/136-只出现一次的数字.md"}'),r={name:"algorithm/LeetCode刷题/136-只出现一次的数字.md"},y=s("h1",{id:"_136-只出现一次的数字",tabindex:"-1"},[n("136-只出现一次的数字 "),s("a",{class:"header-anchor",href:"#_136-只出现一次的数字","aria-hidden":"true"},"#")],-1),F=t(`

题目信息

题目地址只出现一次的数字

题目内容:

javascript
给你一个非空整数数组nums,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
+import{_ as p,c as o,a as s,b as n,d as l,e as t,o as e,r as c}from"./app.4a806fb4.js";const m=JSON.parse('{"title":"136-只出现一次的数字","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/136-只出现一次的数字.md"}'),r={name:"algorithm/LeetCode刷题/136-只出现一次的数字.md"},y=s("h1",{id:"_136-只出现一次的数字",tabindex:"-1"},[n("136-只出现一次的数字 "),s("a",{class:"header-anchor",href:"#_136-只出现一次的数字","aria-hidden":"true"},"#")],-1),F=t(`

题目信息

题目地址只出现一次的数字

题目内容:

javascript
给你一个非空整数数组nums,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
 
 你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。
  
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_136-\345\217\252\345\207\272\347\216\260\344\270\200\346\254\241\347\232\204\346\225\260\345\255\227.md.3eab0a7d.lean.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_136-\345\217\252\345\207\272\347\216\260\344\270\200\346\254\241\347\232\204\346\225\260\345\255\227.md.e62490a4.lean.js"
similarity index 94%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_136-\345\217\252\345\207\272\347\216\260\344\270\200\346\254\241\347\232\204\346\225\260\345\255\227.md.3eab0a7d.lean.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_136-\345\217\252\345\207\272\347\216\260\344\270\200\346\254\241\347\232\204\346\225\260\345\255\227.md.e62490a4.lean.js"
index 8fdfd5b4..5df6c722 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_136-\345\217\252\345\207\272\347\216\260\344\270\200\346\254\241\347\232\204\346\225\260\345\255\227.md.3eab0a7d.lean.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_136-\345\217\252\345\207\272\347\216\260\344\270\200\346\254\241\347\232\204\346\225\260\345\255\227.md.e62490a4.lean.js"
@@ -1 +1 @@
-import{_ as p,c as o,a as s,b as n,d as l,e as t,o as e,r as c}from"./app.7354b8c5.js";const m=JSON.parse('{"title":"136-只出现一次的数字","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/136-只出现一次的数字.md"}'),r={name:"algorithm/LeetCode刷题/136-只出现一次的数字.md"},y=s("h1",{id:"_136-只出现一次的数字",tabindex:"-1"},[n("136-只出现一次的数字 "),s("a",{class:"header-anchor",href:"#_136-只出现一次的数字","aria-hidden":"true"},"#")],-1),F=t("",18);function i(D,C,A,d,f,u){const a=c("Badge");return e(),o("div",null,[y,s("p",null,[n("标签:"),l(a,{type:"tip",text:"位运算"}),n(),l(a,{type:"tip",text:"数组"})]),F])}const g=p(r,[["render",i]]);export{m as __pageData,g as default};
+import{_ as p,c as o,a as s,b as n,d as l,e as t,o as e,r as c}from"./app.4a806fb4.js";const m=JSON.parse('{"title":"136-只出现一次的数字","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/136-只出现一次的数字.md"}'),r={name:"algorithm/LeetCode刷题/136-只出现一次的数字.md"},y=s("h1",{id:"_136-只出现一次的数字",tabindex:"-1"},[n("136-只出现一次的数字 "),s("a",{class:"header-anchor",href:"#_136-只出现一次的数字","aria-hidden":"true"},"#")],-1),F=t("",18);function i(D,C,A,d,f,u){const a=c("Badge");return e(),o("div",null,[y,s("p",null,[n("标签:"),l(a,{type:"tip",text:"位运算"}),n(),l(a,{type:"tip",text:"数组"})]),F])}const g=p(r,[["render",i]]);export{m as __pageData,g as default};
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_14-\346\234\200\351\225\277\345\205\254\345\205\261\345\211\215\347\274\200.md.1607ff4f.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_14-\346\234\200\351\225\277\345\205\254\345\205\261\345\211\215\347\274\200.md.debf1a99.js"
similarity index 99%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_14-\346\234\200\351\225\277\345\205\254\345\205\261\345\211\215\347\274\200.md.1607ff4f.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_14-\346\234\200\351\225\277\345\205\254\345\205\261\345\211\215\347\274\200.md.debf1a99.js"
index c49dcda6..de382b09 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_14-\346\234\200\351\225\277\345\205\254\345\205\261\345\211\215\347\274\200.md.1607ff4f.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_14-\346\234\200\351\225\277\345\205\254\345\205\261\345\211\215\347\274\200.md.debf1a99.js"
@@ -1,4 +1,4 @@
-import{_ as o,c as p,a as s,b as n,d as l,e as t,o as e,r as c}from"./app.7354b8c5.js";const _=JSON.parse('{"title":"14-最长公共前缀","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/14-最长公共前缀.md"}'),r={name:"algorithm/LeetCode刷题/14-最长公共前缀.md"},y=s("h1",{id:"_14-最长公共前缀",tabindex:"-1"},[n("14-最长公共前缀 "),s("a",{class:"header-anchor",href:"#_14-最长公共前缀","aria-hidden":"true"},"#")],-1),F=t(`

题目信息

题目地址最长公共前缀

题目内容:

javascript
编写一个函数来查找字符串数组中的最长公共前缀。
+import{_ as o,c as p,a as s,b as n,d as l,e as t,o as e,r as c}from"./app.4a806fb4.js";const _=JSON.parse('{"title":"14-最长公共前缀","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/14-最长公共前缀.md"}'),r={name:"algorithm/LeetCode刷题/14-最长公共前缀.md"},y=s("h1",{id:"_14-最长公共前缀",tabindex:"-1"},[n("14-最长公共前缀 "),s("a",{class:"header-anchor",href:"#_14-最长公共前缀","aria-hidden":"true"},"#")],-1),F=t(`

题目信息

题目地址最长公共前缀

题目内容:

javascript
编写一个函数来查找字符串数组中的最长公共前缀。
 
 如果不存在公共前缀,返回空字符串 ""
 
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_14-\346\234\200\351\225\277\345\205\254\345\205\261\345\211\215\347\274\200.md.1607ff4f.lean.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_14-\346\234\200\351\225\277\345\205\254\345\205\261\345\211\215\347\274\200.md.debf1a99.lean.js"
similarity index 93%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_14-\346\234\200\351\225\277\345\205\254\345\205\261\345\211\215\347\274\200.md.1607ff4f.lean.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_14-\346\234\200\351\225\277\345\205\254\345\205\261\345\211\215\347\274\200.md.debf1a99.lean.js"
index 518ecaec..502ef869 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_14-\346\234\200\351\225\277\345\205\254\345\205\261\345\211\215\347\274\200.md.1607ff4f.lean.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_14-\346\234\200\351\225\277\345\205\254\345\205\261\345\211\215\347\274\200.md.debf1a99.lean.js"
@@ -1 +1 @@
-import{_ as o,c as p,a as s,b as n,d as l,e as t,o as e,r as c}from"./app.7354b8c5.js";const _=JSON.parse('{"title":"14-最长公共前缀","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/14-最长公共前缀.md"}'),r={name:"algorithm/LeetCode刷题/14-最长公共前缀.md"},y=s("h1",{id:"_14-最长公共前缀",tabindex:"-1"},[n("14-最长公共前缀 "),s("a",{class:"header-anchor",href:"#_14-最长公共前缀","aria-hidden":"true"},"#")],-1),F=t("",10);function D(i,C,A,d,f,h){const a=c("Badge");return e(),p("div",null,[y,s("p",null,[n("标签:"),l(a,{type:"tip",text:"字典树"}),n(),l(a,{type:"tip",text:"字符串"})]),F])}const m=o(r,[["render",D]]);export{_ as __pageData,m as default};
+import{_ as o,c as p,a as s,b as n,d as l,e as t,o as e,r as c}from"./app.4a806fb4.js";const _=JSON.parse('{"title":"14-最长公共前缀","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/14-最长公共前缀.md"}'),r={name:"algorithm/LeetCode刷题/14-最长公共前缀.md"},y=s("h1",{id:"_14-最长公共前缀",tabindex:"-1"},[n("14-最长公共前缀 "),s("a",{class:"header-anchor",href:"#_14-最长公共前缀","aria-hidden":"true"},"#")],-1),F=t("",10);function D(i,C,A,d,f,h){const a=c("Badge");return e(),p("div",null,[y,s("p",null,[n("标签:"),l(a,{type:"tip",text:"字典树"}),n(),l(a,{type:"tip",text:"字符串"})]),F])}const m=o(r,[["render",D]]);export{_ as __pageData,m as default};
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_144-94-145-\351\201\215\345\216\206\344\272\214\345\217\211\346\240\221.md.e507babe.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_144-94-145-\351\201\215\345\216\206\344\272\214\345\217\211\346\240\221.md.3c849491.js"
similarity index 99%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_144-94-145-\351\201\215\345\216\206\344\272\214\345\217\211\346\240\221.md.e507babe.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_144-94-145-\351\201\215\345\216\206\344\272\214\345\217\211\346\240\221.md.3c849491.js"
index d885d5b2..b696b3c7 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_144-94-145-\351\201\215\345\216\206\344\272\214\345\217\211\346\240\221.md.e507babe.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_144-94-145-\351\201\215\345\216\206\344\272\214\345\217\211\346\240\221.md.3c849491.js"
@@ -1,4 +1,4 @@
-import{_ as p,c as o,a as l,b as s,d as a,e,o as t,r as c}from"./app.7354b8c5.js";const g=JSON.parse('{"title":"144-94-145-遍历二叉树","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[{"level":3,"title":"144. 二叉树的前序遍历","slug":"_144-二叉树的前序遍历","link":"#_144-二叉树的前序遍历","children":[]},{"level":3,"title":"94. 二叉树的中序遍历","slug":"_94-二叉树的中序遍历","link":"#_94-二叉树的中序遍历","children":[]},{"level":3,"title":"145. 二叉树的后序遍历","slug":"_145-二叉树的后序遍历","link":"#_145-二叉树的后序遍历","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/144-94-145-遍历二叉树.md"}'),r={name:"algorithm/LeetCode刷题/144-94-145-遍历二叉树.md"},y=l("h1",{id:"_144-94-145-遍历二叉树",tabindex:"-1"},[s("144-94-145-遍历二叉树 "),l("a",{class:"header-anchor",href:"#_144-94-145-遍历二叉树","aria-hidden":"true"},"#")],-1),i=e(`

题目信息

144. 二叉树的前序遍历

题目地址144. 二叉树的前序遍历

题目内容:

javascript
给你二叉树的根节点root,返回它节点值的前序遍历。
+import{_ as p,c as o,a as l,b as s,d as a,e,o as t,r as c}from"./app.4a806fb4.js";const g=JSON.parse('{"title":"144-94-145-遍历二叉树","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[{"level":3,"title":"144. 二叉树的前序遍历","slug":"_144-二叉树的前序遍历","link":"#_144-二叉树的前序遍历","children":[]},{"level":3,"title":"94. 二叉树的中序遍历","slug":"_94-二叉树的中序遍历","link":"#_94-二叉树的中序遍历","children":[]},{"level":3,"title":"145. 二叉树的后序遍历","slug":"_145-二叉树的后序遍历","link":"#_145-二叉树的后序遍历","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/144-94-145-遍历二叉树.md"}'),r={name:"algorithm/LeetCode刷题/144-94-145-遍历二叉树.md"},y=l("h1",{id:"_144-94-145-遍历二叉树",tabindex:"-1"},[s("144-94-145-遍历二叉树 "),l("a",{class:"header-anchor",href:"#_144-94-145-遍历二叉树","aria-hidden":"true"},"#")],-1),i=e(`

题目信息

144. 二叉树的前序遍历

题目地址144. 二叉树的前序遍历

题目内容:

javascript
给你二叉树的根节点root,返回它节点值的前序遍历。
 
 示例1:
     输入:root = [1,null,2,3]
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_144-94-145-\351\201\215\345\216\206\344\272\214\345\217\211\346\240\221.md.e507babe.lean.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_144-94-145-\351\201\215\345\216\206\344\272\214\345\217\211\346\240\221.md.3c849491.lean.js"
similarity index 95%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_144-94-145-\351\201\215\345\216\206\344\272\214\345\217\211\346\240\221.md.e507babe.lean.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_144-94-145-\351\201\215\345\216\206\344\272\214\345\217\211\346\240\221.md.3c849491.lean.js"
index 1544288f..dcd3b668 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_144-94-145-\351\201\215\345\216\206\344\272\214\345\217\211\346\240\221.md.e507babe.lean.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_144-94-145-\351\201\215\345\216\206\344\272\214\345\217\211\346\240\221.md.3c849491.lean.js"
@@ -1 +1 @@
-import{_ as p,c as o,a as l,b as s,d as a,e,o as t,r as c}from"./app.7354b8c5.js";const g=JSON.parse('{"title":"144-94-145-遍历二叉树","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[{"level":3,"title":"144. 二叉树的前序遍历","slug":"_144-二叉树的前序遍历","link":"#_144-二叉树的前序遍历","children":[]},{"level":3,"title":"94. 二叉树的中序遍历","slug":"_94-二叉树的中序遍历","link":"#_94-二叉树的中序遍历","children":[]},{"level":3,"title":"145. 二叉树的后序遍历","slug":"_145-二叉树的后序遍历","link":"#_145-二叉树的后序遍历","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/144-94-145-遍历二叉树.md"}'),r={name:"algorithm/LeetCode刷题/144-94-145-遍历二叉树.md"},y=l("h1",{id:"_144-94-145-遍历二叉树",tabindex:"-1"},[s("144-94-145-遍历二叉树 "),l("a",{class:"header-anchor",href:"#_144-94-145-遍历二叉树","aria-hidden":"true"},"#")],-1),i=e("",35);function F(D,C,A,d,f,h){const n=c("Badge");return t(),o("div",null,[y,l("p",null,[s("标签:"),a(n,{type:"tip",text:"栈"}),s(),a(n,{type:"tip",text:"树"}),s(),a(n,{type:"tip",text:"深度优先搜索"}),s(),a(n,{type:"tip",text:"二叉树"})]),i])}const E=p(r,[["render",F]]);export{g as __pageData,E as default};
+import{_ as p,c as o,a as l,b as s,d as a,e,o as t,r as c}from"./app.4a806fb4.js";const g=JSON.parse('{"title":"144-94-145-遍历二叉树","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[{"level":3,"title":"144. 二叉树的前序遍历","slug":"_144-二叉树的前序遍历","link":"#_144-二叉树的前序遍历","children":[]},{"level":3,"title":"94. 二叉树的中序遍历","slug":"_94-二叉树的中序遍历","link":"#_94-二叉树的中序遍历","children":[]},{"level":3,"title":"145. 二叉树的后序遍历","slug":"_145-二叉树的后序遍历","link":"#_145-二叉树的后序遍历","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/144-94-145-遍历二叉树.md"}'),r={name:"algorithm/LeetCode刷题/144-94-145-遍历二叉树.md"},y=l("h1",{id:"_144-94-145-遍历二叉树",tabindex:"-1"},[s("144-94-145-遍历二叉树 "),l("a",{class:"header-anchor",href:"#_144-94-145-遍历二叉树","aria-hidden":"true"},"#")],-1),i=e("",35);function F(D,C,A,d,f,h){const n=c("Badge");return t(),o("div",null,[y,l("p",null,[s("标签:"),a(n,{type:"tip",text:"栈"}),s(),a(n,{type:"tip",text:"树"}),s(),a(n,{type:"tip",text:"深度优先搜索"}),s(),a(n,{type:"tip",text:"二叉树"})]),i])}const E=p(r,[["render",F]]);export{g as __pageData,E as default};
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_15-\344\270\211\346\225\260\344\271\213\345\222\214.md.01e6709d.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_15-\344\270\211\346\225\260\344\271\213\345\222\214.md.06c460e7.js"
similarity index 99%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_15-\344\270\211\346\225\260\344\271\213\345\222\214.md.01e6709d.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_15-\344\270\211\346\225\260\344\271\213\345\222\214.md.06c460e7.js"
index 73cd035c..ffc34da7 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_15-\344\270\211\346\225\260\344\271\213\345\222\214.md.01e6709d.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_15-\344\270\211\346\225\260\344\271\213\345\222\214.md.06c460e7.js"
@@ -1,4 +1,4 @@
-import{_ as p,c as o,a as l,b as s,d as a,e,o as t,r as c}from"./app.7354b8c5.js";const h=JSON.parse('{"title":"15-三数之和","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/15-三数之和.md"}'),r={name:"algorithm/LeetCode刷题/15-三数之和.md"},y=l("h1",{id:"_15-三数之和",tabindex:"-1"},[s("15-三数之和 "),l("a",{class:"header-anchor",href:"#_15-三数之和","aria-hidden":"true"},"#")],-1),F=e(`

题目信息

题目地址15. 三数之和

题目内容:

javascript
给你一个整数数组nums
+import{_ as p,c as o,a as l,b as s,d as a,e,o as t,r as c}from"./app.4a806fb4.js";const h=JSON.parse('{"title":"15-三数之和","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/15-三数之和.md"}'),r={name:"algorithm/LeetCode刷题/15-三数之和.md"},y=l("h1",{id:"_15-三数之和",tabindex:"-1"},[s("15-三数之和 "),l("a",{class:"header-anchor",href:"#_15-三数之和","aria-hidden":"true"},"#")],-1),F=e(`

题目信息

题目地址15. 三数之和

题目内容:

javascript
给你一个整数数组nums
 
 判断是否存在三元组[nums[i], nums[j], nums[k]]满足 i != j、i != k 且 j != k,
 
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_15-\344\270\211\346\225\260\344\271\213\345\222\214.md.01e6709d.lean.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_15-\344\270\211\346\225\260\344\271\213\345\222\214.md.06c460e7.lean.js"
similarity index 93%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_15-\344\270\211\346\225\260\344\271\213\345\222\214.md.01e6709d.lean.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_15-\344\270\211\346\225\260\344\271\213\345\222\214.md.06c460e7.lean.js"
index 8ff21c04..7bab3a45 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_15-\344\270\211\346\225\260\344\271\213\345\222\214.md.01e6709d.lean.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_15-\344\270\211\346\225\260\344\271\213\345\222\214.md.06c460e7.lean.js"
@@ -1 +1 @@
-import{_ as p,c as o,a as l,b as s,d as a,e,o as t,r as c}from"./app.7354b8c5.js";const h=JSON.parse('{"title":"15-三数之和","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/15-三数之和.md"}'),r={name:"algorithm/LeetCode刷题/15-三数之和.md"},y=l("h1",{id:"_15-三数之和",tabindex:"-1"},[s("15-三数之和 "),l("a",{class:"header-anchor",href:"#_15-三数之和","aria-hidden":"true"},"#")],-1),F=e("",10);function C(D,A,i,d,f,u){const n=c("Badge");return t(),o("div",null,[y,l("p",null,[s("标签:"),a(n,{type:"tip",text:"数组"}),s(),a(n,{type:"tip",text:"双指针"}),s(),a(n,{type:"tip",text:"排序"})]),F])}const g=p(r,[["render",C]]);export{h as __pageData,g as default};
+import{_ as p,c as o,a as l,b as s,d as a,e,o as t,r as c}from"./app.4a806fb4.js";const h=JSON.parse('{"title":"15-三数之和","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/15-三数之和.md"}'),r={name:"algorithm/LeetCode刷题/15-三数之和.md"},y=l("h1",{id:"_15-三数之和",tabindex:"-1"},[s("15-三数之和 "),l("a",{class:"header-anchor",href:"#_15-三数之和","aria-hidden":"true"},"#")],-1),F=e("",10);function C(D,A,i,d,f,u){const n=c("Badge");return t(),o("div",null,[y,l("p",null,[s("标签:"),a(n,{type:"tip",text:"数组"}),s(),a(n,{type:"tip",text:"双指针"}),s(),a(n,{type:"tip",text:"排序"})]),F])}const g=p(r,[["render",C]]);export{h as __pageData,g as default};
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_150-\351\200\206\346\263\242\345\205\260\350\241\250\350\276\276\345\274\217\346\261\202\345\200\274.md.a354b8ea.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_150-\351\200\206\346\263\242\345\205\260\350\241\250\350\276\276\345\274\217\346\261\202\345\200\274.md.613aff08.js"
similarity index 99%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_150-\351\200\206\346\263\242\345\205\260\350\241\250\350\276\276\345\274\217\346\261\202\345\200\274.md.a354b8ea.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_150-\351\200\206\346\263\242\345\205\260\350\241\250\350\276\276\345\274\217\346\261\202\345\200\274.md.613aff08.js"
index d5a879cf..fdb7b145 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_150-\351\200\206\346\263\242\345\205\260\350\241\250\350\276\276\345\274\217\346\261\202\345\200\274.md.a354b8ea.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_150-\351\200\206\346\263\242\345\205\260\350\241\250\350\276\276\345\274\217\346\261\202\345\200\274.md.613aff08.js"
@@ -1,4 +1,4 @@
-import{_ as o,c as p,a as l,b as s,d as a,e as t,o as e,r as c}from"./app.7354b8c5.js";const q=JSON.parse('{"title":"150-逆波兰表达式求值","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/150-逆波兰表达式求值.md"}'),r={name:"algorithm/LeetCode刷题/150-逆波兰表达式求值.md"},y=l("h1",{id:"_150-逆波兰表达式求值",tabindex:"-1"},[s("150-逆波兰表达式求值 "),l("a",{class:"header-anchor",href:"#_150-逆波兰表达式求值","aria-hidden":"true"},"#")],-1),D=t(`

题目信息

题目地址150. 逆波兰表达式求值

题目内容:

javascript
给你一个字符串数组tokens,表示一个根据逆波兰表示法表示的算术表达式。
+import{_ as o,c as p,a as l,b as s,d as a,e as t,o as e,r as c}from"./app.4a806fb4.js";const q=JSON.parse('{"title":"150-逆波兰表达式求值","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/150-逆波兰表达式求值.md"}'),r={name:"algorithm/LeetCode刷题/150-逆波兰表达式求值.md"},y=l("h1",{id:"_150-逆波兰表达式求值",tabindex:"-1"},[s("150-逆波兰表达式求值 "),l("a",{class:"header-anchor",href:"#_150-逆波兰表达式求值","aria-hidden":"true"},"#")],-1),D=t(`

题目信息

题目地址150. 逆波兰表达式求值

题目内容:

javascript
给你一个字符串数组tokens,表示一个根据逆波兰表示法表示的算术表达式。
 
 请你计算该表达式。返回一个表示表达式值的整数。
 
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_150-\351\200\206\346\263\242\345\205\260\350\241\250\350\276\276\345\274\217\346\261\202\345\200\274.md.a354b8ea.lean.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_150-\351\200\206\346\263\242\345\205\260\350\241\250\350\276\276\345\274\217\346\261\202\345\200\274.md.613aff08.lean.js"
similarity index 94%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_150-\351\200\206\346\263\242\345\205\260\350\241\250\350\276\276\345\274\217\346\261\202\345\200\274.md.a354b8ea.lean.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_150-\351\200\206\346\263\242\345\205\260\350\241\250\350\276\276\345\274\217\346\261\202\345\200\274.md.613aff08.lean.js"
index 2f830aac..28c95fbf 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_150-\351\200\206\346\263\242\345\205\260\350\241\250\350\276\276\345\274\217\346\261\202\345\200\274.md.a354b8ea.lean.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_150-\351\200\206\346\263\242\345\205\260\350\241\250\350\276\276\345\274\217\346\261\202\345\200\274.md.613aff08.lean.js"
@@ -1 +1 @@
-import{_ as o,c as p,a as l,b as s,d as a,e as t,o as e,r as c}from"./app.7354b8c5.js";const q=JSON.parse('{"title":"150-逆波兰表达式求值","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/150-逆波兰表达式求值.md"}'),r={name:"algorithm/LeetCode刷题/150-逆波兰表达式求值.md"},y=l("h1",{id:"_150-逆波兰表达式求值",tabindex:"-1"},[s("150-逆波兰表达式求值 "),l("a",{class:"header-anchor",href:"#_150-逆波兰表达式求值","aria-hidden":"true"},"#")],-1),D=t("",14);function F(C,A,i,u,d,f){const n=c("Badge");return e(),p("div",null,[y,l("p",null,[s("标签:"),a(n,{type:"tip",text:"栈"}),s(),a(n,{type:"tip",text:"数组"}),s(),a(n,{type:"tip",text:"数学"})]),D])}const h=o(r,[["render",F]]);export{q as __pageData,h as default};
+import{_ as o,c as p,a as l,b as s,d as a,e as t,o as e,r as c}from"./app.4a806fb4.js";const q=JSON.parse('{"title":"150-逆波兰表达式求值","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/150-逆波兰表达式求值.md"}'),r={name:"algorithm/LeetCode刷题/150-逆波兰表达式求值.md"},y=l("h1",{id:"_150-逆波兰表达式求值",tabindex:"-1"},[s("150-逆波兰表达式求值 "),l("a",{class:"header-anchor",href:"#_150-逆波兰表达式求值","aria-hidden":"true"},"#")],-1),D=t("",14);function F(C,A,i,u,d,f){const n=c("Badge");return e(),p("div",null,[y,l("p",null,[s("标签:"),a(n,{type:"tip",text:"栈"}),s(),a(n,{type:"tip",text:"数组"}),s(),a(n,{type:"tip",text:"数学"})]),D])}const h=o(r,[["render",F]]);export{q as __pageData,h as default};
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_151-\345\217\215\350\275\254\345\255\227\347\254\246\344\270\262\344\270\255\347\232\204\345\215\225\350\257\215.md.a39dca42.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_151-\345\217\215\350\275\254\345\255\227\347\254\246\344\270\262\344\270\255\347\232\204\345\215\225\350\257\215.md.884bfa8f.js"
similarity index 99%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_151-\345\217\215\350\275\254\345\255\227\347\254\246\344\270\262\344\270\255\347\232\204\345\215\225\350\257\215.md.a39dca42.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_151-\345\217\215\350\275\254\345\255\227\347\254\246\344\270\262\344\270\255\347\232\204\345\215\225\350\257\215.md.884bfa8f.js"
index 261bed16..ff7dcabe 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_151-\345\217\215\350\275\254\345\255\227\347\254\246\344\270\262\344\270\255\347\232\204\345\215\225\350\257\215.md.a39dca42.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_151-\345\217\215\350\275\254\345\255\227\347\254\246\344\270\262\344\270\255\347\232\204\345\215\225\350\257\215.md.884bfa8f.js"
@@ -1,4 +1,4 @@
-import{_ as p,c as o,a as s,b as n,d as l,e,o as t,r as c}from"./app.7354b8c5.js";const f=JSON.parse('{"title":"151-反转字符串中的单词","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/151-反转字符串中的单词.md"}'),r={name:"algorithm/LeetCode刷题/151-反转字符串中的单词.md"},y=s("h1",{id:"_151-反转字符串中的单词",tabindex:"-1"},[n("151-反转字符串中的单词 "),s("a",{class:"header-anchor",href:"#_151-反转字符串中的单词","aria-hidden":"true"},"#")],-1),F=e(`

题目信息

题目地址151. 反转字符串中的单词

题目内容:

javascript
给你一个字符串s,请你反转字符串中单词的顺序。
+import{_ as p,c as o,a as s,b as n,d as l,e,o as t,r as c}from"./app.4a806fb4.js";const f=JSON.parse('{"title":"151-反转字符串中的单词","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/151-反转字符串中的单词.md"}'),r={name:"algorithm/LeetCode刷题/151-反转字符串中的单词.md"},y=s("h1",{id:"_151-反转字符串中的单词",tabindex:"-1"},[n("151-反转字符串中的单词 "),s("a",{class:"header-anchor",href:"#_151-反转字符串中的单词","aria-hidden":"true"},"#")],-1),F=e(`

题目信息

题目地址151. 反转字符串中的单词

题目内容:

javascript
给你一个字符串s,请你反转字符串中单词的顺序。
 
 单词是由非空格字符组成的字符串。s中使用至少一个空格将字符串中的单词分隔开。
 
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_151-\345\217\215\350\275\254\345\255\227\347\254\246\344\270\262\344\270\255\347\232\204\345\215\225\350\257\215.md.a39dca42.lean.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_151-\345\217\215\350\275\254\345\255\227\347\254\246\344\270\262\344\270\255\347\232\204\345\215\225\350\257\215.md.884bfa8f.lean.js"
similarity index 94%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_151-\345\217\215\350\275\254\345\255\227\347\254\246\344\270\262\344\270\255\347\232\204\345\215\225\350\257\215.md.a39dca42.lean.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_151-\345\217\215\350\275\254\345\255\227\347\254\246\344\270\262\344\270\255\347\232\204\345\215\225\350\257\215.md.884bfa8f.lean.js"
index 3f1d9b93..f2a18644 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_151-\345\217\215\350\275\254\345\255\227\347\254\246\344\270\262\344\270\255\347\232\204\345\215\225\350\257\215.md.a39dca42.lean.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_151-\345\217\215\350\275\254\345\255\227\347\254\246\344\270\262\344\270\255\347\232\204\345\215\225\350\257\215.md.884bfa8f.lean.js"
@@ -1 +1 @@
-import{_ as p,c as o,a as s,b as n,d as l,e,o as t,r as c}from"./app.7354b8c5.js";const f=JSON.parse('{"title":"151-反转字符串中的单词","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/151-反转字符串中的单词.md"}'),r={name:"algorithm/LeetCode刷题/151-反转字符串中的单词.md"},y=s("h1",{id:"_151-反转字符串中的单词",tabindex:"-1"},[n("151-反转字符串中的单词 "),s("a",{class:"header-anchor",href:"#_151-反转字符串中的单词","aria-hidden":"true"},"#")],-1),F=e("",10);function D(C,i,A,d,h,_){const a=c("Badge");return t(),o("div",null,[y,s("p",null,[n("标签:"),l(a,{type:"tip",text:"双指针"}),n(),l(a,{type:"tip",text:"字符串"})]),F])}const g=p(r,[["render",D]]);export{f as __pageData,g as default};
+import{_ as p,c as o,a as s,b as n,d as l,e,o as t,r as c}from"./app.4a806fb4.js";const f=JSON.parse('{"title":"151-反转字符串中的单词","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/151-反转字符串中的单词.md"}'),r={name:"algorithm/LeetCode刷题/151-反转字符串中的单词.md"},y=s("h1",{id:"_151-反转字符串中的单词",tabindex:"-1"},[n("151-反转字符串中的单词 "),s("a",{class:"header-anchor",href:"#_151-反转字符串中的单词","aria-hidden":"true"},"#")],-1),F=e("",10);function D(C,i,A,d,h,_){const a=c("Badge");return t(),o("div",null,[y,s("p",null,[n("标签:"),l(a,{type:"tip",text:"双指针"}),n(),l(a,{type:"tip",text:"字符串"})]),F])}const g=p(r,[["render",D]]);export{f as __pageData,g as default};
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_17-\347\224\265\350\257\235\345\217\267\347\240\201\347\232\204\345\255\227\346\257\215\347\273\204\345\220\210.md.3d544b67.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_17-\347\224\265\350\257\235\345\217\267\347\240\201\347\232\204\345\255\227\346\257\215\347\273\204\345\220\210.md.9983d4c9.js"
similarity index 99%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_17-\347\224\265\350\257\235\345\217\267\347\240\201\347\232\204\345\255\227\346\257\215\347\273\204\345\220\210.md.3d544b67.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_17-\347\224\265\350\257\235\345\217\267\347\240\201\347\232\204\345\255\227\346\257\215\347\273\204\345\220\210.md.9983d4c9.js"
index ea5c3e61..0fa6651e 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_17-\347\224\265\350\257\235\345\217\267\347\240\201\347\232\204\345\255\227\346\257\215\347\273\204\345\220\210.md.3d544b67.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_17-\347\224\265\350\257\235\345\217\267\347\240\201\347\232\204\345\255\227\346\257\215\347\273\204\345\220\210.md.9983d4c9.js"
@@ -1,4 +1,4 @@
-import{_ as p,c as o,a as l,b as s,d as a,e as t,o as e,r as c}from"./app.7354b8c5.js";const g=JSON.parse('{"title":"17-电话号码的字母组合","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/17-电话号码的字母组合.md"}'),r={name:"algorithm/LeetCode刷题/17-电话号码的字母组合.md"},F=l("h1",{id:"_17-电话号码的字母组合",tabindex:"-1"},[s("17-电话号码的字母组合 "),l("a",{class:"header-anchor",href:"#_17-电话号码的字母组合","aria-hidden":"true"},"#")],-1),y=t(`

题目信息

题目地址17-电话号码的字母组合

题目内容:

javascript
给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。答案可以按任意顺序返回。
+import{_ as p,c as o,a as l,b as s,d as a,e as t,o as e,r as c}from"./app.4a806fb4.js";const g=JSON.parse('{"title":"17-电话号码的字母组合","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/17-电话号码的字母组合.md"}'),r={name:"algorithm/LeetCode刷题/17-电话号码的字母组合.md"},F=l("h1",{id:"_17-电话号码的字母组合",tabindex:"-1"},[s("17-电话号码的字母组合 "),l("a",{class:"header-anchor",href:"#_17-电话号码的字母组合","aria-hidden":"true"},"#")],-1),y=t(`

题目信息

题目地址17-电话号码的字母组合

题目内容:

javascript
给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。答案可以按任意顺序返回。
 
 给出数字到字母的映射如下(与电话按键相同)。注意1不对应任何字母。
 
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_17-\347\224\265\350\257\235\345\217\267\347\240\201\347\232\204\345\255\227\346\257\215\347\273\204\345\220\210.md.3d544b67.lean.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_17-\347\224\265\350\257\235\345\217\267\347\240\201\347\232\204\345\255\227\346\257\215\347\273\204\345\220\210.md.9983d4c9.lean.js"
similarity index 94%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_17-\347\224\265\350\257\235\345\217\267\347\240\201\347\232\204\345\255\227\346\257\215\347\273\204\345\220\210.md.3d544b67.lean.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_17-\347\224\265\350\257\235\345\217\267\347\240\201\347\232\204\345\255\227\346\257\215\347\273\204\345\220\210.md.9983d4c9.lean.js"
index 0c8edcad..0ded99f6 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_17-\347\224\265\350\257\235\345\217\267\347\240\201\347\232\204\345\255\227\346\257\215\347\273\204\345\220\210.md.3d544b67.lean.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_17-\347\224\265\350\257\235\345\217\267\347\240\201\347\232\204\345\255\227\346\257\215\347\273\204\345\220\210.md.9983d4c9.lean.js"
@@ -1 +1 @@
-import{_ as p,c as o,a as l,b as s,d as a,e as t,o as e,r as c}from"./app.7354b8c5.js";const g=JSON.parse('{"title":"17-电话号码的字母组合","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/17-电话号码的字母组合.md"}'),r={name:"algorithm/LeetCode刷题/17-电话号码的字母组合.md"},F=l("h1",{id:"_17-电话号码的字母组合",tabindex:"-1"},[s("17-电话号码的字母组合 "),l("a",{class:"header-anchor",href:"#_17-电话号码的字母组合","aria-hidden":"true"},"#")],-1),y=t("",16);function D(i,C,A,u,d,f){const n=c("Badge");return e(),o("div",null,[F,l("p",null,[s("标签:"),a(n,{type:"tip",text:"哈希表"}),s(),a(n,{type:"tip",text:"字符串"}),s(),a(n,{type:"tip",text:"回溯"})]),y])}const h=p(r,[["render",D]]);export{g as __pageData,h as default};
+import{_ as p,c as o,a as l,b as s,d as a,e as t,o as e,r as c}from"./app.4a806fb4.js";const g=JSON.parse('{"title":"17-电话号码的字母组合","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/17-电话号码的字母组合.md"}'),r={name:"algorithm/LeetCode刷题/17-电话号码的字母组合.md"},F=l("h1",{id:"_17-电话号码的字母组合",tabindex:"-1"},[s("17-电话号码的字母组合 "),l("a",{class:"header-anchor",href:"#_17-电话号码的字母组合","aria-hidden":"true"},"#")],-1),y=t("",16);function D(i,C,A,u,d,f){const n=c("Badge");return e(),o("div",null,[F,l("p",null,[s("标签:"),a(n,{type:"tip",text:"哈希表"}),s(),a(n,{type:"tip",text:"字符串"}),s(),a(n,{type:"tip",text:"回溯"})]),y])}const h=p(r,[["render",D]]);export{g as __pageData,h as default};
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_18-\345\233\233\346\225\260\344\271\213\345\222\214.md.9044437a.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_18-\345\233\233\346\225\260\344\271\213\345\222\214.md.b359d493.js"
similarity index 99%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_18-\345\233\233\346\225\260\344\271\213\345\222\214.md.9044437a.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_18-\345\233\233\346\225\260\344\271\213\345\222\214.md.b359d493.js"
index 1dd9dfc0..38fb79be 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_18-\345\233\233\346\225\260\344\271\213\345\222\214.md.9044437a.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_18-\345\233\233\346\225\260\344\271\213\345\222\214.md.b359d493.js"
@@ -1,4 +1,4 @@
-import{_ as p,c as o,a as l,b as s,d as a,e as t,o as e,r as c}from"./app.7354b8c5.js";const g=JSON.parse('{"title":"18-四数之和","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/18-四数之和.md"}'),r={name:"algorithm/LeetCode刷题/18-四数之和.md"},y=l("h1",{id:"_18-四数之和",tabindex:"-1"},[s("18-四数之和 "),l("a",{class:"header-anchor",href:"#_18-四数之和","aria-hidden":"true"},"#")],-1),F=t(`

题目信息

题目地址18. 四数之和

题目内容:

javascript
给你一个由n个整数组成的数组nums,和一个目标值target。
+import{_ as p,c as o,a as l,b as s,d as a,e as t,o as e,r as c}from"./app.4a806fb4.js";const g=JSON.parse('{"title":"18-四数之和","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/18-四数之和.md"}'),r={name:"algorithm/LeetCode刷题/18-四数之和.md"},y=l("h1",{id:"_18-四数之和",tabindex:"-1"},[s("18-四数之和 "),l("a",{class:"header-anchor",href:"#_18-四数之和","aria-hidden":"true"},"#")],-1),F=t(`

题目信息

题目地址18. 四数之和

题目内容:

javascript
给你一个由n个整数组成的数组nums,和一个目标值target。
 
 请你找出并返回满足下述全部条件且不重复的四元组[nums[a], nums[b], nums[c], nums[d]] 
 (若两个四元组元素一一对应,则认为两个四元组重复):
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_18-\345\233\233\346\225\260\344\271\213\345\222\214.md.9044437a.lean.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_18-\345\233\233\346\225\260\344\271\213\345\222\214.md.b359d493.lean.js"
similarity index 93%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_18-\345\233\233\346\225\260\344\271\213\345\222\214.md.9044437a.lean.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_18-\345\233\233\346\225\260\344\271\213\345\222\214.md.b359d493.lean.js"
index 8f048206..ce130a42 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_18-\345\233\233\346\225\260\344\271\213\345\222\214.md.9044437a.lean.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_18-\345\233\233\346\225\260\344\271\213\345\222\214.md.b359d493.lean.js"
@@ -1 +1 @@
-import{_ as p,c as o,a as l,b as s,d as a,e as t,o as e,r as c}from"./app.7354b8c5.js";const g=JSON.parse('{"title":"18-四数之和","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/18-四数之和.md"}'),r={name:"algorithm/LeetCode刷题/18-四数之和.md"},y=l("h1",{id:"_18-四数之和",tabindex:"-1"},[s("18-四数之和 "),l("a",{class:"header-anchor",href:"#_18-四数之和","aria-hidden":"true"},"#")],-1),F=t("",10);function D(C,i,A,d,f,u){const n=c("Badge");return e(),o("div",null,[y,l("p",null,[s("标签:"),a(n,{type:"tip",text:"数组"}),s(),a(n,{type:"tip",text:"双指针"}),s(),a(n,{type:"tip",text:"排序"})]),F])}const h=p(r,[["render",D]]);export{g as __pageData,h as default};
+import{_ as p,c as o,a as l,b as s,d as a,e as t,o as e,r as c}from"./app.4a806fb4.js";const g=JSON.parse('{"title":"18-四数之和","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/18-四数之和.md"}'),r={name:"algorithm/LeetCode刷题/18-四数之和.md"},y=l("h1",{id:"_18-四数之和",tabindex:"-1"},[s("18-四数之和 "),l("a",{class:"header-anchor",href:"#_18-四数之和","aria-hidden":"true"},"#")],-1),F=t("",10);function D(C,i,A,d,f,u){const n=c("Badge");return e(),o("div",null,[y,l("p",null,[s("标签:"),a(n,{type:"tip",text:"数组"}),s(),a(n,{type:"tip",text:"双指针"}),s(),a(n,{type:"tip",text:"排序"})]),F])}const h=p(r,[["render",D]]);export{g as __pageData,h as default};
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_19-\345\210\240\351\231\244\351\223\276\350\241\250\347\232\204\345\200\222\346\225\260\347\254\254N\344\270\252\347\273\223\347\202\271.md.897ec378.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_19-\345\210\240\351\231\244\351\223\276\350\241\250\347\232\204\345\200\222\346\225\260\347\254\254N\344\270\252\347\273\223\347\202\271.md.d0455de0.js"
similarity index 99%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_19-\345\210\240\351\231\244\351\223\276\350\241\250\347\232\204\345\200\222\346\225\260\347\254\254N\344\270\252\347\273\223\347\202\271.md.897ec378.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_19-\345\210\240\351\231\244\351\223\276\350\241\250\347\232\204\345\200\222\346\225\260\347\254\254N\344\270\252\347\273\223\347\202\271.md.d0455de0.js"
index 950b5bdd..e8b7e51c 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_19-\345\210\240\351\231\244\351\223\276\350\241\250\347\232\204\345\200\222\346\225\260\347\254\254N\344\270\252\347\273\223\347\202\271.md.897ec378.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_19-\345\210\240\351\231\244\351\223\276\350\241\250\347\232\204\345\200\222\346\225\260\347\254\254N\344\270\252\347\273\223\347\202\271.md.d0455de0.js"
@@ -1,4 +1,4 @@
-import{_ as o,c as p,a as s,b as n,d as l,e,o as t,r as c}from"./app.7354b8c5.js";const u=JSON.parse('{"title":"19-删除链表的倒数第N个结点","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/19-删除链表的倒数第N个结点.md"}'),r={name:"algorithm/LeetCode刷题/19-删除链表的倒数第N个结点.md"},y=s("h1",{id:"_19-删除链表的倒数第n个结点",tabindex:"-1"},[n("19-删除链表的倒数第N个结点 "),s("a",{class:"header-anchor",href:"#_19-删除链表的倒数第n个结点","aria-hidden":"true"},"#")],-1),i=e(`

题目信息

题目地址19.删除链表的倒数第N个结点

题目内容:

javascript
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
+import{_ as o,c as p,a as s,b as n,d as l,e,o as t,r as c}from"./app.4a806fb4.js";const u=JSON.parse('{"title":"19-删除链表的倒数第N个结点","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/19-删除链表的倒数第N个结点.md"}'),r={name:"algorithm/LeetCode刷题/19-删除链表的倒数第N个结点.md"},y=s("h1",{id:"_19-删除链表的倒数第n个结点",tabindex:"-1"},[n("19-删除链表的倒数第N个结点 "),s("a",{class:"header-anchor",href:"#_19-删除链表的倒数第n个结点","aria-hidden":"true"},"#")],-1),i=e(`

题目信息

题目地址19.删除链表的倒数第N个结点

题目内容:

javascript
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
 
 示例1:
     输入:head = [1,2,3,4,5], n = 2
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_19-\345\210\240\351\231\244\351\223\276\350\241\250\347\232\204\345\200\222\346\225\260\347\254\254N\344\270\252\347\273\223\347\202\271.md.897ec378.lean.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_19-\345\210\240\351\231\244\351\223\276\350\241\250\347\232\204\345\200\222\346\225\260\347\254\254N\344\270\252\347\273\223\347\202\271.md.d0455de0.lean.js"
similarity index 94%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_19-\345\210\240\351\231\244\351\223\276\350\241\250\347\232\204\345\200\222\346\225\260\347\254\254N\344\270\252\347\273\223\347\202\271.md.897ec378.lean.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_19-\345\210\240\351\231\244\351\223\276\350\241\250\347\232\204\345\200\222\346\225\260\347\254\254N\344\270\252\347\273\223\347\202\271.md.d0455de0.lean.js"
index a0873391..fb1382d0 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_19-\345\210\240\351\231\244\351\223\276\350\241\250\347\232\204\345\200\222\346\225\260\347\254\254N\344\270\252\347\273\223\347\202\271.md.897ec378.lean.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_19-\345\210\240\351\231\244\351\223\276\350\241\250\347\232\204\345\200\222\346\225\260\347\254\254N\344\270\252\347\273\223\347\202\271.md.d0455de0.lean.js"
@@ -1 +1 @@
-import{_ as o,c as p,a as s,b as n,d as l,e,o as t,r as c}from"./app.7354b8c5.js";const u=JSON.parse('{"title":"19-删除链表的倒数第N个结点","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/19-删除链表的倒数第N个结点.md"}'),r={name:"algorithm/LeetCode刷题/19-删除链表的倒数第N个结点.md"},y=s("h1",{id:"_19-删除链表的倒数第n个结点",tabindex:"-1"},[n("19-删除链表的倒数第N个结点 "),s("a",{class:"header-anchor",href:"#_19-删除链表的倒数第n个结点","aria-hidden":"true"},"#")],-1),i=e("",13);function F(D,C,A,d,f,h){const a=c("Badge");return t(),p("div",null,[y,s("p",null,[n("标签:"),l(a,{type:"tip",text:"链表"}),n(),l(a,{type:"tip",text:"双指针"})]),i])}const _=o(r,[["render",F]]);export{u as __pageData,_ as default};
+import{_ as o,c as p,a as s,b as n,d as l,e,o as t,r as c}from"./app.4a806fb4.js";const u=JSON.parse('{"title":"19-删除链表的倒数第N个结点","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/19-删除链表的倒数第N个结点.md"}'),r={name:"algorithm/LeetCode刷题/19-删除链表的倒数第N个结点.md"},y=s("h1",{id:"_19-删除链表的倒数第n个结点",tabindex:"-1"},[n("19-删除链表的倒数第N个结点 "),s("a",{class:"header-anchor",href:"#_19-删除链表的倒数第n个结点","aria-hidden":"true"},"#")],-1),i=e("",13);function F(D,C,A,d,f,h){const a=c("Badge");return t(),p("div",null,[y,s("p",null,[n("标签:"),l(a,{type:"tip",text:"链表"}),n(),l(a,{type:"tip",text:"双指针"})]),i])}const _=o(r,[["render",F]]);export{u as __pageData,_ as default};
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_20-\346\234\211\346\225\210\347\232\204\346\213\254\345\217\267.md.8aeefd8f.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_20-\346\234\211\346\225\210\347\232\204\346\213\254\345\217\267.md.1d88a675.js"
similarity index 99%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_20-\346\234\211\346\225\210\347\232\204\346\213\254\345\217\267.md.8aeefd8f.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_20-\346\234\211\346\225\210\347\232\204\346\213\254\345\217\267.md.1d88a675.js"
index f4d026aa..a6e05f08 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_20-\346\234\211\346\225\210\347\232\204\346\213\254\345\217\267.md.8aeefd8f.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_20-\346\234\211\346\225\210\347\232\204\346\213\254\345\217\267.md.1d88a675.js"
@@ -1,4 +1,4 @@
-import{_ as p,c as o,a as s,b as n,d as l,e as t,o as e,r as c}from"./app.7354b8c5.js";const h=JSON.parse('{"title":"20-有效的括号","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/20-有效的括号.md"}'),r={name:"algorithm/LeetCode刷题/20-有效的括号.md"},y=s("h1",{id:"_20-有效的括号",tabindex:"-1"},[n("20-有效的括号 "),s("a",{class:"header-anchor",href:"#_20-有效的括号","aria-hidden":"true"},"#")],-1),F=t(`

题目信息

题目地址有效的括号

题目内容:

javascript
给定一个只包括 '('')''{''}''['']' 的字符串 s ,判断字符串是否有效。
+import{_ as p,c as o,a as s,b as n,d as l,e as t,o as e,r as c}from"./app.4a806fb4.js";const h=JSON.parse('{"title":"20-有效的括号","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/20-有效的括号.md"}'),r={name:"algorithm/LeetCode刷题/20-有效的括号.md"},y=s("h1",{id:"_20-有效的括号",tabindex:"-1"},[n("20-有效的括号 "),s("a",{class:"header-anchor",href:"#_20-有效的括号","aria-hidden":"true"},"#")],-1),F=t(`

题目信息

题目地址有效的括号

题目内容:

javascript
给定一个只包括 '('')''{''}''['']' 的字符串 s ,判断字符串是否有效。
 
 有效字符串需满足:
    左括号必须用相同类型的右括号闭合。
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_20-\346\234\211\346\225\210\347\232\204\346\213\254\345\217\267.md.8aeefd8f.lean.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_20-\346\234\211\346\225\210\347\232\204\346\213\254\345\217\267.md.1d88a675.lean.js"
similarity index 93%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_20-\346\234\211\346\225\210\347\232\204\346\213\254\345\217\267.md.8aeefd8f.lean.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_20-\346\234\211\346\225\210\347\232\204\346\213\254\345\217\267.md.1d88a675.lean.js"
index 0f7fe711..d37437cd 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_20-\346\234\211\346\225\210\347\232\204\346\213\254\345\217\267.md.8aeefd8f.lean.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_20-\346\234\211\346\225\210\347\232\204\346\213\254\345\217\267.md.1d88a675.lean.js"
@@ -1 +1 @@
-import{_ as p,c as o,a as s,b as n,d as l,e as t,o as e,r as c}from"./app.7354b8c5.js";const h=JSON.parse('{"title":"20-有效的括号","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/20-有效的括号.md"}'),r={name:"algorithm/LeetCode刷题/20-有效的括号.md"},y=s("h1",{id:"_20-有效的括号",tabindex:"-1"},[n("20-有效的括号 "),s("a",{class:"header-anchor",href:"#_20-有效的括号","aria-hidden":"true"},"#")],-1),F=t("",12);function D(i,C,A,f,d,E){const a=c("Badge");return e(),o("div",null,[y,s("p",null,[n("标签:"),l(a,{type:"tip",text:"栈"}),n(),l(a,{type:"tip",text:"字符串"})]),F])}const k=p(r,[["render",D]]);export{h as __pageData,k as default};
+import{_ as p,c as o,a as s,b as n,d as l,e as t,o as e,r as c}from"./app.4a806fb4.js";const h=JSON.parse('{"title":"20-有效的括号","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/20-有效的括号.md"}'),r={name:"algorithm/LeetCode刷题/20-有效的括号.md"},y=s("h1",{id:"_20-有效的括号",tabindex:"-1"},[n("20-有效的括号 "),s("a",{class:"header-anchor",href:"#_20-有效的括号","aria-hidden":"true"},"#")],-1),F=t("",12);function D(i,C,A,f,d,E){const a=c("Badge");return e(),o("div",null,[y,s("p",null,[n("标签:"),l(a,{type:"tip",text:"栈"}),n(),l(a,{type:"tip",text:"字符串"})]),F])}const k=p(r,[["render",D]]);export{h as __pageData,k as default};
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_202-\345\277\253\344\271\220\346\225\260.md.efdd8af6.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_202-\345\277\253\344\271\220\346\225\260.md.35f4fce3.js"
similarity index 99%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_202-\345\277\253\344\271\220\346\225\260.md.efdd8af6.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_202-\345\277\253\344\271\220\346\225\260.md.35f4fce3.js"
index 61b16767..4d5fa9e2 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_202-\345\277\253\344\271\220\346\225\260.md.efdd8af6.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_202-\345\277\253\344\271\220\346\225\260.md.35f4fce3.js"
@@ -1,4 +1,4 @@
-import{_ as p,c as o,a as l,b as s,d as a,e,o as t,r as c}from"./app.7354b8c5.js";const m=JSON.parse('{"title":"202-快乐数","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/202-快乐数.md"}'),r={name:"algorithm/LeetCode刷题/202-快乐数.md"},y=l("h1",{id:"_202-快乐数",tabindex:"-1"},[s("202-快乐数 "),l("a",{class:"header-anchor",href:"#_202-快乐数","aria-hidden":"true"},"#")],-1),F=e(`

题目信息

题目地址202. 快乐数

题目内容:

javascript
编写一个算法来判断一个数n是不是快乐数。
+import{_ as p,c as o,a as l,b as s,d as a,e,o as t,r as c}from"./app.4a806fb4.js";const m=JSON.parse('{"title":"202-快乐数","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/202-快乐数.md"}'),r={name:"algorithm/LeetCode刷题/202-快乐数.md"},y=l("h1",{id:"_202-快乐数",tabindex:"-1"},[s("202-快乐数 "),l("a",{class:"header-anchor",href:"#_202-快乐数","aria-hidden":"true"},"#")],-1),F=e(`

题目信息

题目地址202. 快乐数

题目内容:

javascript
编写一个算法来判断一个数n是不是快乐数。
 
 「快乐数」定义为:
 
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_202-\345\277\253\344\271\220\346\225\260.md.efdd8af6.lean.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_202-\345\277\253\344\271\220\346\225\260.md.35f4fce3.lean.js"
similarity index 94%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_202-\345\277\253\344\271\220\346\225\260.md.efdd8af6.lean.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_202-\345\277\253\344\271\220\346\225\260.md.35f4fce3.lean.js"
index 60960c03..96285e94 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_202-\345\277\253\344\271\220\346\225\260.md.efdd8af6.lean.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_202-\345\277\253\344\271\220\346\225\260.md.35f4fce3.lean.js"
@@ -1 +1 @@
-import{_ as p,c as o,a as l,b as s,d as a,e,o as t,r as c}from"./app.7354b8c5.js";const m=JSON.parse('{"title":"202-快乐数","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/202-快乐数.md"}'),r={name:"algorithm/LeetCode刷题/202-快乐数.md"},y=l("h1",{id:"_202-快乐数",tabindex:"-1"},[s("202-快乐数 "),l("a",{class:"header-anchor",href:"#_202-快乐数","aria-hidden":"true"},"#")],-1),F=e("",16);function C(D,A,i,d,f,u){const n=c("Badge");return t(),o("div",null,[y,l("p",null,[s("标签:"),a(n,{type:"tip",text:"哈希表"}),s(),a(n,{type:"tip",text:"数学"}),s(),a(n,{type:"tip",text:"双指针"})]),F])}const g=p(r,[["render",C]]);export{m as __pageData,g as default};
+import{_ as p,c as o,a as l,b as s,d as a,e,o as t,r as c}from"./app.4a806fb4.js";const m=JSON.parse('{"title":"202-快乐数","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/202-快乐数.md"}'),r={name:"algorithm/LeetCode刷题/202-快乐数.md"},y=l("h1",{id:"_202-快乐数",tabindex:"-1"},[s("202-快乐数 "),l("a",{class:"header-anchor",href:"#_202-快乐数","aria-hidden":"true"},"#")],-1),F=e("",16);function C(D,A,i,d,f,u){const n=c("Badge");return t(),o("div",null,[y,l("p",null,[s("标签:"),a(n,{type:"tip",text:"哈希表"}),s(),a(n,{type:"tip",text:"数学"}),s(),a(n,{type:"tip",text:"双指针"})]),F])}const g=p(r,[["render",C]]);export{m as __pageData,g as default};
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_203-\347\247\273\351\231\244\351\223\276\350\241\250\345\205\203\347\264\240.md.90f233b5.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_203-\347\247\273\351\231\244\351\223\276\350\241\250\345\205\203\347\264\240.md.8c0d5e81.js"
similarity index 99%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_203-\347\247\273\351\231\244\351\223\276\350\241\250\345\205\203\347\264\240.md.90f233b5.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_203-\347\247\273\351\231\244\351\223\276\350\241\250\345\205\203\347\264\240.md.8c0d5e81.js"
index a528e976..dc17565a 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_203-\347\247\273\351\231\244\351\223\276\350\241\250\345\205\203\347\264\240.md.90f233b5.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_203-\347\247\273\351\231\244\351\223\276\350\241\250\345\205\203\347\264\240.md.8c0d5e81.js"
@@ -1,4 +1,4 @@
-import{_ as o,c as p,a as s,b as n,d as l,e,o as t,r as c}from"./app.7354b8c5.js";const v=JSON.parse('{"title":"203-移除链表元素","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/203-移除链表元素.md"}'),r={name:"algorithm/LeetCode刷题/203-移除链表元素.md"},y=s("h1",{id:"_203-移除链表元素",tabindex:"-1"},[n("203-移除链表元素 "),s("a",{class:"header-anchor",href:"#_203-移除链表元素","aria-hidden":"true"},"#")],-1),i=e(`

题目信息

题目地址203. 移除链表元素

题目内容:

javascript
给你一个链表的头节点head和一个整数val,请你删除链表中所有满足Node.val == val的节点,并返回新的头节点 。
+import{_ as o,c as p,a as s,b as n,d as l,e,o as t,r as c}from"./app.4a806fb4.js";const v=JSON.parse('{"title":"203-移除链表元素","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/203-移除链表元素.md"}'),r={name:"algorithm/LeetCode刷题/203-移除链表元素.md"},y=s("h1",{id:"_203-移除链表元素",tabindex:"-1"},[n("203-移除链表元素 "),s("a",{class:"header-anchor",href:"#_203-移除链表元素","aria-hidden":"true"},"#")],-1),i=e(`

题目信息

题目地址203. 移除链表元素

题目内容:

javascript
给你一个链表的头节点head和一个整数val,请你删除链表中所有满足Node.val == val的节点,并返回新的头节点 。
  
 示例 1
     输入:head = [1,2,6,3,4,5,6], val = 6
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_203-\347\247\273\351\231\244\351\223\276\350\241\250\345\205\203\347\264\240.md.90f233b5.lean.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_203-\347\247\273\351\231\244\351\223\276\350\241\250\345\205\203\347\264\240.md.8c0d5e81.lean.js"
similarity index 94%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_203-\347\247\273\351\231\244\351\223\276\350\241\250\345\205\203\347\264\240.md.90f233b5.lean.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_203-\347\247\273\351\231\244\351\223\276\350\241\250\345\205\203\347\264\240.md.8c0d5e81.lean.js"
index 3bcda6ed..f44a5cae 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_203-\347\247\273\351\231\244\351\223\276\350\241\250\345\205\203\347\264\240.md.90f233b5.lean.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_203-\347\247\273\351\231\244\351\223\276\350\241\250\345\205\203\347\264\240.md.8c0d5e81.lean.js"
@@ -1 +1 @@
-import{_ as o,c as p,a as s,b as n,d as l,e,o as t,r as c}from"./app.7354b8c5.js";const v=JSON.parse('{"title":"203-移除链表元素","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/203-移除链表元素.md"}'),r={name:"algorithm/LeetCode刷题/203-移除链表元素.md"},y=s("h1",{id:"_203-移除链表元素",tabindex:"-1"},[n("203-移除链表元素 "),s("a",{class:"header-anchor",href:"#_203-移除链表元素","aria-hidden":"true"},"#")],-1),i=e("",18);function F(D,C,A,d,f,u){const a=c("Badge");return t(),p("div",null,[y,s("p",null,[n("标签:"),l(a,{type:"tip",text:"递归"}),n(),l(a,{type:"tip",text:"链表"})]),i])}const m=o(r,[["render",F]]);export{v as __pageData,m as default};
+import{_ as o,c as p,a as s,b as n,d as l,e,o as t,r as c}from"./app.4a806fb4.js";const v=JSON.parse('{"title":"203-移除链表元素","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/203-移除链表元素.md"}'),r={name:"algorithm/LeetCode刷题/203-移除链表元素.md"},y=s("h1",{id:"_203-移除链表元素",tabindex:"-1"},[n("203-移除链表元素 "),s("a",{class:"header-anchor",href:"#_203-移除链表元素","aria-hidden":"true"},"#")],-1),i=e("",18);function F(D,C,A,d,f,u){const a=c("Badge");return t(),p("div",null,[y,s("p",null,[n("标签:"),l(a,{type:"tip",text:"递归"}),n(),l(a,{type:"tip",text:"链表"})]),i])}const m=o(r,[["render",F]]);export{v as __pageData,m as default};
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_206-\345\217\215\350\275\254\351\223\276\350\241\250.md.e71ab261.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_206-\345\217\215\350\275\254\351\223\276\350\241\250.md.8ca2938b.js"
similarity index 99%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_206-\345\217\215\350\275\254\351\223\276\350\241\250.md.e71ab261.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_206-\345\217\215\350\275\254\351\223\276\350\241\250.md.8ca2938b.js"
index 0c81dbbd..0ebc7ab9 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_206-\345\217\215\350\275\254\351\223\276\350\241\250.md.e71ab261.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_206-\345\217\215\350\275\254\351\223\276\350\241\250.md.8ca2938b.js"
@@ -1,4 +1,4 @@
-import{_ as o,c as e,a as s,b as n,d as l,e as p,o as t,r as c}from"./app.7354b8c5.js";const v=JSON.parse('{"title":"206-反转链表","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/206-反转链表.md"}'),r={name:"algorithm/LeetCode刷题/206-反转链表.md"},i=s("h1",{id:"_206-反转链表",tabindex:"-1"},[n("206-反转链表 "),s("a",{class:"header-anchor",href:"#_206-反转链表","aria-hidden":"true"},"#")],-1),y=p(`

题目信息

题目地址206. 反转链表

题目内容:

javascript
给你单链表的头节点head,请你反转链表,并返回反转后的链表。
+import{_ as o,c as e,a as s,b as n,d as l,e as p,o as t,r as c}from"./app.4a806fb4.js";const v=JSON.parse('{"title":"206-反转链表","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/206-反转链表.md"}'),r={name:"algorithm/LeetCode刷题/206-反转链表.md"},i=s("h1",{id:"_206-反转链表",tabindex:"-1"},[n("206-反转链表 "),s("a",{class:"header-anchor",href:"#_206-反转链表","aria-hidden":"true"},"#")],-1),y=p(`

题目信息

题目地址206. 反转链表

题目内容:

javascript
给你单链表的头节点head,请你反转链表,并返回反转后的链表。
 

示例 1:

rev1ex1

输入:head = [1,2,3,4,5]

输出:[5,4,3,2,1]

示例 2:

rev1ex2

输入:head = [1,2]

输出:[2,1]

示例 3:

输入:head = []

输出:[]

javascript
提示:
 
     链表中节点的数目范围是 [0, 5000]
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_206-\345\217\215\350\275\254\351\223\276\350\241\250.md.e71ab261.lean.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_206-\345\217\215\350\275\254\351\223\276\350\241\250.md.8ca2938b.lean.js"
similarity index 93%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_206-\345\217\215\350\275\254\351\223\276\350\241\250.md.e71ab261.lean.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_206-\345\217\215\350\275\254\351\223\276\350\241\250.md.8ca2938b.lean.js"
index 8c9dd4a8..ecf00cd8 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_206-\345\217\215\350\275\254\351\223\276\350\241\250.md.e71ab261.lean.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_206-\345\217\215\350\275\254\351\223\276\350\241\250.md.8ca2938b.lean.js"
@@ -1 +1 @@
-import{_ as o,c as e,a as s,b as n,d as l,e as p,o as t,r as c}from"./app.7354b8c5.js";const v=JSON.parse('{"title":"206-反转链表","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/206-反转链表.md"}'),r={name:"algorithm/LeetCode刷题/206-反转链表.md"},i=s("h1",{id:"_206-反转链表",tabindex:"-1"},[n("206-反转链表 "),s("a",{class:"header-anchor",href:"#_206-反转链表","aria-hidden":"true"},"#")],-1),y=p("",25);function F(d,D,C,A,u,f){const a=c("Badge");return t(),e("div",null,[i,s("p",null,[n("标签:"),l(a,{type:"tip",text:"递归"}),n(),l(a,{type:"tip",text:"链表"})]),y])}const g=o(r,[["render",F]]);export{v as __pageData,g as default};
+import{_ as o,c as e,a as s,b as n,d as l,e as p,o as t,r as c}from"./app.4a806fb4.js";const v=JSON.parse('{"title":"206-反转链表","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/206-反转链表.md"}'),r={name:"algorithm/LeetCode刷题/206-反转链表.md"},i=s("h1",{id:"_206-反转链表",tabindex:"-1"},[n("206-反转链表 "),s("a",{class:"header-anchor",href:"#_206-反转链表","aria-hidden":"true"},"#")],-1),y=p("",25);function F(d,D,C,A,u,f){const a=c("Badge");return t(),e("div",null,[i,s("p",null,[n("标签:"),l(a,{type:"tip",text:"递归"}),n(),l(a,{type:"tip",text:"链表"})]),y])}const g=o(r,[["render",F]]);export{v as __pageData,g as default};
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_209-\351\225\277\345\272\246\346\234\200\345\260\217\347\232\204\345\255\220\346\225\260\347\273\204.md.93baba0e.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_209-\351\225\277\345\272\246\346\234\200\345\260\217\347\232\204\345\255\220\346\225\260\347\273\204.md.9138822d.js"
similarity index 99%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_209-\351\225\277\345\272\246\346\234\200\345\260\217\347\232\204\345\255\220\346\225\260\347\273\204.md.93baba0e.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_209-\351\225\277\345\272\246\346\234\200\345\260\217\347\232\204\345\255\220\346\225\260\347\273\204.md.9138822d.js"
index 76d5da9c..59ea8f07 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_209-\351\225\277\345\272\246\346\234\200\345\260\217\347\232\204\345\255\220\346\225\260\347\273\204.md.93baba0e.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_209-\351\225\277\345\272\246\346\234\200\345\260\217\347\232\204\345\255\220\346\225\260\347\273\204.md.9138822d.js"
@@ -1,4 +1,4 @@
-import{_ as p,c as o,a as l,b as s,d as a,e as t,o as e,r as c}from"./app.7354b8c5.js";const h=JSON.parse('{"title":"209-长度最小的子数组","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/209-长度最小的子数组.md"}'),r={name:"algorithm/LeetCode刷题/209-长度最小的子数组.md"},y=l("h1",{id:"_209-长度最小的子数组",tabindex:"-1"},[s("209-长度最小的子数组 "),l("a",{class:"header-anchor",href:"#_209-长度最小的子数组","aria-hidden":"true"},"#")],-1),F=t(`

题目信息

题目地址209. 长度最小的子数组

题目内容:

javascript
给定一个含有n个正整数的数组和一个正整数target。
+import{_ as p,c as o,a as l,b as s,d as a,e as t,o as e,r as c}from"./app.4a806fb4.js";const h=JSON.parse('{"title":"209-长度最小的子数组","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/209-长度最小的子数组.md"}'),r={name:"algorithm/LeetCode刷题/209-长度最小的子数组.md"},y=l("h1",{id:"_209-长度最小的子数组",tabindex:"-1"},[s("209-长度最小的子数组 "),l("a",{class:"header-anchor",href:"#_209-长度最小的子数组","aria-hidden":"true"},"#")],-1),F=t(`

题目信息

题目地址209. 长度最小的子数组

题目内容:

javascript
给定一个含有n个正整数的数组和一个正整数target。
 
 找出该数组中满足其总和大于等于target的长度最小的连续子数组[numsl, numsl+1, ..., numsr-1, numsr],并返回其长度。如果不存在符合条件的子数组,返回0。
 
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_209-\351\225\277\345\272\246\346\234\200\345\260\217\347\232\204\345\255\220\346\225\260\347\273\204.md.93baba0e.lean.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_209-\351\225\277\345\272\246\346\234\200\345\260\217\347\232\204\345\255\220\346\225\260\347\273\204.md.9138822d.lean.js"
similarity index 94%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_209-\351\225\277\345\272\246\346\234\200\345\260\217\347\232\204\345\255\220\346\225\260\347\273\204.md.93baba0e.lean.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_209-\351\225\277\345\272\246\346\234\200\345\260\217\347\232\204\345\255\220\346\225\260\347\273\204.md.9138822d.lean.js"
index 05b6ad6f..3fd1f54c 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_209-\351\225\277\345\272\246\346\234\200\345\260\217\347\232\204\345\255\220\346\225\260\347\273\204.md.93baba0e.lean.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_209-\351\225\277\345\272\246\346\234\200\345\260\217\347\232\204\345\255\220\346\225\260\347\273\204.md.9138822d.lean.js"
@@ -1 +1 @@
-import{_ as p,c as o,a as l,b as s,d as a,e as t,o as e,r as c}from"./app.7354b8c5.js";const h=JSON.parse('{"title":"209-长度最小的子数组","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/209-长度最小的子数组.md"}'),r={name:"algorithm/LeetCode刷题/209-长度最小的子数组.md"},y=l("h1",{id:"_209-长度最小的子数组",tabindex:"-1"},[s("209-长度最小的子数组 "),l("a",{class:"header-anchor",href:"#_209-长度最小的子数组","aria-hidden":"true"},"#")],-1),F=t("",13);function D(C,i,A,d,m,f){const n=c("Badge");return e(),o("div",null,[y,l("p",null,[s("标签:"),a(n,{type:"tip",text:"数组"}),s(),a(n,{type:"tip",text:"二分查找"}),s(),a(n,{type:"tip",text:"前缀和"}),s(),a(n,{type:"tip",text:"滑动窗口"})]),F])}const u=p(r,[["render",D]]);export{h as __pageData,u as default};
+import{_ as p,c as o,a as l,b as s,d as a,e as t,o as e,r as c}from"./app.4a806fb4.js";const h=JSON.parse('{"title":"209-长度最小的子数组","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/209-长度最小的子数组.md"}'),r={name:"algorithm/LeetCode刷题/209-长度最小的子数组.md"},y=l("h1",{id:"_209-长度最小的子数组",tabindex:"-1"},[s("209-长度最小的子数组 "),l("a",{class:"header-anchor",href:"#_209-长度最小的子数组","aria-hidden":"true"},"#")],-1),F=t("",13);function D(C,i,A,d,m,f){const n=c("Badge");return e(),o("div",null,[y,l("p",null,[s("标签:"),a(n,{type:"tip",text:"数组"}),s(),a(n,{type:"tip",text:"二分查找"}),s(),a(n,{type:"tip",text:"前缀和"}),s(),a(n,{type:"tip",text:"滑动窗口"})]),F])}const u=p(r,[["render",D]]);export{h as __pageData,u as default};
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_24-\344\270\244\344\270\244\344\272\244\346\215\242\351\223\276\350\241\250\344\270\255\347\232\204\350\212\202\347\202\271.md.b4990bc4.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_24-\344\270\244\344\270\244\344\272\244\346\215\242\351\223\276\350\241\250\344\270\255\347\232\204\350\212\202\347\202\271.md.f5f907a1.js"
similarity index 99%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_24-\344\270\244\344\270\244\344\272\244\346\215\242\351\223\276\350\241\250\344\270\255\347\232\204\350\212\202\347\202\271.md.b4990bc4.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_24-\344\270\244\344\270\244\344\272\244\346\215\242\351\223\276\350\241\250\344\270\255\347\232\204\350\212\202\347\202\271.md.f5f907a1.js"
index 339fd550..b3276115 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_24-\344\270\244\344\270\244\344\272\244\346\215\242\351\223\276\350\241\250\344\270\255\347\232\204\350\212\202\347\202\271.md.b4990bc4.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_24-\344\270\244\344\270\244\344\272\244\346\215\242\351\223\276\350\241\250\344\270\255\347\232\204\350\212\202\347\202\271.md.f5f907a1.js"
@@ -1,4 +1,4 @@
-import{_ as p,c as o,a as s,b as n,d as l,e,o as t,r as c}from"./app.7354b8c5.js";const x=JSON.parse('{"title":"24-两两交换链表中的节点","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/24-两两交换链表中的节点.md"}'),r={name:"algorithm/LeetCode刷题/24-两两交换链表中的节点.md"},y=s("h1",{id:"_24-两两交换链表中的节点",tabindex:"-1"},[n("24-两两交换链表中的节点 "),s("a",{class:"header-anchor",href:"#_24-两两交换链表中的节点","aria-hidden":"true"},"#")],-1),F=e(`

题目信息

题目地址24. 两两交换链表中的节点

题目内容:

javascript
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
+import{_ as p,c as o,a as s,b as n,d as l,e,o as t,r as c}from"./app.4a806fb4.js";const x=JSON.parse('{"title":"24-两两交换链表中的节点","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/24-两两交换链表中的节点.md"}'),r={name:"algorithm/LeetCode刷题/24-两两交换链表中的节点.md"},y=s("h1",{id:"_24-两两交换链表中的节点",tabindex:"-1"},[n("24-两两交换链表中的节点 "),s("a",{class:"header-anchor",href:"#_24-两两交换链表中的节点","aria-hidden":"true"},"#")],-1),F=e(`

题目信息

题目地址24. 两两交换链表中的节点

题目内容:

javascript
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
 
 示例 1
     输入:head = [1,2,3,4]
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_24-\344\270\244\344\270\244\344\272\244\346\215\242\351\223\276\350\241\250\344\270\255\347\232\204\350\212\202\347\202\271.md.b4990bc4.lean.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_24-\344\270\244\344\270\244\344\272\244\346\215\242\351\223\276\350\241\250\344\270\255\347\232\204\350\212\202\347\202\271.md.f5f907a1.lean.js"
similarity index 94%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_24-\344\270\244\344\270\244\344\272\244\346\215\242\351\223\276\350\241\250\344\270\255\347\232\204\350\212\202\347\202\271.md.b4990bc4.lean.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_24-\344\270\244\344\270\244\344\272\244\346\215\242\351\223\276\350\241\250\344\270\255\347\232\204\350\212\202\347\202\271.md.f5f907a1.lean.js"
index 3be9d290..147b9c84 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_24-\344\270\244\344\270\244\344\272\244\346\215\242\351\223\276\350\241\250\344\270\255\347\232\204\350\212\202\347\202\271.md.b4990bc4.lean.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_24-\344\270\244\344\270\244\344\272\244\346\215\242\351\223\276\350\241\250\344\270\255\347\232\204\350\212\202\347\202\271.md.f5f907a1.lean.js"
@@ -1 +1 @@
-import{_ as p,c as o,a as s,b as n,d as l,e,o as t,r as c}from"./app.7354b8c5.js";const x=JSON.parse('{"title":"24-两两交换链表中的节点","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/24-两两交换链表中的节点.md"}'),r={name:"algorithm/LeetCode刷题/24-两两交换链表中的节点.md"},y=s("h1",{id:"_24-两两交换链表中的节点",tabindex:"-1"},[n("24-两两交换链表中的节点 "),s("a",{class:"header-anchor",href:"#_24-两两交换链表中的节点","aria-hidden":"true"},"#")],-1),F=e("",19);function D(i,C,A,d,u,f){const a=c("Badge");return t(),o("div",null,[y,s("p",null,[n("标签:"),l(a,{type:"tip",text:"递归"}),n(),l(a,{type:"tip",text:"链表"})]),F])}const m=p(r,[["render",D]]);export{x as __pageData,m as default};
+import{_ as p,c as o,a as s,b as n,d as l,e,o as t,r as c}from"./app.4a806fb4.js";const x=JSON.parse('{"title":"24-两两交换链表中的节点","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/24-两两交换链表中的节点.md"}'),r={name:"algorithm/LeetCode刷题/24-两两交换链表中的节点.md"},y=s("h1",{id:"_24-两两交换链表中的节点",tabindex:"-1"},[n("24-两两交换链表中的节点 "),s("a",{class:"header-anchor",href:"#_24-两两交换链表中的节点","aria-hidden":"true"},"#")],-1),F=e("",19);function D(i,C,A,d,u,f){const a=c("Badge");return t(),o("div",null,[y,s("p",null,[n("标签:"),l(a,{type:"tip",text:"递归"}),n(),l(a,{type:"tip",text:"链表"})]),F])}const m=p(r,[["render",D]]);export{x as __pageData,m as default};
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_242-\346\234\211\346\225\210\347\232\204\345\255\227\346\257\215\345\274\202\344\275\215\350\257\215.md.d4ccd114.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_242-\346\234\211\346\225\210\347\232\204\345\255\227\346\257\215\345\274\202\344\275\215\350\257\215.md.16723461.js"
similarity index 99%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_242-\346\234\211\346\225\210\347\232\204\345\255\227\346\257\215\345\274\202\344\275\215\350\257\215.md.d4ccd114.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_242-\346\234\211\346\225\210\347\232\204\345\255\227\346\257\215\345\274\202\344\275\215\350\257\215.md.16723461.js"
index 9e2da0e3..a3b076d5 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_242-\346\234\211\346\225\210\347\232\204\345\255\227\346\257\215\345\274\202\344\275\215\350\257\215.md.d4ccd114.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_242-\346\234\211\346\225\210\347\232\204\345\255\227\346\257\215\345\274\202\344\275\215\350\257\215.md.16723461.js"
@@ -1,4 +1,4 @@
-import{_ as o,c as p,a as l,b as s,d as a,e as t,o as e,r as c}from"./app.7354b8c5.js";const h=JSON.parse('{"title":"242-有效的字母异位词","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]},{"level":3,"title":"解法三","slug":"解法三","link":"#解法三","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/242-有效的字母异位词.md"}'),r={name:"algorithm/LeetCode刷题/242-有效的字母异位词.md"},y=l("h1",{id:"_242-有效的字母异位词",tabindex:"-1"},[s("242-有效的字母异位词 "),l("a",{class:"header-anchor",href:"#_242-有效的字母异位词","aria-hidden":"true"},"#")],-1),F=t(`

题目信息

题目地址242. 有效的字母异位词

题目内容:

javascript
给定两个字符串s和t,编写一个函数来判断t是否是s的字母异位词。
+import{_ as o,c as p,a as l,b as s,d as a,e as t,o as e,r as c}from"./app.4a806fb4.js";const h=JSON.parse('{"title":"242-有效的字母异位词","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]},{"level":3,"title":"解法三","slug":"解法三","link":"#解法三","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/242-有效的字母异位词.md"}'),r={name:"algorithm/LeetCode刷题/242-有效的字母异位词.md"},y=l("h1",{id:"_242-有效的字母异位词",tabindex:"-1"},[s("242-有效的字母异位词 "),l("a",{class:"header-anchor",href:"#_242-有效的字母异位词","aria-hidden":"true"},"#")],-1),F=t(`

题目信息

题目地址242. 有效的字母异位词

题目内容:

javascript
给定两个字符串s和t,编写一个函数来判断t是否是s的字母异位词。
 
 注意:若s和t中每个字符出现的次数都相同,则称s和t互为字母异位词。
 
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_242-\346\234\211\346\225\210\347\232\204\345\255\227\346\257\215\345\274\202\344\275\215\350\257\215.md.d4ccd114.lean.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_242-\346\234\211\346\225\210\347\232\204\345\255\227\346\257\215\345\274\202\344\275\215\350\257\215.md.16723461.lean.js"
similarity index 94%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_242-\346\234\211\346\225\210\347\232\204\345\255\227\346\257\215\345\274\202\344\275\215\350\257\215.md.d4ccd114.lean.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_242-\346\234\211\346\225\210\347\232\204\345\255\227\346\257\215\345\274\202\344\275\215\350\257\215.md.16723461.lean.js"
index 75e0f11c..b771df72 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_242-\346\234\211\346\225\210\347\232\204\345\255\227\346\257\215\345\274\202\344\275\215\350\257\215.md.d4ccd114.lean.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_242-\346\234\211\346\225\210\347\232\204\345\255\227\346\257\215\345\274\202\344\275\215\350\257\215.md.16723461.lean.js"
@@ -1 +1 @@
-import{_ as o,c as p,a as l,b as s,d as a,e as t,o as e,r as c}from"./app.7354b8c5.js";const h=JSON.parse('{"title":"242-有效的字母异位词","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]},{"level":3,"title":"解法三","slug":"解法三","link":"#解法三","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/242-有效的字母异位词.md"}'),r={name:"algorithm/LeetCode刷题/242-有效的字母异位词.md"},y=l("h1",{id:"_242-有效的字母异位词",tabindex:"-1"},[s("242-有效的字母异位词 "),l("a",{class:"header-anchor",href:"#_242-有效的字母异位词","aria-hidden":"true"},"#")],-1),F=t("",18);function D(i,C,A,f,u,d){const n=c("Badge");return e(),p("div",null,[y,l("p",null,[s("标签:"),a(n,{type:"tip",text:"哈希表"}),s(),a(n,{type:"tip",text:"字符串"}),s(),a(n,{type:"tip",text:"排序"})]),F])}const g=o(r,[["render",D]]);export{h as __pageData,g as default};
+import{_ as o,c as p,a as l,b as s,d as a,e as t,o as e,r as c}from"./app.4a806fb4.js";const h=JSON.parse('{"title":"242-有效的字母异位词","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]},{"level":3,"title":"解法三","slug":"解法三","link":"#解法三","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/242-有效的字母异位词.md"}'),r={name:"algorithm/LeetCode刷题/242-有效的字母异位词.md"},y=l("h1",{id:"_242-有效的字母异位词",tabindex:"-1"},[s("242-有效的字母异位词 "),l("a",{class:"header-anchor",href:"#_242-有效的字母异位词","aria-hidden":"true"},"#")],-1),F=t("",18);function D(i,C,A,f,u,d){const n=c("Badge");return e(),p("div",null,[y,l("p",null,[s("标签:"),a(n,{type:"tip",text:"哈希表"}),s(),a(n,{type:"tip",text:"字符串"}),s(),a(n,{type:"tip",text:"排序"})]),F])}const g=o(r,[["render",D]]);export{h as __pageData,g as default};
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_26-\345\210\240\351\231\244\346\234\211\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\351\207\215\345\244\215\351\241\271.md.d980da74.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_26-\345\210\240\351\231\244\346\234\211\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\351\207\215\345\244\215\351\241\271.md.299438fb.js"
similarity index 99%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_26-\345\210\240\351\231\244\346\234\211\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\351\207\215\345\244\215\351\241\271.md.d980da74.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_26-\345\210\240\351\231\244\346\234\211\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\351\207\215\345\244\215\351\241\271.md.299438fb.js"
index c4998b56..476bbc87 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_26-\345\210\240\351\231\244\346\234\211\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\351\207\215\345\244\215\351\241\271.md.d980da74.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_26-\345\210\240\351\231\244\346\234\211\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\351\207\215\345\244\215\351\241\271.md.299438fb.js"
@@ -1,4 +1,4 @@
-import{_ as p,c as o,a as s,b as n,d as l,e,o as t,r as c}from"./app.7354b8c5.js";const h=JSON.parse('{"title":"26-删除有序数组中的重复项","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/26-删除有序数组中的重复项.md"}'),r={name:"algorithm/LeetCode刷题/26-删除有序数组中的重复项.md"},y=s("h1",{id:"_26-删除有序数组中的重复项",tabindex:"-1"},[n("26-删除有序数组中的重复项 "),s("a",{class:"header-anchor",href:"#_26-删除有序数组中的重复项","aria-hidden":"true"},"#")],-1),F=e(`

题目信息

题目地址删除有序数组中的重复项

题目内容:

javascript
给你一个非严格递增排列的数组nums
+import{_ as p,c as o,a as s,b as n,d as l,e,o as t,r as c}from"./app.4a806fb4.js";const h=JSON.parse('{"title":"26-删除有序数组中的重复项","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/26-删除有序数组中的重复项.md"}'),r={name:"algorithm/LeetCode刷题/26-删除有序数组中的重复项.md"},y=s("h1",{id:"_26-删除有序数组中的重复项",tabindex:"-1"},[n("26-删除有序数组中的重复项 "),s("a",{class:"header-anchor",href:"#_26-删除有序数组中的重复项","aria-hidden":"true"},"#")],-1),F=e(`

题目信息

题目地址删除有序数组中的重复项

题目内容:

javascript
给你一个非严格递增排列的数组nums
 
 请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。
 
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_26-\345\210\240\351\231\244\346\234\211\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\351\207\215\345\244\215\351\241\271.md.d980da74.lean.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_26-\345\210\240\351\231\244\346\234\211\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\351\207\215\345\244\215\351\241\271.md.299438fb.lean.js"
similarity index 94%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_26-\345\210\240\351\231\244\346\234\211\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\351\207\215\345\244\215\351\241\271.md.d980da74.lean.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_26-\345\210\240\351\231\244\346\234\211\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\351\207\215\345\244\215\351\241\271.md.299438fb.lean.js"
index ec4225f3..3dc8e4f7 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_26-\345\210\240\351\231\244\346\234\211\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\351\207\215\345\244\215\351\241\271.md.d980da74.lean.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_26-\345\210\240\351\231\244\346\234\211\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\351\207\215\345\244\215\351\241\271.md.299438fb.lean.js"
@@ -1 +1 @@
-import{_ as p,c as o,a as s,b as n,d as l,e,o as t,r as c}from"./app.7354b8c5.js";const h=JSON.parse('{"title":"26-删除有序数组中的重复项","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/26-删除有序数组中的重复项.md"}'),r={name:"algorithm/LeetCode刷题/26-删除有序数组中的重复项.md"},y=s("h1",{id:"_26-删除有序数组中的重复项",tabindex:"-1"},[n("26-删除有序数组中的重复项 "),s("a",{class:"header-anchor",href:"#_26-删除有序数组中的重复项","aria-hidden":"true"},"#")],-1),F=e("",10);function C(D,i,A,d,u,f){const a=c("Badge");return t(),o("div",null,[y,s("p",null,[n("标签:"),l(a,{type:"tip",text:"数组"}),n(),l(a,{type:"tip",text:"双指针"})]),F])}const m=p(r,[["render",C]]);export{h as __pageData,m as default};
+import{_ as p,c as o,a as s,b as n,d as l,e,o as t,r as c}from"./app.4a806fb4.js";const h=JSON.parse('{"title":"26-删除有序数组中的重复项","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/26-删除有序数组中的重复项.md"}'),r={name:"algorithm/LeetCode刷题/26-删除有序数组中的重复项.md"},y=s("h1",{id:"_26-删除有序数组中的重复项",tabindex:"-1"},[n("26-删除有序数组中的重复项 "),s("a",{class:"header-anchor",href:"#_26-删除有序数组中的重复项","aria-hidden":"true"},"#")],-1),F=e("",10);function C(D,i,A,d,u,f){const a=c("Badge");return t(),o("div",null,[y,s("p",null,[n("标签:"),l(a,{type:"tip",text:"数组"}),n(),l(a,{type:"tip",text:"双指针"})]),F])}const m=p(r,[["render",C]]);export{h as __pageData,m as default};
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_27-\347\247\273\351\231\244\345\205\203\347\264\240.md.6d23ade8.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_27-\347\247\273\351\231\244\345\205\203\347\264\240.md.9db196ba.js"
similarity index 99%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_27-\347\247\273\351\231\244\345\205\203\347\264\240.md.6d23ade8.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_27-\347\247\273\351\231\244\345\205\203\347\264\240.md.9db196ba.js"
index 4a39eaf2..14044066 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_27-\347\247\273\351\231\244\345\205\203\347\264\240.md.6d23ade8.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_27-\347\247\273\351\231\244\345\205\203\347\264\240.md.9db196ba.js"
@@ -1,4 +1,4 @@
-import{_ as o,c as p,a as s,b as n,d as l,e as t,o as e,r as c}from"./app.7354b8c5.js";const h=JSON.parse('{"title":"27-移除元素","description":"","frontmatter":{"0":"l","1":"a","2":"y","3":"o","4":"u","5":"t","6":":","7":"d","8":"o","9":"c"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]},{"level":3,"title":"解法三","slug":"解法三","link":"#解法三","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/27-移除元素.md"}'),r={name:"algorithm/LeetCode刷题/27-移除元素.md"},y=s("h1",{id:"_27-移除元素",tabindex:"-1"},[n("27-移除元素 "),s("a",{class:"header-anchor",href:"#_27-移除元素","aria-hidden":"true"},"#")],-1),F=t(`

题目信息

题目地址移除元素

题目内容:

javascript
给你一个数组nums和一个值val,你需要原地移除所有数值等于val的元素,并返回移除后数组的新长度。
+import{_ as o,c as p,a as s,b as n,d as l,e as t,o as e,r as c}from"./app.4a806fb4.js";const h=JSON.parse('{"title":"27-移除元素","description":"","frontmatter":{"0":"l","1":"a","2":"y","3":"o","4":"u","5":"t","6":":","7":"d","8":"o","9":"c"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]},{"level":3,"title":"解法三","slug":"解法三","link":"#解法三","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/27-移除元素.md"}'),r={name:"algorithm/LeetCode刷题/27-移除元素.md"},y=s("h1",{id:"_27-移除元素",tabindex:"-1"},[n("27-移除元素 "),s("a",{class:"header-anchor",href:"#_27-移除元素","aria-hidden":"true"},"#")],-1),F=t(`

题目信息

题目地址移除元素

题目内容:

javascript
给你一个数组nums和一个值val,你需要原地移除所有数值等于val的元素,并返回移除后数组的新长度。
 
 不要使用额外的数组空间,你必须仅使用O(1)额外空间并原地修改输入数组。
 
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_27-\347\247\273\351\231\244\345\205\203\347\264\240.md.6d23ade8.lean.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_27-\347\247\273\351\231\244\345\205\203\347\264\240.md.9db196ba.lean.js"
similarity index 94%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_27-\347\247\273\351\231\244\345\205\203\347\264\240.md.6d23ade8.lean.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_27-\347\247\273\351\231\244\345\205\203\347\264\240.md.9db196ba.lean.js"
index c22dcace..7f69b1fe 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_27-\347\247\273\351\231\244\345\205\203\347\264\240.md.6d23ade8.lean.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_27-\347\247\273\351\231\244\345\205\203\347\264\240.md.9db196ba.lean.js"
@@ -1 +1 @@
-import{_ as o,c as p,a as s,b as n,d as l,e as t,o as e,r as c}from"./app.7354b8c5.js";const h=JSON.parse('{"title":"27-移除元素","description":"","frontmatter":{"0":"l","1":"a","2":"y","3":"o","4":"u","5":"t","6":":","7":"d","8":"o","9":"c"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]},{"level":3,"title":"解法三","slug":"解法三","link":"#解法三","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/27-移除元素.md"}'),r={name:"algorithm/LeetCode刷题/27-移除元素.md"},y=s("h1",{id:"_27-移除元素",tabindex:"-1"},[n("27-移除元素 "),s("a",{class:"header-anchor",href:"#_27-移除元素","aria-hidden":"true"},"#")],-1),F=t("",20);function i(D,C,A,d,f,u){const a=c("Badge");return e(),p("div",null,[y,s("p",null,[n("标签:"),l(a,{type:"tip",text:"数组"}),n(),l(a,{type:"tip",text:"双指针"})]),F])}const E=o(r,[["render",i]]);export{h as __pageData,E as default};
+import{_ as o,c as p,a as s,b as n,d as l,e as t,o as e,r as c}from"./app.4a806fb4.js";const h=JSON.parse('{"title":"27-移除元素","description":"","frontmatter":{"0":"l","1":"a","2":"y","3":"o","4":"u","5":"t","6":":","7":"d","8":"o","9":"c"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]},{"level":3,"title":"解法三","slug":"解法三","link":"#解法三","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/27-移除元素.md"}'),r={name:"algorithm/LeetCode刷题/27-移除元素.md"},y=s("h1",{id:"_27-移除元素",tabindex:"-1"},[n("27-移除元素 "),s("a",{class:"header-anchor",href:"#_27-移除元素","aria-hidden":"true"},"#")],-1),F=t("",20);function i(D,C,A,d,f,u){const a=c("Badge");return e(),p("div",null,[y,s("p",null,[n("标签:"),l(a,{type:"tip",text:"数组"}),n(),l(a,{type:"tip",text:"双指针"})]),F])}const E=o(r,[["render",i]]);export{h as __pageData,E as default};
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_28-\346\211\276\345\207\272\345\255\227\347\254\246\344\270\262\344\270\255\347\254\254\344\270\200\344\270\252\345\214\271\351\205\215\351\241\271\347\232\204\344\270\213\346\240\207.md.72572c74.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_28-\346\211\276\345\207\272\345\255\227\347\254\246\344\270\262\344\270\255\347\254\254\344\270\200\344\270\252\345\214\271\351\205\215\351\241\271\347\232\204\344\270\213\346\240\207.md.3e05948e.js"
similarity index 99%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_28-\346\211\276\345\207\272\345\255\227\347\254\246\344\270\262\344\270\255\347\254\254\344\270\200\344\270\252\345\214\271\351\205\215\351\241\271\347\232\204\344\270\213\346\240\207.md.72572c74.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_28-\346\211\276\345\207\272\345\255\227\347\254\246\344\270\262\344\270\255\347\254\254\344\270\200\344\270\252\345\214\271\351\205\215\351\241\271\347\232\204\344\270\213\346\240\207.md.3e05948e.js"
index 1b77f83e..c36f81fc 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_28-\346\211\276\345\207\272\345\255\227\347\254\246\344\270\262\344\270\255\347\254\254\344\270\200\344\270\252\345\214\271\351\205\215\351\241\271\347\232\204\344\270\213\346\240\207.md.72572c74.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_28-\346\211\276\345\207\272\345\255\227\347\254\246\344\270\262\344\270\255\347\254\254\344\270\200\344\270\252\345\214\271\351\205\215\351\241\271\347\232\204\344\270\213\346\240\207.md.3e05948e.js"
@@ -1,4 +1,4 @@
-import{_ as o,c as p,a as l,b as s,d as a,e as t,o as e,r as c}from"./app.7354b8c5.js";const _=JSON.parse('{"title":"28-找出字符串中第一个匹配项的下标","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/28-找出字符串中第一个匹配项的下标.md"}'),r={name:"algorithm/LeetCode刷题/28-找出字符串中第一个匹配项的下标.md"},y=l("h1",{id:"_28-找出字符串中第一个匹配项的下标",tabindex:"-1"},[s("28-找出字符串中第一个匹配项的下标 "),l("a",{class:"header-anchor",href:"#_28-找出字符串中第一个匹配项的下标","aria-hidden":"true"},"#")],-1),i=t(`

题目信息

题目地址找出字符串中第一个匹配项的下标

题目内容:

javascript
给你两个字符串haystack和needle
+import{_ as o,c as p,a as l,b as s,d as a,e as t,o as e,r as c}from"./app.4a806fb4.js";const _=JSON.parse('{"title":"28-找出字符串中第一个匹配项的下标","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/28-找出字符串中第一个匹配项的下标.md"}'),r={name:"algorithm/LeetCode刷题/28-找出字符串中第一个匹配项的下标.md"},y=l("h1",{id:"_28-找出字符串中第一个匹配项的下标",tabindex:"-1"},[s("28-找出字符串中第一个匹配项的下标 "),l("a",{class:"header-anchor",href:"#_28-找出字符串中第一个匹配项的下标","aria-hidden":"true"},"#")],-1),i=t(`

题目信息

题目地址找出字符串中第一个匹配项的下标

题目内容:

javascript
给你两个字符串haystack和needle
 
 请你在haystack字符串中找出needle字符串的第一个匹配项的下标(下标从0开始)。
 
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_28-\346\211\276\345\207\272\345\255\227\347\254\246\344\270\262\344\270\255\347\254\254\344\270\200\344\270\252\345\214\271\351\205\215\351\241\271\347\232\204\344\270\213\346\240\207.md.72572c74.lean.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_28-\346\211\276\345\207\272\345\255\227\347\254\246\344\270\262\344\270\255\347\254\254\344\270\200\344\270\252\345\214\271\351\205\215\351\241\271\347\232\204\344\270\213\346\240\207.md.3e05948e.lean.js"
similarity index 95%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_28-\346\211\276\345\207\272\345\255\227\347\254\246\344\270\262\344\270\255\347\254\254\344\270\200\344\270\252\345\214\271\351\205\215\351\241\271\347\232\204\344\270\213\346\240\207.md.72572c74.lean.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_28-\346\211\276\345\207\272\345\255\227\347\254\246\344\270\262\344\270\255\347\254\254\344\270\200\344\270\252\345\214\271\351\205\215\351\241\271\347\232\204\344\270\213\346\240\207.md.3e05948e.lean.js"
index e8647578..aa8d676b 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_28-\346\211\276\345\207\272\345\255\227\347\254\246\344\270\262\344\270\255\347\254\254\344\270\200\344\270\252\345\214\271\351\205\215\351\241\271\347\232\204\344\270\213\346\240\207.md.72572c74.lean.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_28-\346\211\276\345\207\272\345\255\227\347\254\246\344\270\262\344\270\255\347\254\254\344\270\200\344\270\252\345\214\271\351\205\215\351\241\271\347\232\204\344\270\213\346\240\207.md.3e05948e.lean.js"
@@ -1 +1 @@
-import{_ as o,c as p,a as l,b as s,d as a,e as t,o as e,r as c}from"./app.7354b8c5.js";const _=JSON.parse('{"title":"28-找出字符串中第一个匹配项的下标","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/28-找出字符串中第一个匹配项的下标.md"}'),r={name:"algorithm/LeetCode刷题/28-找出字符串中第一个匹配项的下标.md"},y=l("h1",{id:"_28-找出字符串中第一个匹配项的下标",tabindex:"-1"},[s("28-找出字符串中第一个匹配项的下标 "),l("a",{class:"header-anchor",href:"#_28-找出字符串中第一个匹配项的下标","aria-hidden":"true"},"#")],-1),i=t("",15);function F(D,C,A,d,f,h){const n=c("Badge");return e(),p("div",null,[y,l("p",null,[s("标签:"),a(n,{type:"tip",text:"双指针"}),s(),a(n,{type:"tip",text:"字符串"}),s(),a(n,{type:"tip",text:"字符串匹配"})]),i])}const g=o(r,[["render",F]]);export{_ as __pageData,g as default};
+import{_ as o,c as p,a as l,b as s,d as a,e as t,o as e,r as c}from"./app.4a806fb4.js";const _=JSON.parse('{"title":"28-找出字符串中第一个匹配项的下标","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/28-找出字符串中第一个匹配项的下标.md"}'),r={name:"algorithm/LeetCode刷题/28-找出字符串中第一个匹配项的下标.md"},y=l("h1",{id:"_28-找出字符串中第一个匹配项的下标",tabindex:"-1"},[s("28-找出字符串中第一个匹配项的下标 "),l("a",{class:"header-anchor",href:"#_28-找出字符串中第一个匹配项的下标","aria-hidden":"true"},"#")],-1),i=t("",15);function F(D,C,A,d,f,h){const n=c("Badge");return e(),p("div",null,[y,l("p",null,[s("标签:"),a(n,{type:"tip",text:"双指针"}),s(),a(n,{type:"tip",text:"字符串"}),s(),a(n,{type:"tip",text:"字符串匹配"})]),i])}const g=o(r,[["render",F]]);export{_ as __pageData,g as default};
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_3-\346\227\240\351\207\215\345\244\215\345\255\227\347\254\246\347\232\204\346\234\200\351\225\277\345\255\220\344\270\262.md.5a87c5d7.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_3-\346\227\240\351\207\215\345\244\215\345\255\227\347\254\246\347\232\204\346\234\200\351\225\277\345\255\220\344\270\262.md.108630a8.js"
similarity index 99%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_3-\346\227\240\351\207\215\345\244\215\345\255\227\347\254\246\347\232\204\346\234\200\351\225\277\345\255\220\344\270\262.md.5a87c5d7.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_3-\346\227\240\351\207\215\345\244\215\345\255\227\347\254\246\347\232\204\346\234\200\351\225\277\345\255\220\344\270\262.md.108630a8.js"
index 6ee6ee01..50bc9117 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_3-\346\227\240\351\207\215\345\244\215\345\255\227\347\254\246\347\232\204\346\234\200\351\225\277\345\255\220\344\270\262.md.5a87c5d7.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_3-\346\227\240\351\207\215\345\244\215\345\255\227\347\254\246\347\232\204\346\234\200\351\225\277\345\255\220\344\270\262.md.108630a8.js"
@@ -1,4 +1,4 @@
-import{_ as p,c as o,a as l,b as s,d as a,e as t,o as e,r as c}from"./app.7354b8c5.js";const g=JSON.parse('{"title":"3-无重复字符的最长子串","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/3-无重复字符的最长子串.md"}'),r={name:"algorithm/LeetCode刷题/3-无重复字符的最长子串.md"},y=l("h1",{id:"_3-无重复字符的最长子串",tabindex:"-1"},[s("3-无重复字符的最长子串 "),l("a",{class:"header-anchor",href:"#_3-无重复字符的最长子串","aria-hidden":"true"},"#")],-1),F=t(`

题目信息

题目地址无重复字符的最长子串

题目内容:

javascript
给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。
+import{_ as p,c as o,a as l,b as s,d as a,e as t,o as e,r as c}from"./app.4a806fb4.js";const g=JSON.parse('{"title":"3-无重复字符的最长子串","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/3-无重复字符的最长子串.md"}'),r={name:"algorithm/LeetCode刷题/3-无重复字符的最长子串.md"},y=l("h1",{id:"_3-无重复字符的最长子串",tabindex:"-1"},[s("3-无重复字符的最长子串 "),l("a",{class:"header-anchor",href:"#_3-无重复字符的最长子串","aria-hidden":"true"},"#")],-1),F=t(`

题目信息

题目地址无重复字符的最长子串

题目内容:

javascript
给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。
 
 示例 1:
   输入: s = "abcabcbb"
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_3-\346\227\240\351\207\215\345\244\215\345\255\227\347\254\246\347\232\204\346\234\200\351\225\277\345\255\220\344\270\262.md.5a87c5d7.lean.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_3-\346\227\240\351\207\215\345\244\215\345\255\227\347\254\246\347\232\204\346\234\200\351\225\277\345\255\220\344\270\262.md.108630a8.lean.js"
similarity index 94%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_3-\346\227\240\351\207\215\345\244\215\345\255\227\347\254\246\347\232\204\346\234\200\351\225\277\345\255\220\344\270\262.md.5a87c5d7.lean.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_3-\346\227\240\351\207\215\345\244\215\345\255\227\347\254\246\347\232\204\346\234\200\351\225\277\345\255\220\344\270\262.md.108630a8.lean.js"
index 40cb5045..0d6618c9 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_3-\346\227\240\351\207\215\345\244\215\345\255\227\347\254\246\347\232\204\346\234\200\351\225\277\345\255\220\344\270\262.md.5a87c5d7.lean.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_3-\346\227\240\351\207\215\345\244\215\345\255\227\347\254\246\347\232\204\346\234\200\351\225\277\345\255\220\344\270\262.md.108630a8.lean.js"
@@ -1 +1 @@
-import{_ as p,c as o,a as l,b as s,d as a,e as t,o as e,r as c}from"./app.7354b8c5.js";const g=JSON.parse('{"title":"3-无重复字符的最长子串","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/3-无重复字符的最长子串.md"}'),r={name:"algorithm/LeetCode刷题/3-无重复字符的最长子串.md"},y=l("h1",{id:"_3-无重复字符的最长子串",tabindex:"-1"},[s("3-无重复字符的最长子串 "),l("a",{class:"header-anchor",href:"#_3-无重复字符的最长子串","aria-hidden":"true"},"#")],-1),F=t("",19);function D(C,i,A,d,f,u){const n=c("Badge");return e(),o("div",null,[y,l("p",null,[s("标签:"),a(n,{type:"tip",text:"哈希表"}),s(),a(n,{type:"tip",text:"字符串"}),s(),a(n,{type:"tip",text:"滑动窗口"})]),F])}const E=p(r,[["render",D]]);export{g as __pageData,E as default};
+import{_ as p,c as o,a as l,b as s,d as a,e as t,o as e,r as c}from"./app.4a806fb4.js";const g=JSON.parse('{"title":"3-无重复字符的最长子串","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/3-无重复字符的最长子串.md"}'),r={name:"algorithm/LeetCode刷题/3-无重复字符的最长子串.md"},y=l("h1",{id:"_3-无重复字符的最长子串",tabindex:"-1"},[s("3-无重复字符的最长子串 "),l("a",{class:"header-anchor",href:"#_3-无重复字符的最长子串","aria-hidden":"true"},"#")],-1),F=t("",19);function D(C,i,A,d,f,u){const n=c("Badge");return e(),o("div",null,[y,l("p",null,[s("标签:"),a(n,{type:"tip",text:"哈希表"}),s(),a(n,{type:"tip",text:"字符串"}),s(),a(n,{type:"tip",text:"滑动窗口"})]),F])}const E=p(r,[["render",D]]);export{g as __pageData,E as default};
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_344-\345\217\215\350\275\254\345\255\227\347\254\246\344\270\262.md.d2e9aaea.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_344-\345\217\215\350\275\254\345\255\227\347\254\246\344\270\262.md.1fe55d7e.js"
similarity index 99%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_344-\345\217\215\350\275\254\345\255\227\347\254\246\344\270\262.md.d2e9aaea.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_344-\345\217\215\350\275\254\345\255\227\347\254\246\344\270\262.md.1fe55d7e.js"
index 724ebf0d..c625bd91 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_344-\345\217\215\350\275\254\345\255\227\347\254\246\344\270\262.md.d2e9aaea.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_344-\345\217\215\350\275\254\345\255\227\347\254\246\344\270\262.md.1fe55d7e.js"
@@ -1,4 +1,4 @@
-import{_ as o,c as p,a as s,b as n,d as l,e as t,o as e,r as c}from"./app.7354b8c5.js";const E=JSON.parse('{"title":"344-反转字符串","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/344-反转字符串.md"}'),r={name:"algorithm/LeetCode刷题/344-反转字符串.md"},y=s("h1",{id:"_344-反转字符串",tabindex:"-1"},[n("344-反转字符串 "),s("a",{class:"header-anchor",href:"#_344-反转字符串","aria-hidden":"true"},"#")],-1),F=t(`

题目信息

题目地址344. 反转字符串

题目内容:

javascript
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组s的形式给出。
+import{_ as o,c as p,a as s,b as n,d as l,e as t,o as e,r as c}from"./app.4a806fb4.js";const E=JSON.parse('{"title":"344-反转字符串","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/344-反转字符串.md"}'),r={name:"algorithm/LeetCode刷题/344-反转字符串.md"},y=s("h1",{id:"_344-反转字符串",tabindex:"-1"},[n("344-反转字符串 "),s("a",{class:"header-anchor",href:"#_344-反转字符串","aria-hidden":"true"},"#")],-1),F=t(`

题目信息

题目地址344. 反转字符串

题目内容:

javascript
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组s的形式给出。
 
 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
 
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_344-\345\217\215\350\275\254\345\255\227\347\254\246\344\270\262.md.d2e9aaea.lean.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_344-\345\217\215\350\275\254\345\255\227\347\254\246\344\270\262.md.1fe55d7e.lean.js"
similarity index 93%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_344-\345\217\215\350\275\254\345\255\227\347\254\246\344\270\262.md.d2e9aaea.lean.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_344-\345\217\215\350\275\254\345\255\227\347\254\246\344\270\262.md.1fe55d7e.lean.js"
index 76ff0f6e..35b765c0 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_344-\345\217\215\350\275\254\345\255\227\347\254\246\344\270\262.md.d2e9aaea.lean.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_344-\345\217\215\350\275\254\345\255\227\347\254\246\344\270\262.md.1fe55d7e.lean.js"
@@ -1 +1 @@
-import{_ as o,c as p,a as s,b as n,d as l,e as t,o as e,r as c}from"./app.7354b8c5.js";const E=JSON.parse('{"title":"344-反转字符串","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/344-反转字符串.md"}'),r={name:"algorithm/LeetCode刷题/344-反转字符串.md"},y=s("h1",{id:"_344-反转字符串",tabindex:"-1"},[n("344-反转字符串 "),s("a",{class:"header-anchor",href:"#_344-反转字符串","aria-hidden":"true"},"#")],-1),F=t("",12);function D(i,C,A,d,f,u){const a=c("Badge");return e(),p("div",null,[y,s("p",null,[n("标签:"),l(a,{type:"tip",text:"字符串"}),n(),l(a,{type:"tip",text:"双指针"})]),F])}const g=o(r,[["render",D]]);export{E as __pageData,g as default};
+import{_ as o,c as p,a as s,b as n,d as l,e as t,o as e,r as c}from"./app.4a806fb4.js";const E=JSON.parse('{"title":"344-反转字符串","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/344-反转字符串.md"}'),r={name:"algorithm/LeetCode刷题/344-反转字符串.md"},y=s("h1",{id:"_344-反转字符串",tabindex:"-1"},[n("344-反转字符串 "),s("a",{class:"header-anchor",href:"#_344-反转字符串","aria-hidden":"true"},"#")],-1),F=t("",12);function D(i,C,A,d,f,u){const a=c("Badge");return e(),p("div",null,[y,s("p",null,[n("标签:"),l(a,{type:"tip",text:"字符串"}),n(),l(a,{type:"tip",text:"双指针"})]),F])}const g=o(r,[["render",D]]);export{E as __pageData,g as default};
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_349-\344\270\244\344\270\252\346\225\260\347\273\204\347\232\204\344\272\244\351\233\206.md.63b22dc9.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_349-\344\270\244\344\270\252\346\225\260\347\273\204\347\232\204\344\272\244\351\233\206.md.029e4730.js"
similarity index 99%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_349-\344\270\244\344\270\252\346\225\260\347\273\204\347\232\204\344\272\244\351\233\206.md.63b22dc9.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_349-\344\270\244\344\270\252\346\225\260\347\273\204\347\232\204\344\272\244\351\233\206.md.029e4730.js"
index 9953b3b3..c9da5149 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_349-\344\270\244\344\270\252\346\225\260\347\273\204\347\232\204\344\272\244\351\233\206.md.63b22dc9.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_349-\344\270\244\344\270\252\346\225\260\347\273\204\347\232\204\344\272\244\351\233\206.md.029e4730.js"
@@ -1,4 +1,4 @@
-import{_ as p,c as o,a as l,b as s,d as a,e as t,o as e,r as c}from"./app.7354b8c5.js";const h=JSON.parse('{"title":"349-两个数组的交集","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/349-两个数组的交集.md"}'),r={name:"algorithm/LeetCode刷题/349-两个数组的交集.md"},y=l("h1",{id:"_349-两个数组的交集",tabindex:"-1"},[s("349-两个数组的交集 "),l("a",{class:"header-anchor",href:"#_349-两个数组的交集","aria-hidden":"true"},"#")],-1),F=t(`

题目信息

题目地址349. 两个数组的交集

题目内容:

javascript
给定两个数组nums1和nums2,返回它们的交集。
+import{_ as p,c as o,a as l,b as s,d as a,e as t,o as e,r as c}from"./app.4a806fb4.js";const h=JSON.parse('{"title":"349-两个数组的交集","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/349-两个数组的交集.md"}'),r={name:"algorithm/LeetCode刷题/349-两个数组的交集.md"},y=l("h1",{id:"_349-两个数组的交集",tabindex:"-1"},[s("349-两个数组的交集 "),l("a",{class:"header-anchor",href:"#_349-两个数组的交集","aria-hidden":"true"},"#")],-1),F=t(`

题目信息

题目地址349. 两个数组的交集

题目内容:

javascript
给定两个数组nums1和nums2,返回它们的交集。
 
 输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序 。
 
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_349-\344\270\244\344\270\252\346\225\260\347\273\204\347\232\204\344\272\244\351\233\206.md.63b22dc9.lean.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_349-\344\270\244\344\270\252\346\225\260\347\273\204\347\232\204\344\272\244\351\233\206.md.029e4730.lean.js"
similarity index 94%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_349-\344\270\244\344\270\252\346\225\260\347\273\204\347\232\204\344\272\244\351\233\206.md.63b22dc9.lean.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_349-\344\270\244\344\270\252\346\225\260\347\273\204\347\232\204\344\272\244\351\233\206.md.029e4730.lean.js"
index 24359ad8..b15cc15b 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_349-\344\270\244\344\270\252\346\225\260\347\273\204\347\232\204\344\272\244\351\233\206.md.63b22dc9.lean.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_349-\344\270\244\344\270\252\346\225\260\347\273\204\347\232\204\344\272\244\351\233\206.md.029e4730.lean.js"
@@ -1 +1 @@
-import{_ as p,c as o,a as l,b as s,d as a,e as t,o as e,r as c}from"./app.7354b8c5.js";const h=JSON.parse('{"title":"349-两个数组的交集","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/349-两个数组的交集.md"}'),r={name:"algorithm/LeetCode刷题/349-两个数组的交集.md"},y=l("h1",{id:"_349-两个数组的交集",tabindex:"-1"},[s("349-两个数组的交集 "),l("a",{class:"header-anchor",href:"#_349-两个数组的交集","aria-hidden":"true"},"#")],-1),F=t("",15);function i(D,C,A,d,f,m){const n=c("Badge");return e(),o("div",null,[y,l("p",null,[s("标签:"),a(n,{type:"tip",text:"数组"}),s(),a(n,{type:"tip",text:"哈希表"}),s(),a(n,{type:"tip",text:"双指针"}),s(),a(n,{type:"tip",text:"二分查找"}),s(),a(n,{type:"tip",text:"排序"})]),F])}const E=p(r,[["render",i]]);export{h as __pageData,E as default};
+import{_ as p,c as o,a as l,b as s,d as a,e as t,o as e,r as c}from"./app.4a806fb4.js";const h=JSON.parse('{"title":"349-两个数组的交集","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/349-两个数组的交集.md"}'),r={name:"algorithm/LeetCode刷题/349-两个数组的交集.md"},y=l("h1",{id:"_349-两个数组的交集",tabindex:"-1"},[s("349-两个数组的交集 "),l("a",{class:"header-anchor",href:"#_349-两个数组的交集","aria-hidden":"true"},"#")],-1),F=t("",15);function i(D,C,A,d,f,m){const n=c("Badge");return e(),o("div",null,[y,l("p",null,[s("标签:"),a(n,{type:"tip",text:"数组"}),s(),a(n,{type:"tip",text:"哈希表"}),s(),a(n,{type:"tip",text:"双指针"}),s(),a(n,{type:"tip",text:"二分查找"}),s(),a(n,{type:"tip",text:"排序"})]),F])}const E=p(r,[["render",i]]);export{h as __pageData,E as default};
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_35-\346\220\234\347\264\242\346\217\222\345\205\245\344\275\215\347\275\256.md.7d66d92e.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_35-\346\220\234\347\264\242\346\217\222\345\205\245\344\275\215\347\275\256.md.9d06ccb0.js"
similarity index 99%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_35-\346\220\234\347\264\242\346\217\222\345\205\245\344\275\215\347\275\256.md.7d66d92e.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_35-\346\220\234\347\264\242\346\217\222\345\205\245\344\275\215\347\275\256.md.9d06ccb0.js"
index f587b541..fc60c72b 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_35-\346\220\234\347\264\242\346\217\222\345\205\245\344\275\215\347\275\256.md.7d66d92e.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_35-\346\220\234\347\264\242\346\217\222\345\205\245\344\275\215\347\275\256.md.9d06ccb0.js"
@@ -1,4 +1,4 @@
-import{_ as p,c as o,a as s,b as n,d as l,e as t,o as e,r as c}from"./app.7354b8c5.js";const m=JSON.parse('{"title":"35-搜索插入位置","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/35-搜索插入位置.md"}'),r={name:"algorithm/LeetCode刷题/35-搜索插入位置.md"},y=s("h1",{id:"_35-搜索插入位置",tabindex:"-1"},[n("35-搜索插入位置 "),s("a",{class:"header-anchor",href:"#_35-搜索插入位置","aria-hidden":"true"},"#")],-1),F=t(`

题目信息

题目地址搜索插入位置

题目内容:

javascript
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
+import{_ as p,c as o,a as s,b as n,d as l,e as t,o as e,r as c}from"./app.4a806fb4.js";const m=JSON.parse('{"title":"35-搜索插入位置","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/35-搜索插入位置.md"}'),r={name:"algorithm/LeetCode刷题/35-搜索插入位置.md"},y=s("h1",{id:"_35-搜索插入位置",tabindex:"-1"},[n("35-搜索插入位置 "),s("a",{class:"header-anchor",href:"#_35-搜索插入位置","aria-hidden":"true"},"#")],-1),F=t(`

题目信息

题目地址搜索插入位置

题目内容:

javascript
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
 
 请必须使用时间复杂度为O(log n) 的算法。
 
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_35-\346\220\234\347\264\242\346\217\222\345\205\245\344\275\215\347\275\256.md.7d66d92e.lean.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_35-\346\220\234\347\264\242\346\217\222\345\205\245\344\275\215\347\275\256.md.9d06ccb0.lean.js"
similarity index 93%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_35-\346\220\234\347\264\242\346\217\222\345\205\245\344\275\215\347\275\256.md.7d66d92e.lean.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_35-\346\220\234\347\264\242\346\217\222\345\205\245\344\275\215\347\275\256.md.9d06ccb0.lean.js"
index c7c1b6f2..e4ecfba4 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_35-\346\220\234\347\264\242\346\217\222\345\205\245\344\275\215\347\275\256.md.7d66d92e.lean.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_35-\346\220\234\347\264\242\346\217\222\345\205\245\344\275\215\347\275\256.md.9d06ccb0.lean.js"
@@ -1 +1 @@
-import{_ as p,c as o,a as s,b as n,d as l,e as t,o as e,r as c}from"./app.7354b8c5.js";const m=JSON.parse('{"title":"35-搜索插入位置","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/35-搜索插入位置.md"}'),r={name:"algorithm/LeetCode刷题/35-搜索插入位置.md"},y=s("h1",{id:"_35-搜索插入位置",tabindex:"-1"},[n("35-搜索插入位置 "),s("a",{class:"header-anchor",href:"#_35-搜索插入位置","aria-hidden":"true"},"#")],-1),F=t("",10);function D(C,i,A,d,f,h){const a=c("Badge");return e(),o("div",null,[y,s("p",null,[n("标签:"),l(a,{type:"tip",text:"数组"}),n(),l(a,{type:"tip",text:"二分查找"})]),F])}const u=p(r,[["render",D]]);export{m as __pageData,u as default};
+import{_ as p,c as o,a as s,b as n,d as l,e as t,o as e,r as c}from"./app.4a806fb4.js";const m=JSON.parse('{"title":"35-搜索插入位置","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/35-搜索插入位置.md"}'),r={name:"algorithm/LeetCode刷题/35-搜索插入位置.md"},y=s("h1",{id:"_35-搜索插入位置",tabindex:"-1"},[n("35-搜索插入位置 "),s("a",{class:"header-anchor",href:"#_35-搜索插入位置","aria-hidden":"true"},"#")],-1),F=t("",10);function D(C,i,A,d,f,h){const a=c("Badge");return e(),o("div",null,[y,s("p",null,[n("标签:"),l(a,{type:"tip",text:"数组"}),n(),l(a,{type:"tip",text:"二分查找"})]),F])}const u=p(r,[["render",D]]);export{m as __pageData,u as default};
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_414-\347\254\254\344\270\211\345\244\247\347\232\204\346\225\260.md.c010270a.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_414-\347\254\254\344\270\211\345\244\247\347\232\204\346\225\260.md.13153ebb.js"
similarity index 99%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_414-\347\254\254\344\270\211\345\244\247\347\232\204\346\225\260.md.c010270a.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_414-\347\254\254\344\270\211\345\244\247\347\232\204\346\225\260.md.13153ebb.js"
index 0fcf1461..6bdecb83 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_414-\347\254\254\344\270\211\345\244\247\347\232\204\346\225\260.md.c010270a.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_414-\347\254\254\344\270\211\345\244\247\347\232\204\346\225\260.md.13153ebb.js"
@@ -1,4 +1,4 @@
-import{_ as p,c as o,a as s,b as n,d as l,e as t,o as e,r as c}from"./app.7354b8c5.js";const h=JSON.parse('{"title":"414-第三大的数","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/414-第三大的数.md"}'),r={name:"algorithm/LeetCode刷题/414-第三大的数.md"},y=s("h1",{id:"_414-第三大的数",tabindex:"-1"},[n("414-第三大的数 "),s("a",{class:"header-anchor",href:"#_414-第三大的数","aria-hidden":"true"},"#")],-1),F=t(`

题目信息

题目地址414. 第三大的数

题目内容:

javascript
给你一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。
+import{_ as p,c as o,a as s,b as n,d as l,e as t,o as e,r as c}from"./app.4a806fb4.js";const h=JSON.parse('{"title":"414-第三大的数","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/414-第三大的数.md"}'),r={name:"algorithm/LeetCode刷题/414-第三大的数.md"},y=s("h1",{id:"_414-第三大的数",tabindex:"-1"},[n("414-第三大的数 "),s("a",{class:"header-anchor",href:"#_414-第三大的数","aria-hidden":"true"},"#")],-1),F=t(`

题目信息

题目地址414. 第三大的数

题目内容:

javascript
给你一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。
 
 示例 1
     输入:[3, 2, 1]
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_414-\347\254\254\344\270\211\345\244\247\347\232\204\346\225\260.md.c010270a.lean.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_414-\347\254\254\344\270\211\345\244\247\347\232\204\346\225\260.md.13153ebb.lean.js"
similarity index 94%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_414-\347\254\254\344\270\211\345\244\247\347\232\204\346\225\260.md.c010270a.lean.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_414-\347\254\254\344\270\211\345\244\247\347\232\204\346\225\260.md.13153ebb.lean.js"
index d80fee6c..273a7b55 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_414-\347\254\254\344\270\211\345\244\247\347\232\204\346\225\260.md.c010270a.lean.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_414-\347\254\254\344\270\211\345\244\247\347\232\204\346\225\260.md.13153ebb.lean.js"
@@ -1 +1 @@
-import{_ as p,c as o,a as s,b as n,d as l,e as t,o as e,r as c}from"./app.7354b8c5.js";const h=JSON.parse('{"title":"414-第三大的数","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/414-第三大的数.md"}'),r={name:"algorithm/LeetCode刷题/414-第三大的数.md"},y=s("h1",{id:"_414-第三大的数",tabindex:"-1"},[n("414-第三大的数 "),s("a",{class:"header-anchor",href:"#_414-第三大的数","aria-hidden":"true"},"#")],-1),F=t("",17);function D(C,i,A,f,m,d){const a=c("Badge");return e(),o("div",null,[y,s("p",null,[n("标签:"),l(a,{type:"tip",text:"数组"}),n(),l(a,{type:"tip",text:"排序"})]),F])}const g=p(r,[["render",D]]);export{h as __pageData,g as default};
+import{_ as p,c as o,a as s,b as n,d as l,e as t,o as e,r as c}from"./app.4a806fb4.js";const h=JSON.parse('{"title":"414-第三大的数","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/414-第三大的数.md"}'),r={name:"algorithm/LeetCode刷题/414-第三大的数.md"},y=s("h1",{id:"_414-第三大的数",tabindex:"-1"},[n("414-第三大的数 "),s("a",{class:"header-anchor",href:"#_414-第三大的数","aria-hidden":"true"},"#")],-1),F=t("",17);function D(C,i,A,f,m,d){const a=c("Badge");return e(),o("div",null,[y,s("p",null,[n("标签:"),l(a,{type:"tip",text:"数组"}),n(),l(a,{type:"tip",text:"排序"})]),F])}const g=p(r,[["render",D]]);export{h as __pageData,g as default};
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_454-\345\233\233\346\225\260\347\233\270\345\212\240II.md.76199da8.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_454-\345\233\233\346\225\260\347\233\270\345\212\240II.md.f66e8216.js"
similarity index 99%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_454-\345\233\233\346\225\260\347\233\270\345\212\240II.md.76199da8.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_454-\345\233\233\346\225\260\347\233\270\345\212\240II.md.f66e8216.js"
index 91f073ed..87901047 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_454-\345\233\233\346\225\260\347\233\270\345\212\240II.md.76199da8.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_454-\345\233\233\346\225\260\347\233\270\345\212\240II.md.f66e8216.js"
@@ -1,4 +1,4 @@
-import{_ as p,c as o,a as s,b as n,d as l,e as t,o as e,r as c}from"./app.7354b8c5.js";const h=JSON.parse('{"title":"454-四数相加II","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/454-四数相加II.md"}'),r={name:"algorithm/LeetCode刷题/454-四数相加II.md"},y=s("h1",{id:"_454-四数相加ii",tabindex:"-1"},[n("454-四数相加II "),s("a",{class:"header-anchor",href:"#_454-四数相加ii","aria-hidden":"true"},"#")],-1),F=t(`

题目信息

题目地址454. 四数相加 II

题目内容:

javascript
给你四个整数数组nums1、nums2、nums3和nums4,数组长度都是n
+import{_ as p,c as o,a as s,b as n,d as l,e as t,o as e,r as c}from"./app.4a806fb4.js";const h=JSON.parse('{"title":"454-四数相加II","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/454-四数相加II.md"}'),r={name:"algorithm/LeetCode刷题/454-四数相加II.md"},y=s("h1",{id:"_454-四数相加ii",tabindex:"-1"},[n("454-四数相加II "),s("a",{class:"header-anchor",href:"#_454-四数相加ii","aria-hidden":"true"},"#")],-1),F=t(`

题目信息

题目地址454. 四数相加 II

题目内容:

javascript
给你四个整数数组nums1、nums2、nums3和nums4,数组长度都是n
 
 请你计算有多少个元组 (i, j, k, l)能满足:
 
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_454-\345\233\233\346\225\260\347\233\270\345\212\240II.md.76199da8.lean.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_454-\345\233\233\346\225\260\347\233\270\345\212\240II.md.f66e8216.lean.js"
similarity index 93%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_454-\345\233\233\346\225\260\347\233\270\345\212\240II.md.76199da8.lean.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_454-\345\233\233\346\225\260\347\233\270\345\212\240II.md.f66e8216.lean.js"
index f19753d3..8b793271 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_454-\345\233\233\346\225\260\347\233\270\345\212\240II.md.76199da8.lean.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_454-\345\233\233\346\225\260\347\233\270\345\212\240II.md.f66e8216.lean.js"
@@ -1 +1 @@
-import{_ as p,c as o,a as s,b as n,d as l,e as t,o as e,r as c}from"./app.7354b8c5.js";const h=JSON.parse('{"title":"454-四数相加II","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/454-四数相加II.md"}'),r={name:"algorithm/LeetCode刷题/454-四数相加II.md"},y=s("h1",{id:"_454-四数相加ii",tabindex:"-1"},[n("454-四数相加II "),s("a",{class:"header-anchor",href:"#_454-四数相加ii","aria-hidden":"true"},"#")],-1),F=t("",10);function C(D,A,i,u,m,d){const a=c("Badge");return e(),o("div",null,[y,s("p",null,[n("标签:"),l(a,{type:"tip",text:"数组"}),n(),l(a,{type:"tip",text:"哈希表"})]),F])}const E=p(r,[["render",C]]);export{h as __pageData,E as default};
+import{_ as p,c as o,a as s,b as n,d as l,e as t,o as e,r as c}from"./app.4a806fb4.js";const h=JSON.parse('{"title":"454-四数相加II","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/454-四数相加II.md"}'),r={name:"algorithm/LeetCode刷题/454-四数相加II.md"},y=s("h1",{id:"_454-四数相加ii",tabindex:"-1"},[n("454-四数相加II "),s("a",{class:"header-anchor",href:"#_454-四数相加ii","aria-hidden":"true"},"#")],-1),F=t("",10);function C(D,A,i,u,m,d){const a=c("Badge");return e(),o("div",null,[y,s("p",null,[n("标签:"),l(a,{type:"tip",text:"数组"}),n(),l(a,{type:"tip",text:"哈希表"})]),F])}const E=p(r,[["render",C]]);export{h as __pageData,E as default};
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_485-\346\234\200\345\244\247\350\277\236\347\273\2551\347\232\204\344\270\252\346\225\260.md.40b39e33.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_485-\346\234\200\345\244\247\350\277\236\347\273\2551\347\232\204\344\270\252\346\225\260.md.c22ca3e0.js"
similarity index 99%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_485-\346\234\200\345\244\247\350\277\236\347\273\2551\347\232\204\344\270\252\346\225\260.md.40b39e33.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_485-\346\234\200\345\244\247\350\277\236\347\273\2551\347\232\204\344\270\252\346\225\260.md.c22ca3e0.js"
index a52cee08..e463815d 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_485-\346\234\200\345\244\247\350\277\236\347\273\2551\347\232\204\344\270\252\346\225\260.md.40b39e33.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_485-\346\234\200\345\244\247\350\277\236\347\273\2551\347\232\204\344\270\252\346\225\260.md.c22ca3e0.js"
@@ -1,4 +1,4 @@
-import{_ as l,c as o,a as s,b as n,d as p,e as t,o as e,r as c}from"./app.7354b8c5.js";const m=JSON.parse('{"title":"485-最大连续 1 的个数","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/485-最大连续1的个数.md"}'),r={name:"algorithm/LeetCode刷题/485-最大连续1的个数.md"},y=s("h1",{id:"_485-最大连续-1-的个数",tabindex:"-1"},[n("485-最大连续 1 的个数 "),s("a",{class:"header-anchor",href:"#_485-最大连续-1-的个数","aria-hidden":"true"},"#")],-1),F=t(`

题目信息

题目地址485. 最大连续1的个数

题目内容:

javascript
给定一个二进制数组nums,计算其中最大连续1的个数。
+import{_ as l,c as o,a as s,b as n,d as p,e as t,o as e,r as c}from"./app.4a806fb4.js";const m=JSON.parse('{"title":"485-最大连续 1 的个数","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/485-最大连续1的个数.md"}'),r={name:"algorithm/LeetCode刷题/485-最大连续1的个数.md"},y=s("h1",{id:"_485-最大连续-1-的个数",tabindex:"-1"},[n("485-最大连续 1 的个数 "),s("a",{class:"header-anchor",href:"#_485-最大连续-1-的个数","aria-hidden":"true"},"#")],-1),F=t(`

题目信息

题目地址485. 最大连续1的个数

题目内容:

javascript
给定一个二进制数组nums,计算其中最大连续1的个数。
 
 示例 1
     输入:nums = [1,1,0,1,1,1]
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_485-\346\234\200\345\244\247\350\277\236\347\273\2551\347\232\204\344\270\252\346\225\260.md.40b39e33.lean.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_485-\346\234\200\345\244\247\350\277\236\347\273\2551\347\232\204\344\270\252\346\225\260.md.c22ca3e0.lean.js"
similarity index 94%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_485-\346\234\200\345\244\247\350\277\236\347\273\2551\347\232\204\344\270\252\346\225\260.md.40b39e33.lean.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_485-\346\234\200\345\244\247\350\277\236\347\273\2551\347\232\204\344\270\252\346\225\260.md.c22ca3e0.lean.js"
index 9e125bbd..a80d0e16 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_485-\346\234\200\345\244\247\350\277\236\347\273\2551\347\232\204\344\270\252\346\225\260.md.40b39e33.lean.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_485-\346\234\200\345\244\247\350\277\236\347\273\2551\347\232\204\344\270\252\346\225\260.md.c22ca3e0.lean.js"
@@ -1 +1 @@
-import{_ as l,c as o,a as s,b as n,d as p,e as t,o as e,r as c}from"./app.7354b8c5.js";const m=JSON.parse('{"title":"485-最大连续 1 的个数","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/485-最大连续1的个数.md"}'),r={name:"algorithm/LeetCode刷题/485-最大连续1的个数.md"},y=s("h1",{id:"_485-最大连续-1-的个数",tabindex:"-1"},[n("485-最大连续 1 的个数 "),s("a",{class:"header-anchor",href:"#_485-最大连续-1-的个数","aria-hidden":"true"},"#")],-1),F=t("",15);function D(i,C,A,d,u,f){const a=c("Badge");return e(),o("div",null,[y,s("p",null,[n("标签:"),p(a,{type:"tip",text:"数组"})]),F])}const _=l(r,[["render",D]]);export{m as __pageData,_ as default};
+import{_ as l,c as o,a as s,b as n,d as p,e as t,o as e,r as c}from"./app.4a806fb4.js";const m=JSON.parse('{"title":"485-最大连续 1 的个数","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/485-最大连续1的个数.md"}'),r={name:"algorithm/LeetCode刷题/485-最大连续1的个数.md"},y=s("h1",{id:"_485-最大连续-1-的个数",tabindex:"-1"},[n("485-最大连续 1 的个数 "),s("a",{class:"header-anchor",href:"#_485-最大连续-1-的个数","aria-hidden":"true"},"#")],-1),F=t("",15);function D(i,C,A,d,u,f){const a=c("Badge");return e(),o("div",null,[y,s("p",null,[n("标签:"),p(a,{type:"tip",text:"数组"})]),F])}const _=l(r,[["render",D]]);export{m as __pageData,_ as default};
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_520-\346\243\200\346\265\213\345\244\247\345\206\231\345\255\227\346\257\215.md.951a3bce.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_520-\346\243\200\346\265\213\345\244\247\345\206\231\345\255\227\346\257\215.md.9f452f4f.js"
similarity index 99%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_520-\346\243\200\346\265\213\345\244\247\345\206\231\345\255\227\346\257\215.md.951a3bce.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_520-\346\243\200\346\265\213\345\244\247\345\206\231\345\255\227\346\257\215.md.9f452f4f.js"
index 59a8b019..1aea24dd 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_520-\346\243\200\346\265\213\345\244\247\345\206\231\345\255\227\346\257\215.md.951a3bce.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_520-\346\243\200\346\265\213\345\244\247\345\206\231\345\255\227\346\257\215.md.9f452f4f.js"
@@ -1,4 +1,4 @@
-import{_ as l,c as p,a as s,b as a,d as o,e as t,o as e,r as c}from"./app.7354b8c5.js";const g=JSON.parse('{"title":"520-检测大写字母","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/520-检测大写字母.md"}'),r={name:"algorithm/LeetCode刷题/520-检测大写字母.md"},y=s("h1",{id:"_520-检测大写字母",tabindex:"-1"},[a("520-检测大写字母 "),s("a",{class:"header-anchor",href:"#_520-检测大写字母","aria-hidden":"true"},"#")],-1),F=t(`

题目信息

题目地址520. 检测大写字母

题目内容:

javascript
我们定义,在以下情况时,单词的大写用法是正确的:
+import{_ as l,c as p,a as s,b as a,d as o,e as t,o as e,r as c}from"./app.4a806fb4.js";const g=JSON.parse('{"title":"520-检测大写字母","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/520-检测大写字母.md"}'),r={name:"algorithm/LeetCode刷题/520-检测大写字母.md"},y=s("h1",{id:"_520-检测大写字母",tabindex:"-1"},[a("520-检测大写字母 "),s("a",{class:"header-anchor",href:"#_520-检测大写字母","aria-hidden":"true"},"#")],-1),F=t(`

题目信息

题目地址520. 检测大写字母

题目内容:

javascript
我们定义,在以下情况时,单词的大写用法是正确的:
 
 全部字母都是大写,比如"USA"
 单词中所有字母都不是大写,比如"leetcode"
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_520-\346\243\200\346\265\213\345\244\247\345\206\231\345\255\227\346\257\215.md.951a3bce.lean.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_520-\346\243\200\346\265\213\345\244\247\345\206\231\345\255\227\346\257\215.md.9f452f4f.lean.js"
similarity index 93%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_520-\346\243\200\346\265\213\345\244\247\345\206\231\345\255\227\346\257\215.md.951a3bce.lean.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_520-\346\243\200\346\265\213\345\244\247\345\206\231\345\255\227\346\257\215.md.9f452f4f.lean.js"
index fc2d976a..38feba2b 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_520-\346\243\200\346\265\213\345\244\247\345\206\231\345\255\227\346\257\215.md.951a3bce.lean.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_520-\346\243\200\346\265\213\345\244\247\345\206\231\345\255\227\346\257\215.md.9f452f4f.lean.js"
@@ -1 +1 @@
-import{_ as l,c as p,a as s,b as a,d as o,e as t,o as e,r as c}from"./app.7354b8c5.js";const g=JSON.parse('{"title":"520-检测大写字母","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/520-检测大写字母.md"}'),r={name:"algorithm/LeetCode刷题/520-检测大写字母.md"},y=s("h1",{id:"_520-检测大写字母",tabindex:"-1"},[a("520-检测大写字母 "),s("a",{class:"header-anchor",href:"#_520-检测大写字母","aria-hidden":"true"},"#")],-1),F=t("",16);function D(i,C,A,d,f,u){const n=c("Badge");return e(),p("div",null,[y,s("p",null,[a("标签:"),o(n,{type:"tip",text:"字符串"})]),F])}const E=l(r,[["render",D]]);export{g as __pageData,E as default};
+import{_ as l,c as p,a as s,b as a,d as o,e as t,o as e,r as c}from"./app.4a806fb4.js";const g=JSON.parse('{"title":"520-检测大写字母","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/520-检测大写字母.md"}'),r={name:"algorithm/LeetCode刷题/520-检测大写字母.md"},y=s("h1",{id:"_520-检测大写字母",tabindex:"-1"},[a("520-检测大写字母 "),s("a",{class:"header-anchor",href:"#_520-检测大写字母","aria-hidden":"true"},"#")],-1),F=t("",16);function D(i,C,A,d,f,u){const n=c("Badge");return e(),p("div",null,[y,s("p",null,[a("标签:"),o(n,{type:"tip",text:"字符串"})]),F])}const E=l(r,[["render",D]]);export{g as __pageData,E as default};
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_541-\345\217\215\350\275\254\345\255\227\347\254\246\344\270\262II.md.c9a8f2ae.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_541-\345\217\215\350\275\254\345\255\227\347\254\246\344\270\262II.md.9cddfa39.js"
similarity index 99%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_541-\345\217\215\350\275\254\345\255\227\347\254\246\344\270\262II.md.c9a8f2ae.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_541-\345\217\215\350\275\254\345\255\227\347\254\246\344\270\262II.md.9cddfa39.js"
index 7dff9280..d299423c 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_541-\345\217\215\350\275\254\345\255\227\347\254\246\344\270\262II.md.c9a8f2ae.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_541-\345\217\215\350\275\254\345\255\227\347\254\246\344\270\262II.md.9cddfa39.js"
@@ -1,4 +1,4 @@
-import{_ as p,c as o,a as s,b as n,d as l,e as t,o as e,r as c}from"./app.7354b8c5.js";const u=JSON.parse('{"title":"541-反转字符串II","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/541-反转字符串II.md"}'),r={name:"algorithm/LeetCode刷题/541-反转字符串II.md"},y=s("h1",{id:"_541-反转字符串ii",tabindex:"-1"},[n("541-反转字符串II "),s("a",{class:"header-anchor",href:"#_541-反转字符串ii","aria-hidden":"true"},"#")],-1),F=t(`

题目信息

题目地址541. 反转字符串 II

题目内容:

javascript
给定一个字符串s和一个整数k,从字符串开头算起,每计数至2k个字符,就反转这2k字符中的前k个字符。
+import{_ as p,c as o,a as s,b as n,d as l,e as t,o as e,r as c}from"./app.4a806fb4.js";const u=JSON.parse('{"title":"541-反转字符串II","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/541-反转字符串II.md"}'),r={name:"algorithm/LeetCode刷题/541-反转字符串II.md"},y=s("h1",{id:"_541-反转字符串ii",tabindex:"-1"},[n("541-反转字符串II "),s("a",{class:"header-anchor",href:"#_541-反转字符串ii","aria-hidden":"true"},"#")],-1),F=t(`

题目信息

题目地址541. 反转字符串 II

题目内容:

javascript
给定一个字符串s和一个整数k,从字符串开头算起,每计数至2k个字符,就反转这2k字符中的前k个字符。
 
 如果剩余字符少于 k 个,则将剩余字符全部反转。
 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_541-\345\217\215\350\275\254\345\255\227\347\254\246\344\270\262II.md.c9a8f2ae.lean.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_541-\345\217\215\350\275\254\345\255\227\347\254\246\344\270\262II.md.9cddfa39.lean.js"
similarity index 93%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_541-\345\217\215\350\275\254\345\255\227\347\254\246\344\270\262II.md.c9a8f2ae.lean.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_541-\345\217\215\350\275\254\345\255\227\347\254\246\344\270\262II.md.9cddfa39.lean.js"
index 232f8dbe..194cc6e0 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_541-\345\217\215\350\275\254\345\255\227\347\254\246\344\270\262II.md.c9a8f2ae.lean.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_541-\345\217\215\350\275\254\345\255\227\347\254\246\344\270\262II.md.9cddfa39.lean.js"
@@ -1 +1 @@
-import{_ as p,c as o,a as s,b as n,d as l,e as t,o as e,r as c}from"./app.7354b8c5.js";const u=JSON.parse('{"title":"541-反转字符串II","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/541-反转字符串II.md"}'),r={name:"algorithm/LeetCode刷题/541-反转字符串II.md"},y=s("h1",{id:"_541-反转字符串ii",tabindex:"-1"},[n("541-反转字符串II "),s("a",{class:"header-anchor",href:"#_541-反转字符串ii","aria-hidden":"true"},"#")],-1),F=t("",11);function D(i,C,A,d,f,g){const a=c("Badge");return e(),o("div",null,[y,s("p",null,[n("标签:"),l(a,{type:"tip",text:"双指针"}),n(),l(a,{type:"tip",text:"字符串"})]),F])}const _=p(r,[["render",D]]);export{u as __pageData,_ as default};
+import{_ as p,c as o,a as s,b as n,d as l,e as t,o as e,r as c}from"./app.4a806fb4.js";const u=JSON.parse('{"title":"541-反转字符串II","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/541-反转字符串II.md"}'),r={name:"algorithm/LeetCode刷题/541-反转字符串II.md"},y=s("h1",{id:"_541-反转字符串ii",tabindex:"-1"},[n("541-反转字符串II "),s("a",{class:"header-anchor",href:"#_541-反转字符串ii","aria-hidden":"true"},"#")],-1),F=t("",11);function D(i,C,A,d,f,g){const a=c("Badge");return e(),o("div",null,[y,s("p",null,[n("标签:"),l(a,{type:"tip",text:"双指针"}),n(),l(a,{type:"tip",text:"字符串"})]),F])}const _=p(r,[["render",D]]);export{u as __pageData,_ as default};
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_58-\346\234\200\345\220\216\344\270\200\344\270\252\345\215\225\350\257\215\347\232\204\351\225\277\345\272\246.md.66bb4a2c.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_58-\346\234\200\345\220\216\344\270\200\344\270\252\345\215\225\350\257\215\347\232\204\351\225\277\345\272\246.md.2352595a.js"
similarity index 99%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_58-\346\234\200\345\220\216\344\270\200\344\270\252\345\215\225\350\257\215\347\232\204\351\225\277\345\272\246.md.66bb4a2c.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_58-\346\234\200\345\220\216\344\270\200\344\270\252\345\215\225\350\257\215\347\232\204\351\225\277\345\272\246.md.2352595a.js"
index da4f21b5..8c62d77a 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_58-\346\234\200\345\220\216\344\270\200\344\270\252\345\215\225\350\257\215\347\232\204\351\225\277\345\272\246.md.66bb4a2c.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_58-\346\234\200\345\220\216\344\270\200\344\270\252\345\215\225\350\257\215\347\232\204\351\225\277\345\272\246.md.2352595a.js"
@@ -1,4 +1,4 @@
-import{_ as l,c as o,a as s,b as n,d as p,e as t,o as e,r as c}from"./app.7354b8c5.js";const g=JSON.parse('{"title":"58-最后一个单词的长度","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/58-最后一个单词的长度.md"}'),r={name:"algorithm/LeetCode刷题/58-最后一个单词的长度.md"},y=s("h1",{id:"_58-最后一个单词的长度",tabindex:"-1"},[n("58-最后一个单词的长度 "),s("a",{class:"header-anchor",href:"#_58-最后一个单词的长度","aria-hidden":"true"},"#")],-1),i=t(`

题目信息

题目地址最后一个单词的长度

题目内容:

javascript
给你一个字符串s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中最后一个单词的长度。
+import{_ as l,c as o,a as s,b as n,d as p,e as t,o as e,r as c}from"./app.4a806fb4.js";const g=JSON.parse('{"title":"58-最后一个单词的长度","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/58-最后一个单词的长度.md"}'),r={name:"algorithm/LeetCode刷题/58-最后一个单词的长度.md"},y=s("h1",{id:"_58-最后一个单词的长度",tabindex:"-1"},[n("58-最后一个单词的长度 "),s("a",{class:"header-anchor",href:"#_58-最后一个单词的长度","aria-hidden":"true"},"#")],-1),i=t(`

题目信息

题目地址最后一个单词的长度

题目内容:

javascript
给你一个字符串s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中最后一个单词的长度。
 
 单词 是指仅由字母组成、不包含任何空格字符的最大
 子字符串
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_58-\346\234\200\345\220\216\344\270\200\344\270\252\345\215\225\350\257\215\347\232\204\351\225\277\345\272\246.md.66bb4a2c.lean.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_58-\346\234\200\345\220\216\344\270\200\344\270\252\345\215\225\350\257\215\347\232\204\351\225\277\345\272\246.md.2352595a.lean.js"
similarity index 94%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_58-\346\234\200\345\220\216\344\270\200\344\270\252\345\215\225\350\257\215\347\232\204\351\225\277\345\272\246.md.66bb4a2c.lean.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_58-\346\234\200\345\220\216\344\270\200\344\270\252\345\215\225\350\257\215\347\232\204\351\225\277\345\272\246.md.2352595a.lean.js"
index a37e50b2..1a98e596 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_58-\346\234\200\345\220\216\344\270\200\344\270\252\345\215\225\350\257\215\347\232\204\351\225\277\345\272\246.md.66bb4a2c.lean.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_58-\346\234\200\345\220\216\344\270\200\344\270\252\345\215\225\350\257\215\347\232\204\351\225\277\345\272\246.md.2352595a.lean.js"
@@ -1 +1 @@
-import{_ as l,c as o,a as s,b as n,d as p,e as t,o as e,r as c}from"./app.7354b8c5.js";const g=JSON.parse('{"title":"58-最后一个单词的长度","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/58-最后一个单词的长度.md"}'),r={name:"algorithm/LeetCode刷题/58-最后一个单词的长度.md"},y=s("h1",{id:"_58-最后一个单词的长度",tabindex:"-1"},[n("58-最后一个单词的长度 "),s("a",{class:"header-anchor",href:"#_58-最后一个单词的长度","aria-hidden":"true"},"#")],-1),i=t("",15);function D(F,C,A,d,f,h){const a=c("Badge");return e(),o("div",null,[y,s("p",null,[n("标签:"),p(a,{type:"tip",text:"字符串"})]),i])}const _=l(r,[["render",D]]);export{g as __pageData,_ as default};
+import{_ as l,c as o,a as s,b as n,d as p,e as t,o as e,r as c}from"./app.4a806fb4.js";const g=JSON.parse('{"title":"58-最后一个单词的长度","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/58-最后一个单词的长度.md"}'),r={name:"algorithm/LeetCode刷题/58-最后一个单词的长度.md"},y=s("h1",{id:"_58-最后一个单词的长度",tabindex:"-1"},[n("58-最后一个单词的长度 "),s("a",{class:"header-anchor",href:"#_58-最后一个单词的长度","aria-hidden":"true"},"#")],-1),i=t("",15);function D(F,C,A,d,f,h){const a=c("Badge");return e(),o("div",null,[y,s("p",null,[n("标签:"),p(a,{type:"tip",text:"字符串"})]),i])}const _=l(r,[["render",D]]);export{g as __pageData,_ as default};
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_628-\344\270\211\344\270\252\346\225\260\347\232\204\346\234\200\345\244\247\344\271\230\347\247\257.md.189555ed.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_628-\344\270\211\344\270\252\346\225\260\347\232\204\346\234\200\345\244\247\344\271\230\347\247\257.md.d03fb6fb.js"
similarity index 99%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_628-\344\270\211\344\270\252\346\225\260\347\232\204\346\234\200\345\244\247\344\271\230\347\247\257.md.189555ed.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_628-\344\270\211\344\270\252\346\225\260\347\232\204\346\234\200\345\244\247\344\271\230\347\247\257.md.d03fb6fb.js"
index 220207fb..bb59c5a7 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_628-\344\270\211\344\270\252\346\225\260\347\232\204\346\234\200\345\244\247\344\271\230\347\247\257.md.189555ed.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_628-\344\270\211\344\270\252\346\225\260\347\232\204\346\234\200\345\244\247\344\271\230\347\247\257.md.d03fb6fb.js"
@@ -1,4 +1,4 @@
-import{_ as p,c as o,a as l,b as s,d as a,e as t,o as e,r as c}from"./app.7354b8c5.js";const h=JSON.parse('{"title":"628-三个数的最大乘积","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/628-三个数的最大乘积.md"}'),r={name:"algorithm/LeetCode刷题/628-三个数的最大乘积.md"},y=l("h1",{id:"_628-三个数的最大乘积",tabindex:"-1"},[s("628-三个数的最大乘积 "),l("a",{class:"header-anchor",href:"#_628-三个数的最大乘积","aria-hidden":"true"},"#")],-1),F=t(`

题目信息

题目地址628. 三个数的最大乘积

题目内容:

javascript
给你一个整型数组nums,在数组中找出由三个数组成的最大乘积,并输出这个乘积。
+import{_ as p,c as o,a as l,b as s,d as a,e as t,o as e,r as c}from"./app.4a806fb4.js";const h=JSON.parse('{"title":"628-三个数的最大乘积","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/628-三个数的最大乘积.md"}'),r={name:"algorithm/LeetCode刷题/628-三个数的最大乘积.md"},y=l("h1",{id:"_628-三个数的最大乘积",tabindex:"-1"},[s("628-三个数的最大乘积 "),l("a",{class:"header-anchor",href:"#_628-三个数的最大乘积","aria-hidden":"true"},"#")],-1),F=t(`

题目信息

题目地址628. 三个数的最大乘积

题目内容:

javascript
给你一个整型数组nums,在数组中找出由三个数组成的最大乘积,并输出这个乘积。
 
 示例 1
     输入:nums = [1,2,3]
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_628-\344\270\211\344\270\252\346\225\260\347\232\204\346\234\200\345\244\247\344\271\230\347\247\257.md.189555ed.lean.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_628-\344\270\211\344\270\252\346\225\260\347\232\204\346\234\200\345\244\247\344\271\230\347\247\257.md.d03fb6fb.lean.js"
similarity index 94%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_628-\344\270\211\344\270\252\346\225\260\347\232\204\346\234\200\345\244\247\344\271\230\347\247\257.md.189555ed.lean.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_628-\344\270\211\344\270\252\346\225\260\347\232\204\346\234\200\345\244\247\344\271\230\347\247\257.md.d03fb6fb.lean.js"
index deb29cc6..7d9468fa 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_628-\344\270\211\344\270\252\346\225\260\347\232\204\346\234\200\345\244\247\344\271\230\347\247\257.md.189555ed.lean.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_628-\344\270\211\344\270\252\346\225\260\347\232\204\346\234\200\345\244\247\344\271\230\347\247\257.md.d03fb6fb.lean.js"
@@ -1 +1 @@
-import{_ as p,c as o,a as l,b as s,d as a,e as t,o as e,r as c}from"./app.7354b8c5.js";const h=JSON.parse('{"title":"628-三个数的最大乘积","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/628-三个数的最大乘积.md"}'),r={name:"algorithm/LeetCode刷题/628-三个数的最大乘积.md"},y=l("h1",{id:"_628-三个数的最大乘积",tabindex:"-1"},[s("628-三个数的最大乘积 "),l("a",{class:"header-anchor",href:"#_628-三个数的最大乘积","aria-hidden":"true"},"#")],-1),F=t("",15);function D(i,C,A,m,d,f){const n=c("Badge");return e(),o("div",null,[y,l("p",null,[s("标签:"),a(n,{type:"tip",text:"数组"}),s(),a(n,{type:"tip",text:"数学"}),s(),a(n,{type:"tip",text:"排序"})]),F])}const _=p(r,[["render",D]]);export{h as __pageData,_ as default};
+import{_ as p,c as o,a as l,b as s,d as a,e as t,o as e,r as c}from"./app.4a806fb4.js";const h=JSON.parse('{"title":"628-三个数的最大乘积","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/628-三个数的最大乘积.md"}'),r={name:"algorithm/LeetCode刷题/628-三个数的最大乘积.md"},y=l("h1",{id:"_628-三个数的最大乘积",tabindex:"-1"},[s("628-三个数的最大乘积 "),l("a",{class:"header-anchor",href:"#_628-三个数的最大乘积","aria-hidden":"true"},"#")],-1),F=t("",15);function D(i,C,A,m,d,f){const n=c("Badge");return e(),o("div",null,[y,l("p",null,[s("标签:"),a(n,{type:"tip",text:"数组"}),s(),a(n,{type:"tip",text:"数学"}),s(),a(n,{type:"tip",text:"排序"})]),F])}const _=p(r,[["render",D]]);export{h as __pageData,_ as default};
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_707-\350\256\276\350\256\241\351\223\276\350\241\250.md.482bdc90.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_707-\350\256\276\350\256\241\351\223\276\350\241\250.md.31dd9a73.js"
similarity index 99%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_707-\350\256\276\350\256\241\351\223\276\350\241\250.md.482bdc90.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_707-\350\256\276\350\256\241\351\223\276\350\241\250.md.31dd9a73.js"
index 2d9dae2a..382662f5 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_707-\350\256\276\350\256\241\351\223\276\350\241\250.md.482bdc90.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_707-\350\256\276\350\256\241\351\223\276\350\241\250.md.31dd9a73.js"
@@ -1,4 +1,4 @@
-import{_ as p,c as o,a as s,b as n,d as l,e as t,o as e,r as c}from"./app.7354b8c5.js";const x=JSON.parse('{"title":"707-设计链表","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/707-设计链表.md"}'),y={name:"algorithm/LeetCode刷题/707-设计链表.md"},r=s("h1",{id:"_707-设计链表",tabindex:"-1"},[n("707-设计链表 "),s("a",{class:"header-anchor",href:"#_707-设计链表","aria-hidden":"true"},"#")],-1),F=t(`

题目信息

题目地址707. 设计链表

题目内容:

javascript
你可以选择使用单链表或者双链表,设计并实现自己的链表。
+import{_ as p,c as o,a as s,b as n,d as l,e as t,o as e,r as c}from"./app.4a806fb4.js";const x=JSON.parse('{"title":"707-设计链表","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/707-设计链表.md"}'),y={name:"algorithm/LeetCode刷题/707-设计链表.md"},r=s("h1",{id:"_707-设计链表",tabindex:"-1"},[n("707-设计链表 "),s("a",{class:"header-anchor",href:"#_707-设计链表","aria-hidden":"true"},"#")],-1),F=t(`

题目信息

题目地址707. 设计链表

题目内容:

javascript
你可以选择使用单链表或者双链表,设计并实现自己的链表。
 
 单链表中的节点应该具备两个属性:val和next。val是当前节点的值,next是指向下一个节点的指针/引用。
 
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_707-\350\256\276\350\256\241\351\223\276\350\241\250.md.482bdc90.lean.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_707-\350\256\276\350\256\241\351\223\276\350\241\250.md.31dd9a73.lean.js"
similarity index 93%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_707-\350\256\276\350\256\241\351\223\276\350\241\250.md.482bdc90.lean.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_707-\350\256\276\350\256\241\351\223\276\350\241\250.md.31dd9a73.lean.js"
index 69fc1f77..7fed05e8 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_707-\350\256\276\350\256\241\351\223\276\350\241\250.md.482bdc90.lean.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_707-\350\256\276\350\256\241\351\223\276\350\241\250.md.31dd9a73.lean.js"
@@ -1 +1 @@
-import{_ as p,c as o,a as s,b as n,d as l,e as t,o as e,r as c}from"./app.7354b8c5.js";const x=JSON.parse('{"title":"707-设计链表","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/707-设计链表.md"}'),y={name:"algorithm/LeetCode刷题/707-设计链表.md"},r=s("h1",{id:"_707-设计链表",tabindex:"-1"},[n("707-设计链表 "),s("a",{class:"header-anchor",href:"#_707-设计链表","aria-hidden":"true"},"#")],-1),F=t("",10);function D(i,C,A,d,f,u){const a=c("Badge");return e(),o("div",null,[r,s("p",null,[n("标签:"),l(a,{type:"tip",text:"设计"}),n(),l(a,{type:"tip",text:"链表"})]),F])}const h=p(y,[["render",D]]);export{x as __pageData,h as default};
+import{_ as p,c as o,a as s,b as n,d as l,e as t,o as e,r as c}from"./app.4a806fb4.js";const x=JSON.parse('{"title":"707-设计链表","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/707-设计链表.md"}'),y={name:"algorithm/LeetCode刷题/707-设计链表.md"},r=s("h1",{id:"_707-设计链表",tabindex:"-1"},[n("707-设计链表 "),s("a",{class:"header-anchor",href:"#_707-设计链表","aria-hidden":"true"},"#")],-1),F=t("",10);function D(i,C,A,d,f,u){const a=c("Badge");return e(),o("div",null,[r,s("p",null,[n("标签:"),l(a,{type:"tip",text:"设计"}),n(),l(a,{type:"tip",text:"链表"})]),F])}const h=p(y,[["render",D]]);export{x as __pageData,h as default};
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_9-\345\233\236\346\226\207\346\225\260.md.4a097db8.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_9-\345\233\236\346\226\207\346\225\260.md.c6f185ef.js"
similarity index 99%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_9-\345\233\236\346\226\207\346\225\260.md.4a097db8.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_9-\345\233\236\346\226\207\346\225\260.md.c6f185ef.js"
index c0f31805..fc8ca317 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_9-\345\233\236\346\226\207\346\225\260.md.4a097db8.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_9-\345\233\236\346\226\207\346\225\260.md.c6f185ef.js"
@@ -1,4 +1,4 @@
-import{_ as l,c as p,a as s,b as n,d as o,e,o as t,r as c}from"./app.7354b8c5.js";const g=JSON.parse('{"title":"9-回文数","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/9-回文数.md"}'),r={name:"algorithm/LeetCode刷题/9-回文数.md"},y=s("h1",{id:"_9-回文数",tabindex:"-1"},[n("9-回文数 "),s("a",{class:"header-anchor",href:"#_9-回文数","aria-hidden":"true"},"#")],-1),F=e(`

题目信息

题目地址回文数

题目内容:

javascript
给你一个整数x,如果x是一个回文整数,返回true;否则,返回false。
+import{_ as l,c as p,a as s,b as n,d as o,e,o as t,r as c}from"./app.4a806fb4.js";const g=JSON.parse('{"title":"9-回文数","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/9-回文数.md"}'),r={name:"algorithm/LeetCode刷题/9-回文数.md"},y=s("h1",{id:"_9-回文数",tabindex:"-1"},[n("9-回文数 "),s("a",{class:"header-anchor",href:"#_9-回文数","aria-hidden":"true"},"#")],-1),F=e(`

题目信息

题目地址回文数

题目内容:

javascript
给你一个整数x,如果x是一个回文整数,返回true;否则,返回false。
 
 回文数
 是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_9-\345\233\236\346\226\207\346\225\260.md.4a097db8.lean.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_9-\345\233\236\346\226\207\346\225\260.md.c6f185ef.lean.js"
similarity index 93%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_9-\345\233\236\346\226\207\346\225\260.md.4a097db8.lean.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_9-\345\233\236\346\226\207\346\225\260.md.c6f185ef.lean.js"
index 64575301..411b8a41 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_9-\345\233\236\346\226\207\346\225\260.md.4a097db8.lean.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_9-\345\233\236\346\226\207\346\225\260.md.c6f185ef.lean.js"
@@ -1 +1 @@
-import{_ as l,c as p,a as s,b as n,d as o,e,o as t,r as c}from"./app.7354b8c5.js";const g=JSON.parse('{"title":"9-回文数","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/9-回文数.md"}'),r={name:"algorithm/LeetCode刷题/9-回文数.md"},y=s("h1",{id:"_9-回文数",tabindex:"-1"},[n("9-回文数 "),s("a",{class:"header-anchor",href:"#_9-回文数","aria-hidden":"true"},"#")],-1),F=e("",15);function D(C,i,A,d,f,h){const a=c("Badge");return t(),p("div",null,[y,s("p",null,[n("标签:"),o(a,{type:"tip",text:"数学"})]),F])}const _=l(r,[["render",D]]);export{g as __pageData,_ as default};
+import{_ as l,c as p,a as s,b as n,d as o,e,o as t,r as c}from"./app.4a806fb4.js";const g=JSON.parse('{"title":"9-回文数","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/9-回文数.md"}'),r={name:"algorithm/LeetCode刷题/9-回文数.md"},y=s("h1",{id:"_9-回文数",tabindex:"-1"},[n("9-回文数 "),s("a",{class:"header-anchor",href:"#_9-回文数","aria-hidden":"true"},"#")],-1),F=e("",15);function D(C,i,A,d,f,h){const a=c("Badge");return t(),p("div",null,[y,s("p",null,[n("标签:"),o(a,{type:"tip",text:"数学"})]),F])}const _=l(r,[["render",D]]);export{g as __pageData,_ as default};
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_977-\346\234\211\345\272\217\346\225\260\347\273\204\347\232\204\345\271\263\346\226\271.md.8f3b8803.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_977-\346\234\211\345\272\217\346\225\260\347\273\204\347\232\204\345\271\263\346\226\271.md.dcf73009.js"
similarity index 99%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_977-\346\234\211\345\272\217\346\225\260\347\273\204\347\232\204\345\271\263\346\226\271.md.8f3b8803.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_977-\346\234\211\345\272\217\346\225\260\347\273\204\347\232\204\345\271\263\346\226\271.md.dcf73009.js"
index 782d55f9..9cf77089 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_977-\346\234\211\345\272\217\346\225\260\347\273\204\347\232\204\345\271\263\346\226\271.md.8f3b8803.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_977-\346\234\211\345\272\217\346\225\260\347\273\204\347\232\204\345\271\263\346\226\271.md.dcf73009.js"
@@ -1,4 +1,4 @@
-import{_ as o,c as p,a as l,b as s,d as a,e,o as t,r as c}from"./app.7354b8c5.js";const g=JSON.parse('{"title":"977-有序数组的平方","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/977-有序数组的平方.md"}'),r={name:"algorithm/LeetCode刷题/977-有序数组的平方.md"},y=l("h1",{id:"_977-有序数组的平方",tabindex:"-1"},[s("977-有序数组的平方 "),l("a",{class:"header-anchor",href:"#_977-有序数组的平方","aria-hidden":"true"},"#")],-1),F=e(`

题目信息

题目地址977. 有序数组的平方

题目内容:

javascript
给你一个按非递减顺序排序的整数数组nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。
+import{_ as o,c as p,a as l,b as s,d as a,e,o as t,r as c}from"./app.4a806fb4.js";const g=JSON.parse('{"title":"977-有序数组的平方","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/977-有序数组的平方.md"}'),r={name:"algorithm/LeetCode刷题/977-有序数组的平方.md"},y=l("h1",{id:"_977-有序数组的平方",tabindex:"-1"},[s("977-有序数组的平方 "),l("a",{class:"header-anchor",href:"#_977-有序数组的平方","aria-hidden":"true"},"#")],-1),F=e(`

题目信息

题目地址977. 有序数组的平方

题目内容:

javascript
给你一个按非递减顺序排序的整数数组nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。
 
 示例 1
     输入:nums = [-4,-1,0,3,10]
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_977-\346\234\211\345\272\217\346\225\260\347\273\204\347\232\204\345\271\263\346\226\271.md.8f3b8803.lean.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_977-\346\234\211\345\272\217\346\225\260\347\273\204\347\232\204\345\271\263\346\226\271.md.dcf73009.lean.js"
similarity index 94%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_977-\346\234\211\345\272\217\346\225\260\347\273\204\347\232\204\345\271\263\346\226\271.md.8f3b8803.lean.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_977-\346\234\211\345\272\217\346\225\260\347\273\204\347\232\204\345\271\263\346\226\271.md.dcf73009.lean.js"
index 316bf760..3debc61d 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_977-\346\234\211\345\272\217\346\225\260\347\273\204\347\232\204\345\271\263\346\226\271.md.8f3b8803.lean.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_977-\346\234\211\345\272\217\346\225\260\347\273\204\347\232\204\345\271\263\346\226\271.md.dcf73009.lean.js"
@@ -1 +1 @@
-import{_ as o,c as p,a as l,b as s,d as a,e,o as t,r as c}from"./app.7354b8c5.js";const g=JSON.parse('{"title":"977-有序数组的平方","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/977-有序数组的平方.md"}'),r={name:"algorithm/LeetCode刷题/977-有序数组的平方.md"},y=l("h1",{id:"_977-有序数组的平方",tabindex:"-1"},[s("977-有序数组的平方 "),l("a",{class:"header-anchor",href:"#_977-有序数组的平方","aria-hidden":"true"},"#")],-1),F=e("",15);function C(D,i,A,d,f,h){const n=c("Badge");return t(),p("div",null,[y,l("p",null,[s("标签:"),a(n,{type:"tip",text:"数组"}),s(),a(n,{type:"tip",text:"双指针"}),s(),a(n,{type:"tip",text:"排序"})]),F])}const m=o(r,[["render",C]]);export{g as __pageData,m as default};
+import{_ as o,c as p,a as l,b as s,d as a,e,o as t,r as c}from"./app.4a806fb4.js";const g=JSON.parse('{"title":"977-有序数组的平方","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]},{"level":3,"title":"解法二","slug":"解法二","link":"#解法二","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/977-有序数组的平方.md"}'),r={name:"algorithm/LeetCode刷题/977-有序数组的平方.md"},y=l("h1",{id:"_977-有序数组的平方",tabindex:"-1"},[s("977-有序数组的平方 "),l("a",{class:"header-anchor",href:"#_977-有序数组的平方","aria-hidden":"true"},"#")],-1),F=e("",15);function C(D,i,A,d,f,h){const n=c("Badge");return t(),p("div",null,[y,l("p",null,[s("标签:"),a(n,{type:"tip",text:"数组"}),s(),a(n,{type:"tip",text:"双指针"}),s(),a(n,{type:"tip",text:"排序"})]),F])}const m=o(r,[["render",C]]);export{g as __pageData,m as default};
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_LCR-018-\351\252\214\350\257\201\345\233\236\346\226\207\344\270\262.md.b5f7abf4.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_LCR-018-\351\252\214\350\257\201\345\233\236\346\226\207\344\270\262.md.ddcfa306.js"
similarity index 99%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_LCR-018-\351\252\214\350\257\201\345\233\236\346\226\207\344\270\262.md.b5f7abf4.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_LCR-018-\351\252\214\350\257\201\345\233\236\346\226\207\344\270\262.md.ddcfa306.js"
index e225a8b5..75113932 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_LCR-018-\351\252\214\350\257\201\345\233\236\346\226\207\344\270\262.md.b5f7abf4.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_LCR-018-\351\252\214\350\257\201\345\233\236\346\226\207\344\270\262.md.ddcfa306.js"
@@ -1,4 +1,4 @@
-import{_ as o,c as p,a as s,b as a,d as l,e,o as t,r as c}from"./app.7354b8c5.js";const u=JSON.parse('{"title":"LCR-018-验证回文串","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/LCR-018-验证回文串.md"}'),r={name:"algorithm/LeetCode刷题/LCR-018-验证回文串.md"},y=s("h1",{id:"lcr-018-验证回文串",tabindex:"-1"},[a("LCR-018-验证回文串 "),s("a",{class:"header-anchor",href:"#lcr-018-验证回文串","aria-hidden":"true"},"#")],-1),F=e(`

题目信息

题目地址LCR-018-验证回文串

题目内容:

javascript
给定一个字符串s,验证s是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
+import{_ as o,c as p,a as s,b as a,d as l,e,o as t,r as c}from"./app.4a806fb4.js";const u=JSON.parse('{"title":"LCR-018-验证回文串","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/LCR-018-验证回文串.md"}'),r={name:"algorithm/LeetCode刷题/LCR-018-验证回文串.md"},y=s("h1",{id:"lcr-018-验证回文串",tabindex:"-1"},[a("LCR-018-验证回文串 "),s("a",{class:"header-anchor",href:"#lcr-018-验证回文串","aria-hidden":"true"},"#")],-1),F=e(`

题目信息

题目地址LCR-018-验证回文串

题目内容:

javascript
给定一个字符串s,验证s是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
 
 本题中,将空字符串定义为有效的回文串。
 
diff --git "a/assets/algorithm_LeetCode\345\210\267\351\242\230_LCR-018-\351\252\214\350\257\201\345\233\236\346\226\207\344\270\262.md.b5f7abf4.lean.js" "b/assets/algorithm_LeetCode\345\210\267\351\242\230_LCR-018-\351\252\214\350\257\201\345\233\236\346\226\207\344\270\262.md.ddcfa306.lean.js"
similarity index 93%
rename from "assets/algorithm_LeetCode\345\210\267\351\242\230_LCR-018-\351\252\214\350\257\201\345\233\236\346\226\207\344\270\262.md.b5f7abf4.lean.js"
rename to "assets/algorithm_LeetCode\345\210\267\351\242\230_LCR-018-\351\252\214\350\257\201\345\233\236\346\226\207\344\270\262.md.ddcfa306.lean.js"
index 326c3b39..1dcacd3e 100644
--- "a/assets/algorithm_LeetCode\345\210\267\351\242\230_LCR-018-\351\252\214\350\257\201\345\233\236\346\226\207\344\270\262.md.b5f7abf4.lean.js"
+++ "b/assets/algorithm_LeetCode\345\210\267\351\242\230_LCR-018-\351\252\214\350\257\201\345\233\236\346\226\207\344\270\262.md.ddcfa306.lean.js"
@@ -1 +1 @@
-import{_ as o,c as p,a as s,b as a,d as l,e,o as t,r as c}from"./app.7354b8c5.js";const u=JSON.parse('{"title":"LCR-018-验证回文串","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/LCR-018-验证回文串.md"}'),r={name:"algorithm/LeetCode刷题/LCR-018-验证回文串.md"},y=s("h1",{id:"lcr-018-验证回文串",tabindex:"-1"},[a("LCR-018-验证回文串 "),s("a",{class:"header-anchor",href:"#lcr-018-验证回文串","aria-hidden":"true"},"#")],-1),F=e("",10);function i(D,C,A,d,h,f){const n=c("Badge");return t(),p("div",null,[y,s("p",null,[a("标签:"),l(n,{type:"tip",text:"双指针"}),a(),l(n,{type:"tip",text:"字符串"})]),F])}const _=o(r,[["render",i]]);export{u as __pageData,_ as default};
+import{_ as o,c as p,a as s,b as a,d as l,e,o as t,r as c}from"./app.4a806fb4.js";const u=JSON.parse('{"title":"LCR-018-验证回文串","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"题目信息","slug":"题目信息","link":"#题目信息","children":[]},{"level":2,"title":"题解","slug":"题解","link":"#题解","children":[{"level":3,"title":"解法一","slug":"解法一","link":"#解法一","children":[]}]}],"relativePath":"algorithm/LeetCode刷题/LCR-018-验证回文串.md"}'),r={name:"algorithm/LeetCode刷题/LCR-018-验证回文串.md"},y=s("h1",{id:"lcr-018-验证回文串",tabindex:"-1"},[a("LCR-018-验证回文串 "),s("a",{class:"header-anchor",href:"#lcr-018-验证回文串","aria-hidden":"true"},"#")],-1),F=e("",10);function i(D,C,A,d,h,f){const n=c("Badge");return t(),p("div",null,[y,s("p",null,[a("标签:"),l(n,{type:"tip",text:"双指针"}),a(),l(n,{type:"tip",text:"字符串"})]),F])}const _=o(r,[["render",i]]);export{u as __pageData,_ as default};
diff --git a/assets/app.7354b8c5.js b/assets/app.4a806fb4.js
similarity index 80%
rename from assets/app.7354b8c5.js
rename to assets/app.4a806fb4.js
index 7e4c4067..a2dbe561 100644
--- a/assets/app.7354b8c5.js
+++ b/assets/app.4a806fb4.js
@@ -1,4 +1,4 @@
-function Fs(e,t){const n=Object.create(null),s=e.split(",");for(let o=0;o!!n[o.toLowerCase()]:o=>!!n[o]}function Hs(e){if(W(e)){const t={};for(let n=0;n{if(n){const s=n.split(Hl);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function ge(e){let t="";if(ke(e))t=e;else if(W(e))for(let n=0;nke(e)?e:e==null?"":W(e)||ve(e)&&(e.toString===vi||!X(e.toString))?JSON.stringify(e,pi,2):String(e),pi=(e,t)=>t&&t.__v_isRef?pi(e,t.value):Ft(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,o])=>(n[`${s} =>`]=o,n),{})}:_i(t)?{[`Set(${t.size})`]:[...t.values()]}:ve(t)&&!W(t)&&!mi(t)?String(t):t,me={},Ot=[],ze=()=>{},jl=()=>!1,zl=/^on[^a-z]/,vn=e=>zl.test(e),Rs=e=>e.startsWith("onUpdate:"),we=Object.assign,Ds=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Kl=Object.prototype.hasOwnProperty,ie=(e,t)=>Kl.call(e,t),W=Array.isArray,Ft=e=>zn(e)==="[object Map]",_i=e=>zn(e)==="[object Set]",X=e=>typeof e=="function",ke=e=>typeof e=="string",Gs=e=>typeof e=="symbol",ve=e=>e!==null&&typeof e=="object",gi=e=>ve(e)&&X(e.then)&&X(e.catch),vi=Object.prototype.toString,zn=e=>vi.call(e),ql=e=>zn(e).slice(8,-1),mi=e=>zn(e)==="[object Object]",Us=e=>ke(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,nn=Fs(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Kn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Wl=/-(\w)/g,Xe=Kn(e=>e.replace(Wl,(t,n)=>n?n.toUpperCase():"")),Ql=/\B([A-Z])/g,Yt=Kn(e=>e.replace(Ql,"-$1").toLowerCase()),qn=Kn(e=>e.charAt(0).toUpperCase()+e.slice(1)),cs=Kn(e=>e?`on${qn(e)}`:""),cn=(e,t)=>!Object.is(e,t),us=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},Yl=e=>{const t=parseFloat(e);return isNaN(t)?e:t},Jl=e=>{const t=ke(e)?Number(e):NaN;return isNaN(t)?e:t};let yo;const Xl=()=>yo||(yo=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});let Ne;class Zl{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this.parent=Ne,!t&&Ne&&(this.index=(Ne.scopes||(Ne.scopes=[])).push(this)-1)}get active(){return this._active}run(t){if(this._active){const n=Ne;try{return Ne=this,t()}finally{Ne=n}}}on(){Ne=this}off(){Ne=this.parent}stop(t){if(this._active){let n,s;for(n=0,s=this.effects.length;n{const t=new Set(e);return t.w=0,t.n=0,t},yi=e=>(e.w&pt)>0,ki=e=>(e.n&pt)>0,nr=({deps:e})=>{if(e.length)for(let t=0;t{const{deps:t}=e;if(t.length){let n=0;for(let s=0;s{(f==="length"||f>=a)&&r.push(u)})}else switch(n!==void 0&&r.push(l.get(n)),t){case"add":W(e)?Us(n)&&r.push(l.get("length")):(r.push(l.get(Tt)),Ft(e)&&r.push(l.get(ws)));break;case"delete":W(e)||(r.push(l.get(Tt)),Ft(e)&&r.push(l.get(ws)));break;case"set":Ft(e)&&r.push(l.get(Tt));break}if(r.length===1)r[0]&&$s(r[0]);else{const a=[];for(const u of r)u&&a.push(...u);$s(js(a))}}function $s(e,t){const n=W(e)?e:[...e];for(const s of n)s.computed&&xo(s);for(const s of n)s.computed||xo(s)}function xo(e,t){(e!==Ue||e.allowRecurse)&&(e.scheduler?e.scheduler():e.run())}const or=Fs("__proto__,__v_isRef,__isVue"),$i=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Gs)),ir=Ks(),lr=Ks(!1,!0),rr=Ks(!0),wo=ar();function ar(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const s=ae(this);for(let i=0,l=this.length;i{e[t]=function(...n){Jt();const s=ae(this)[t].apply(this,n);return Xt(),s}}),e}function cr(e){const t=ae(this);return Me(t,"has",e),t.hasOwnProperty(e)}function Ks(e=!1,t=!1){return function(s,o,i){if(o==="__v_isReactive")return!e;if(o==="__v_isReadonly")return e;if(o==="__v_isShallow")return t;if(o==="__v_raw"&&i===(e?t?Cr:Ti:t?Si:Li).get(s))return s;const l=W(s);if(!e){if(l&&ie(wo,o))return Reflect.get(wo,o,i);if(o==="hasOwnProperty")return cr}const r=Reflect.get(s,o,i);return(Gs(o)?$i.has(o):or(o))||(e||Me(s,"get",o),t)?r:Pe(r)?l&&Us(o)?r:r.value:ve(r)?e?Qs(r):Qn(r):r}}const ur=Ci(),dr=Ci(!0);function Ci(e=!1){return function(n,s,o,i){let l=n[s];if(Kt(l)&&Pe(l)&&!Pe(o))return!1;if(!e&&(!Nn(o)&&!Kt(o)&&(l=ae(l),o=ae(o)),!W(n)&&Pe(l)&&!Pe(o)))return l.value=o,!0;const r=W(n)&&Us(s)?Number(s)e,Wn=e=>Reflect.getPrototypeOf(e);function wn(e,t,n=!1,s=!1){e=e.__v_raw;const o=ae(e),i=ae(t);n||(t!==i&&Me(o,"get",t),Me(o,"get",i));const{has:l}=Wn(o),r=s?qs:n?Js:un;if(l.call(o,t))return r(e.get(t));if(l.call(o,i))return r(e.get(i));e!==o&&e.get(t)}function $n(e,t=!1){const n=this.__v_raw,s=ae(n),o=ae(e);return t||(e!==o&&Me(s,"has",e),Me(s,"has",o)),e===o?n.has(e):n.has(e)||n.has(o)}function Cn(e,t=!1){return e=e.__v_raw,!t&&Me(ae(e),"iterate",Tt),Reflect.get(e,"size",e)}function $o(e){e=ae(e);const t=ae(this);return Wn(t).has.call(t,e)||(t.add(e),st(t,"add",e,e)),this}function Co(e,t){t=ae(t);const n=ae(this),{has:s,get:o}=Wn(n);let i=s.call(n,e);i||(e=ae(e),i=s.call(n,e));const l=o.call(n,e);return n.set(e,t),i?cn(t,l)&&st(n,"set",e,t):st(n,"add",e,t),this}function Po(e){const t=ae(this),{has:n,get:s}=Wn(t);let o=n.call(t,e);o||(e=ae(e),o=n.call(t,e)),s&&s.call(t,e);const i=t.delete(e);return o&&st(t,"delete",e,void 0),i}function Lo(){const e=ae(this),t=e.size!==0,n=e.clear();return t&&st(e,"clear",void 0,void 0),n}function Pn(e,t){return function(s,o){const i=this,l=i.__v_raw,r=ae(l),a=t?qs:e?Js:un;return!e&&Me(r,"iterate",Tt),l.forEach((u,f)=>s.call(o,a(u),a(f),i))}}function Ln(e,t,n){return function(...s){const o=this.__v_raw,i=ae(o),l=Ft(i),r=e==="entries"||e===Symbol.iterator&&l,a=e==="keys"&&l,u=o[e](...s),f=n?qs:t?Js:un;return!t&&Me(i,"iterate",a?ws:Tt),{next(){const{value:_,done:g}=u.next();return g?{value:_,done:g}:{value:r?[f(_[0]),f(_[1])]:f(_),done:g}},[Symbol.iterator](){return this}}}}function lt(e){return function(...t){return e==="delete"?!1:this}}function vr(){const e={get(i){return wn(this,i)},get size(){return Cn(this)},has:$n,add:$o,set:Co,delete:Po,clear:Lo,forEach:Pn(!1,!1)},t={get(i){return wn(this,i,!1,!0)},get size(){return Cn(this)},has:$n,add:$o,set:Co,delete:Po,clear:Lo,forEach:Pn(!1,!0)},n={get(i){return wn(this,i,!0)},get size(){return Cn(this,!0)},has(i){return $n.call(this,i,!0)},add:lt("add"),set:lt("set"),delete:lt("delete"),clear:lt("clear"),forEach:Pn(!0,!1)},s={get(i){return wn(this,i,!0,!0)},get size(){return Cn(this,!0)},has(i){return $n.call(this,i,!0)},add:lt("add"),set:lt("set"),delete:lt("delete"),clear:lt("clear"),forEach:Pn(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(i=>{e[i]=Ln(i,!1,!1),n[i]=Ln(i,!0,!1),t[i]=Ln(i,!1,!0),s[i]=Ln(i,!0,!0)}),[e,n,t,s]}const[mr,br,yr,kr]=vr();function Ws(e,t){const n=t?e?kr:yr:e?br:mr;return(s,o,i)=>o==="__v_isReactive"?!e:o==="__v_isReadonly"?e:o==="__v_raw"?s:Reflect.get(ie(n,o)&&o in s?n:s,o,i)}const xr={get:Ws(!1,!1)},wr={get:Ws(!1,!0)},$r={get:Ws(!0,!1)},Li=new WeakMap,Si=new WeakMap,Ti=new WeakMap,Cr=new WeakMap;function Pr(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Lr(e){return e.__v_skip||!Object.isExtensible(e)?0:Pr(ql(e))}function Qn(e){return Kt(e)?e:Ys(e,!1,Pi,xr,Li)}function Sr(e){return Ys(e,!1,gr,wr,Si)}function Qs(e){return Ys(e,!0,_r,$r,Ti)}function Ys(e,t,n,s,o){if(!ve(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=o.get(e);if(i)return i;const l=Lr(e);if(l===0)return e;const r=new Proxy(e,l===2?s:n);return o.set(e,r),r}function Ht(e){return Kt(e)?Ht(e.__v_raw):!!(e&&e.__v_isReactive)}function Kt(e){return!!(e&&e.__v_isReadonly)}function Nn(e){return!!(e&&e.__v_isShallow)}function Vi(e){return Ht(e)||Kt(e)}function ae(e){const t=e&&e.__v_raw;return t?ae(t):e}function sn(e){return In(e,"__v_skip",!0),e}const un=e=>ve(e)?Qn(e):e,Js=e=>ve(e)?Qs(e):e;function Ei(e){ft&&Ue&&(e=ae(e),wi(e.dep||(e.dep=js())))}function Mi(e,t){e=ae(e);const n=e.dep;n&&$s(n)}function Pe(e){return!!(e&&e.__v_isRef===!0)}function le(e){return Ai(e,!1)}function Tr(e){return Ai(e,!0)}function Ai(e,t){return Pe(e)?e:new Vr(e,t)}class Vr{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:ae(t),this._value=n?t:un(t)}get value(){return Ei(this),this._value}set value(t){const n=this.__v_isShallow||Nn(t)||Kt(t);t=n?t:ae(t),cn(t,this._rawValue)&&(this._rawValue=t,this._value=n?t:un(t),Mi(this))}}function p(e){return Pe(e)?e.value:e}const Er={get:(e,t,n)=>p(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const o=e[t];return Pe(o)&&!Pe(n)?(o.value=n,!0):Reflect.set(e,t,n,s)}};function Ii(e){return Ht(e)?e:new Proxy(e,Er)}var Ni;class Mr{constructor(t,n,s,o){this._setter=n,this.dep=void 0,this.__v_isRef=!0,this[Ni]=!1,this._dirty=!0,this.effect=new zs(t,()=>{this._dirty||(this._dirty=!0,Mi(this))}),this.effect.computed=this,this.effect.active=this._cacheable=!o,this.__v_isReadonly=s}get value(){const t=ae(this);return Ei(t),(t._dirty||!t._cacheable)&&(t._dirty=!1,t._value=t.effect.run()),t._value}set value(t){this._setter(t)}}Ni="__v_isReadonly";function Ar(e,t,n=!1){let s,o;const i=X(e);return i?(s=e,o=ze):(s=e.get,o=e.set),new Mr(s,o,i||!o,n)}function ht(e,t,n,s){let o;try{o=s?e(...s):e()}catch(i){mn(i,t,n)}return o}function Re(e,t,n,s){if(X(e)){const i=ht(e,t,n,s);return i&&gi(i)&&i.catch(l=>{mn(l,t,n)}),i}const o=[];for(let i=0;i>>1;fn(Ce[s])Ye&&Ce.splice(t,1)}function Or(e){W(e)?Rt.push(...e):(!nt||!nt.includes(e,e.allowRecurse?Ct+1:Ct))&&Rt.push(e),Oi()}function So(e,t=dn?Ye+1:0){for(;tfn(n)-fn(s)),Ct=0;Cte.id==null?1/0:e.id,Fr=(e,t)=>{const n=fn(e)-fn(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function Fi(e){Cs=!1,dn=!0,Ce.sort(Fr);const t=ze;try{for(Ye=0;Yeke(y)?y.trim():y)),_&&(o=n.map(Yl))}let r,a=s[r=cs(t)]||s[r=cs(Xe(t))];!a&&i&&(a=s[r=cs(Yt(t))]),a&&Re(a,e,6,o);const u=s[r+"Once"];if(u){if(!e.emitted)e.emitted={};else if(e.emitted[r])return;e.emitted[r]=!0,Re(u,e,6,o)}}function Hi(e,t,n=!1){const s=t.emitsCache,o=s.get(e);if(o!==void 0)return o;const i=e.emits;let l={},r=!1;if(!X(e)){const a=u=>{const f=Hi(u,t,!0);f&&(r=!0,we(l,f))};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}return!i&&!r?(ve(e)&&s.set(e,null),null):(W(i)?i.forEach(a=>l[a]=null):we(l,i),ve(e)&&s.set(e,l),l)}function Jn(e,t){return!e||!vn(t)?!1:(t=t.slice(2).replace(/Once$/,""),ie(e,t[0].toLowerCase()+t.slice(1))||ie(e,Yt(t))||ie(e,t))}let Le=null,Xn=null;function On(e){const t=Le;return Le=e,Xn=e&&e.type.__scopeId||null,t}function Ze(e){Xn=e}function et(){Xn=null}function I(e,t=Le,n){if(!t||e._n)return e;const s=(...o)=>{s._d&&Fo(-1);const i=On(t);let l;try{l=e(...o)}finally{On(i),s._d&&Fo(1)}return l};return s._n=!0,s._c=!0,s._d=!0,s}function ds(e){const{type:t,vnode:n,proxy:s,withProxy:o,props:i,propsOptions:[l],slots:r,attrs:a,emit:u,render:f,renderCache:_,data:g,setupState:y,ctx:T,inheritAttrs:M}=e;let K,m;const C=On(e);try{if(n.shapeFlag&4){const Y=o||s;K=Ge(f.call(Y,Y,_,i,y,g,T)),m=a}else{const Y=t;K=Ge(Y.length>1?Y(i,{attrs:a,slots:r,emit:u}):Y(i,null)),m=t.props?a:Rr(a)}}catch(Y){ln.length=0,mn(Y,e,1),K=V(Be)}let B=K;if(m&&M!==!1){const Y=Object.keys(m),{shapeFlag:te}=B;Y.length&&te&7&&(l&&Y.some(Rs)&&(m=Dr(m,l)),B=_t(B,m))}return n.dirs&&(B=_t(B),B.dirs=B.dirs?B.dirs.concat(n.dirs):n.dirs),n.transition&&(B.transition=n.transition),K=B,On(C),K}const Rr=e=>{let t;for(const n in e)(n==="class"||n==="style"||vn(n))&&((t||(t={}))[n]=e[n]);return t},Dr=(e,t)=>{const n={};for(const s in e)(!Rs(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function Gr(e,t,n){const{props:s,children:o,component:i}=e,{props:l,children:r,patchFlag:a}=t,u=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&a>=0){if(a&1024)return!0;if(a&16)return s?To(s,l,u):!!l;if(a&8){const f=t.dynamicProps;for(let _=0;_e.__isSuspense;function Ri(e,t){t&&t.pendingBranch?W(e)?t.effects.push(...e):t.effects.push(e):Or(e)}function Dt(e,t){if(ye){let n=ye.provides;const s=ye.parent&&ye.parent.provides;s===n&&(n=ye.provides=Object.create(s)),n[e]=t}}function Ke(e,t,n=!1){const s=ye||Le;if(s){const o=s.parent==null?s.vnode.appContext&&s.vnode.appContext.provides:s.parent.provides;if(o&&e in o)return o[e];if(arguments.length>1)return n&&X(t)?t.call(s.proxy):t}}function Et(e,t){return Zn(e,null,t)}function Di(e,t){return Zn(e,null,{flush:"post"})}const Sn={};function Je(e,t,n){return Zn(e,t,n)}function Zn(e,t,{immediate:n,deep:s,flush:o,onTrack:i,onTrigger:l}=me){const r=bi()===(ye==null?void 0:ye.scope)?ye:null;let a,u=!1,f=!1;if(Pe(e)?(a=()=>e.value,u=Nn(e)):Ht(e)?(a=()=>e,s=!0):W(e)?(f=!0,u=e.some(B=>Ht(B)||Nn(B)),a=()=>e.map(B=>{if(Pe(B))return B.value;if(Ht(B))return Bt(B);if(X(B))return ht(B,r,2)})):X(e)?t?a=()=>ht(e,r,2):a=()=>{if(!(r&&r.isUnmounted))return _&&_(),Re(e,r,3,[g])}:a=ze,t&&s){const B=a;a=()=>Bt(B())}let _,g=B=>{_=m.onStop=()=>{ht(B,r,4)}},y;if(Qt)if(g=ze,t?n&&Re(t,r,3,[a(),f?[]:void 0,g]):a(),o==="sync"){const B=Oa();y=B.__watcherHandles||(B.__watcherHandles=[])}else return ze;let T=f?new Array(e.length).fill(Sn):Sn;const M=()=>{if(m.active)if(t){const B=m.run();(s||u||(f?B.some((Y,te)=>cn(Y,T[te])):cn(B,T)))&&(_&&_(),Re(t,r,3,[B,T===Sn?void 0:f&&T[0]===Sn?[]:T,g]),T=B)}else m.run()};M.allowRecurse=!!t;let K;o==="sync"?K=M:o==="post"?K=()=>Ee(M,r&&r.suspense):(M.pre=!0,r&&(M.id=r.uid),K=()=>Yn(M));const m=new zs(a,K);t?n?M():T=m.run():o==="post"?Ee(m.run.bind(m),r&&r.suspense):m.run();const C=()=>{m.stop(),r&&r.scope&&Ds(r.scope.effects,m)};return y&&y.push(C),C}function zr(e,t,n){const s=this.proxy,o=ke(e)?e.includes(".")?Gi(s,e):()=>s[e]:e.bind(s,s);let i;X(t)?i=t:(i=t.handler,n=t);const l=ye;Wt(this);const r=Zn(o,i.bind(s),n);return l?Wt(l):Vt(),r}function Gi(e,t){const n=t.split(".");return()=>{let s=e;for(let o=0;o{Bt(n,t)});else if(mi(e))for(const n in e)Bt(e[n],t);return e}function Kr(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return Oe(()=>{e.isMounted=!0}),qi(()=>{e.isUnmounting=!0}),e}const Fe=[Function,Array],qr={name:"BaseTransition",props:{mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Fe,onEnter:Fe,onAfterEnter:Fe,onEnterCancelled:Fe,onBeforeLeave:Fe,onLeave:Fe,onAfterLeave:Fe,onLeaveCancelled:Fe,onBeforeAppear:Fe,onAppear:Fe,onAfterAppear:Fe,onAppearCancelled:Fe},setup(e,{slots:t}){const n=ns(),s=Kr();let o;return()=>{const i=t.default&&zi(t.default(),!0);if(!i||!i.length)return;let l=i[0];if(i.length>1){for(const M of i)if(M.type!==Be){l=M;break}}const r=ae(e),{mode:a}=r;if(s.isLeaving)return fs(l);const u=Vo(l);if(!u)return fs(l);const f=Ps(u,r,s,n);Ls(u,f);const _=n.subTree,g=_&&Vo(_);let y=!1;const{getTransitionKey:T}=u.type;if(T){const M=T();o===void 0?o=M:M!==o&&(o=M,y=!0)}if(g&&g.type!==Be&&(!Pt(u,g)||y)){const M=Ps(g,r,s,n);if(Ls(g,M),a==="out-in")return s.isLeaving=!0,M.afterLeave=()=>{s.isLeaving=!1,n.update.active!==!1&&n.update()},fs(l);a==="in-out"&&u.type!==Be&&(M.delayLeave=(K,m,C)=>{const B=ji(s,g);B[String(g.key)]=g,K._leaveCb=()=>{m(),K._leaveCb=void 0,delete f.delayedLeave},f.delayedLeave=C})}return l}}},Ui=qr;function ji(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function Ps(e,t,n,s){const{appear:o,mode:i,persisted:l=!1,onBeforeEnter:r,onEnter:a,onAfterEnter:u,onEnterCancelled:f,onBeforeLeave:_,onLeave:g,onAfterLeave:y,onLeaveCancelled:T,onBeforeAppear:M,onAppear:K,onAfterAppear:m,onAppearCancelled:C}=t,B=String(e.key),Y=ji(n,e),te=(N,ee)=>{N&&Re(N,s,9,ee)},he=(N,ee)=>{const J=ee[1];te(N,ee),W(N)?N.every(re=>re.length<=1)&&J():N.length<=1&&J()},oe={mode:i,persisted:l,beforeEnter(N){let ee=r;if(!n.isMounted)if(o)ee=M||r;else return;N._leaveCb&&N._leaveCb(!0);const J=Y[B];J&&Pt(e,J)&&J.el._leaveCb&&J.el._leaveCb(),te(ee,[N])},enter(N){let ee=a,J=u,re=f;if(!n.isMounted)if(o)ee=K||a,J=m||u,re=C||f;else return;let O=!1;const ne=N._enterCb=G=>{O||(O=!0,G?te(re,[N]):te(J,[N]),oe.delayedLeave&&oe.delayedLeave(),N._enterCb=void 0)};ee?he(ee,[N,ne]):ne()},leave(N,ee){const J=String(e.key);if(N._enterCb&&N._enterCb(!0),n.isUnmounting)return ee();te(_,[N]);let re=!1;const O=N._leaveCb=ne=>{re||(re=!0,ee(),ne?te(T,[N]):te(y,[N]),N._leaveCb=void 0,Y[J]===e&&delete Y[J])};Y[J]=e,g?he(g,[N,O]):O()},clone(N){return Ps(N,t,n,s)}};return oe}function fs(e){if(bn(e))return e=_t(e),e.children=null,e}function Vo(e){return bn(e)?e.children?e.children[0]:void 0:e}function Ls(e,t){e.shapeFlag&6&&e.component?Ls(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function zi(e,t=!1,n){let s=[],o=0;for(let i=0;i1)for(let i=0;i!!e.type.__asyncLoader;function Wr(e){X(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:s,delay:o=200,timeout:i,suspensible:l=!0,onError:r}=e;let a=null,u,f=0;const _=()=>(f++,a=null,g()),g=()=>{let y;return a||(y=a=t().catch(T=>{if(T=T instanceof Error?T:new Error(String(T)),r)return new Promise((M,K)=>{r(T,()=>M(_()),()=>K(T),f+1)});throw T}).then(T=>y!==a&&a?a:(T&&(T.__esModule||T[Symbol.toStringTag]==="Module")&&(T=T.default),u=T,T)))};return R({name:"AsyncComponentWrapper",__asyncLoader:g,get __asyncResolved(){return u},setup(){const y=ye;if(u)return()=>hs(u,y);const T=C=>{a=null,mn(C,y,13,!s)};if(l&&y.suspense||Qt)return g().then(C=>()=>hs(C,y)).catch(C=>(T(C),()=>s?V(s,{error:C}):null));const M=le(!1),K=le(),m=le(!!o);return o&&setTimeout(()=>{m.value=!1},o),i!=null&&setTimeout(()=>{if(!M.value&&!K.value){const C=new Error(`Async component timed out after ${i}ms.`);T(C),K.value=C}},i),g().then(()=>{M.value=!0,y.parent&&bn(y.parent.vnode)&&Yn(y.parent.update)}).catch(C=>{T(C),K.value=C}),()=>{if(M.value&&u)return hs(u,y);if(K.value&&s)return V(s,{error:K.value});if(n&&!m.value)return V(n)}}})}function hs(e,t){const{ref:n,props:s,children:o,ce:i}=t.vnode,l=V(e,s,o);return l.ref=n,l.ce=i,delete t.vnode.ce,l}const bn=e=>e.type.__isKeepAlive;function Qr(e,t){Ki(e,"a",t)}function Yr(e,t){Ki(e,"da",t)}function Ki(e,t,n=ye){const s=e.__wdc||(e.__wdc=()=>{let o=n;for(;o;){if(o.isDeactivated)return;o=o.parent}return e()});if(es(t,s,n),n){let o=n.parent;for(;o&&o.parent;)bn(o.parent.vnode)&&Jr(s,t,n,o),o=o.parent}}function Jr(e,t,n,s){const o=es(t,e,s,!0);gt(()=>{Ds(s[t],o)},n)}function es(e,t,n=ye,s=!1){if(n){const o=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...l)=>{if(n.isUnmounted)return;Jt(),Wt(n);const r=Re(t,n,e,l);return Vt(),Xt(),r});return s?o.unshift(i):o.push(i),i}}const ot=e=>(t,n=ye)=>(!Qt||e==="sp")&&es(e,(...s)=>t(...s),n),Xr=ot("bm"),Oe=ot("m"),Zr=ot("bu"),eo=ot("u"),qi=ot("bum"),gt=ot("um"),ea=ot("sp"),ta=ot("rtg"),na=ot("rtc");function sa(e,t=ye){es("ec",e,t)}function Qe(e,t,n,s){const o=e.dirs,i=t&&t.dirs;for(let l=0;lt(l,r,void 0,i&&i[r]));else{const l=Object.keys(e);o=new Array(l.length);for(let r=0,a=l.length;rRn(t)?!(t.type===Be||t.type===Z&&!Yi(t.children)):!0)?e:null}const Ss=e=>e?rl(e)?io(e)||e.proxy:Ss(e.parent):null,on=we(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Ss(e.parent),$root:e=>Ss(e.root),$emit:e=>e.emit,$options:e=>no(e),$forceUpdate:e=>e.f||(e.f=()=>Yn(e.update)),$nextTick:e=>e.n||(e.n=Zs.bind(e.proxy)),$watch:e=>zr.bind(e)}),ps=(e,t)=>e!==me&&!e.__isScriptSetup&&ie(e,t),oa={get({_:e},t){const{ctx:n,setupState:s,data:o,props:i,accessCache:l,type:r,appContext:a}=e;let u;if(t[0]!=="$"){const y=l[t];if(y!==void 0)switch(y){case 1:return s[t];case 2:return o[t];case 4:return n[t];case 3:return i[t]}else{if(ps(s,t))return l[t]=1,s[t];if(o!==me&&ie(o,t))return l[t]=2,o[t];if((u=e.propsOptions[0])&&ie(u,t))return l[t]=3,i[t];if(n!==me&&ie(n,t))return l[t]=4,n[t];Ts&&(l[t]=0)}}const f=on[t];let _,g;if(f)return t==="$attrs"&&Me(e,"get",t),f(e);if((_=r.__cssModules)&&(_=_[t]))return _;if(n!==me&&ie(n,t))return l[t]=4,n[t];if(g=a.config.globalProperties,ie(g,t))return g[t]},set({_:e},t,n){const{data:s,setupState:o,ctx:i}=e;return ps(o,t)?(o[t]=n,!0):s!==me&&ie(s,t)?(s[t]=n,!0):ie(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:o,propsOptions:i}},l){let r;return!!n[l]||e!==me&&ie(e,l)||ps(t,l)||(r=i[0])&&ie(r,l)||ie(s,l)||ie(on,l)||ie(o.config.globalProperties,l)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:ie(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};let Ts=!0;function ia(e){const t=no(e),n=e.proxy,s=e.ctx;Ts=!1,t.beforeCreate&&Mo(t.beforeCreate,e,"bc");const{data:o,computed:i,methods:l,watch:r,provide:a,inject:u,created:f,beforeMount:_,mounted:g,beforeUpdate:y,updated:T,activated:M,deactivated:K,beforeDestroy:m,beforeUnmount:C,destroyed:B,unmounted:Y,render:te,renderTracked:he,renderTriggered:oe,errorCaptured:N,serverPrefetch:ee,expose:J,inheritAttrs:re,components:O,directives:ne,filters:G}=t;if(u&&la(u,s,null,e.appContext.config.unwrapInjectedRef),l)for(const be in l){const pe=l[be];X(pe)&&(s[be]=pe.bind(n))}if(o){const be=o.call(n,n);ve(be)&&(e.data=Qn(be))}if(Ts=!0,i)for(const be in i){const pe=i[be],bt=X(pe)?pe.bind(n,n):X(pe.get)?pe.get.bind(n,n):ze,kn=!X(pe)&&X(pe.set)?pe.set.bind(n):ze,yt=z({get:bt,set:kn});Object.defineProperty(s,be,{enumerable:!0,configurable:!0,get:()=>yt.value,set:qe=>yt.value=qe})}if(r)for(const be in r)Ji(r[be],s,n,be);if(a){const be=X(a)?a.call(n):a;Reflect.ownKeys(be).forEach(pe=>{Dt(pe,be[pe])})}f&&Mo(f,e,"c");function de(be,pe){W(pe)?pe.forEach(bt=>be(bt.bind(n))):pe&&be(pe.bind(n))}if(de(Xr,_),de(Oe,g),de(Zr,y),de(eo,T),de(Qr,M),de(Yr,K),de(sa,N),de(na,he),de(ta,oe),de(qi,C),de(gt,Y),de(ea,ee),W(J))if(J.length){const be=e.exposed||(e.exposed={});J.forEach(pe=>{Object.defineProperty(be,pe,{get:()=>n[pe],set:bt=>n[pe]=bt})})}else e.exposed||(e.exposed={});te&&e.render===ze&&(e.render=te),re!=null&&(e.inheritAttrs=re),O&&(e.components=O),ne&&(e.directives=ne)}function la(e,t,n=ze,s=!1){W(e)&&(e=Vs(e));for(const o in e){const i=e[o];let l;ve(i)?"default"in i?l=Ke(i.from||o,i.default,!0):l=Ke(i.from||o):l=Ke(i),Pe(l)&&s?Object.defineProperty(t,o,{enumerable:!0,configurable:!0,get:()=>l.value,set:r=>l.value=r}):t[o]=l}}function Mo(e,t,n){Re(W(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function Ji(e,t,n,s){const o=s.includes(".")?Gi(n,s):()=>n[s];if(ke(e)){const i=t[e];X(i)&&Je(o,i)}else if(X(e))Je(o,e.bind(n));else if(ve(e))if(W(e))e.forEach(i=>Ji(i,t,n,s));else{const i=X(e.handler)?e.handler.bind(n):t[e.handler];X(i)&&Je(o,i,e)}}function no(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:o,optionsCache:i,config:{optionMergeStrategies:l}}=e.appContext,r=i.get(t);let a;return r?a=r:!o.length&&!n&&!s?a=t:(a={},o.length&&o.forEach(u=>Fn(a,u,l,!0)),Fn(a,t,l)),ve(t)&&i.set(t,a),a}function Fn(e,t,n,s=!1){const{mixins:o,extends:i}=t;i&&Fn(e,i,n,!0),o&&o.forEach(l=>Fn(e,l,n,!0));for(const l in t)if(!(s&&l==="expose")){const r=ra[l]||n&&n[l];e[l]=r?r(e[l],t[l]):t[l]}return e}const ra={data:Ao,props:$t,emits:$t,methods:$t,computed:$t,beforeCreate:Te,created:Te,beforeMount:Te,mounted:Te,beforeUpdate:Te,updated:Te,beforeDestroy:Te,beforeUnmount:Te,destroyed:Te,unmounted:Te,activated:Te,deactivated:Te,errorCaptured:Te,serverPrefetch:Te,components:$t,directives:$t,watch:ca,provide:Ao,inject:aa};function Ao(e,t){return t?e?function(){return we(X(e)?e.call(this,this):e,X(t)?t.call(this,this):t)}:t:e}function aa(e,t){return $t(Vs(e),Vs(t))}function Vs(e){if(W(e)){const t={};for(let n=0;n0)&&!(l&16)){if(l&8){const f=e.vnode.dynamicProps;for(let _=0;_{a=!0;const[g,y]=Zi(_,t,!0);we(l,g),y&&r.push(...y)};!n&&t.mixins.length&&t.mixins.forEach(f),e.extends&&f(e.extends),e.mixins&&e.mixins.forEach(f)}if(!i&&!a)return ve(e)&&s.set(e,Ot),Ot;if(W(i))for(let f=0;f-1,y[1]=M<0||T-1||ie(y,"default"))&&r.push(_)}}}const u=[l,r];return ve(e)&&s.set(e,u),u}function Io(e){return e[0]!=="$"}function No(e){const t=e&&e.toString().match(/^\s*(function|class) (\w+)/);return t?t[2]:e===null?"null":""}function Bo(e,t){return No(e)===No(t)}function Oo(e,t){return W(t)?t.findIndex(n=>Bo(n,e)):X(t)&&Bo(t,e)?0:-1}const el=e=>e[0]==="_"||e==="$stable",so=e=>W(e)?e.map(Ge):[Ge(e)],fa=(e,t,n)=>{if(t._n)return t;const s=I((...o)=>so(t(...o)),n);return s._c=!1,s},tl=(e,t,n)=>{const s=e._ctx;for(const o in e){if(el(o))continue;const i=e[o];if(X(i))t[o]=fa(o,i,s);else if(i!=null){const l=so(i);t[o]=()=>l}}},nl=(e,t)=>{const n=so(t);e.slots.default=()=>n},ha=(e,t)=>{if(e.vnode.shapeFlag&32){const n=t._;n?(e.slots=ae(t),In(t,"_",n)):tl(t,e.slots={})}else e.slots={},t&&nl(e,t);In(e.slots,ts,1)},pa=(e,t,n)=>{const{vnode:s,slots:o}=e;let i=!0,l=me;if(s.shapeFlag&32){const r=t._;r?n&&r===1?i=!1:(we(o,t),!n&&r===1&&delete o._):(i=!t.$stable,tl(t,o)),l=t}else t&&(nl(e,t),l={default:1});if(i)for(const r in o)!el(r)&&!(r in l)&&delete o[r]};function sl(){return{app:null,config:{isNativeTag:jl,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let _a=0;function ga(e,t){return function(s,o=null){X(s)||(s=Object.assign({},s)),o!=null&&!ve(o)&&(o=null);const i=sl(),l=new Set;let r=!1;const a=i.app={_uid:_a++,_component:s,_props:o,_container:null,_context:i,_instance:null,version:Fa,get config(){return i.config},set config(u){},use(u,...f){return l.has(u)||(u&&X(u.install)?(l.add(u),u.install(a,...f)):X(u)&&(l.add(u),u(a,...f))),a},mixin(u){return i.mixins.includes(u)||i.mixins.push(u),a},component(u,f){return f?(i.components[u]=f,a):i.components[u]},directive(u,f){return f?(i.directives[u]=f,a):i.directives[u]},mount(u,f,_){if(!r){const g=V(s,o);return g.appContext=i,f&&t?t(g,u):e(g,u,_),r=!0,a._container=u,u.__vue_app__=a,io(g.component)||g.component.proxy}},unmount(){r&&(e(null,a._container),delete a._container.__vue_app__)},provide(u,f){return i.provides[u]=f,a}};return a}}function Hn(e,t,n,s,o=!1){if(W(e)){e.forEach((g,y)=>Hn(g,t&&(W(t)?t[y]:t),n,s,o));return}if(Gt(s)&&!o)return;const i=s.shapeFlag&4?io(s.component)||s.component.proxy:s.el,l=o?null:i,{i:r,r:a}=e,u=t&&t.r,f=r.refs===me?r.refs={}:r.refs,_=r.setupState;if(u!=null&&u!==a&&(ke(u)?(f[u]=null,ie(_,u)&&(_[u]=null)):Pe(u)&&(u.value=null)),X(a))ht(a,r,12,[l,f]);else{const g=ke(a),y=Pe(a);if(g||y){const T=()=>{if(e.f){const M=g?ie(_,a)?_[a]:f[a]:a.value;o?W(M)&&Ds(M,i):W(M)?M.includes(i)||M.push(i):g?(f[a]=[i],ie(_,a)&&(_[a]=f[a])):(a.value=[i],e.k&&(f[e.k]=a.value))}else g?(f[a]=l,ie(_,a)&&(_[a]=l)):y&&(a.value=l,e.k&&(f[e.k]=l))};l?(T.id=-1,Ee(T,n)):T()}}}let rt=!1;const Tn=e=>/svg/.test(e.namespaceURI)&&e.tagName!=="foreignObject",Vn=e=>e.nodeType===8;function va(e){const{mt:t,p:n,o:{patchProp:s,createText:o,nextSibling:i,parentNode:l,remove:r,insert:a,createComment:u}}=e,f=(m,C)=>{if(!C.hasChildNodes()){n(null,m,C),Bn(),C._vnode=m;return}rt=!1,_(C.firstChild,m,null,null,null),Bn(),C._vnode=m,rt&&console.error("Hydration completed but contains mismatches.")},_=(m,C,B,Y,te,he=!1)=>{const oe=Vn(m)&&m.data==="[",N=()=>M(m,C,B,Y,te,oe),{type:ee,ref:J,shapeFlag:re,patchFlag:O}=C;let ne=m.nodeType;C.el=m,O===-2&&(he=!1,C.dynamicChildren=null);let G=null;switch(ee){case qt:ne!==3?C.children===""?(a(C.el=o(""),l(m),m),G=m):G=N():(m.data!==C.children&&(rt=!0,m.data=C.children),G=i(m));break;case Be:ne!==8||oe?G=N():G=i(m);break;case Ut:if(oe&&(m=i(m),ne=m.nodeType),ne===1||ne===3){G=m;const Ae=!C.children.length;for(let de=0;de{he=he||!!C.dynamicChildren;const{type:oe,props:N,patchFlag:ee,shapeFlag:J,dirs:re}=C,O=oe==="input"&&re||oe==="option";if(O||ee!==-1){if(re&&Qe(C,null,B,"created"),N)if(O||!he||ee&48)for(const G in N)(O&&G.endsWith("value")||vn(G)&&!nn(G))&&s(m,G,null,N[G],!1,void 0,B);else N.onClick&&s(m,"onClick",null,N.onClick,!1,void 0,B);let ne;if((ne=N&&N.onVnodeBeforeMount)&&He(ne,B,C),re&&Qe(C,null,B,"beforeMount"),((ne=N&&N.onVnodeMounted)||re)&&Ri(()=>{ne&&He(ne,B,C),re&&Qe(C,null,B,"mounted")},Y),J&16&&!(N&&(N.innerHTML||N.textContent))){let G=y(m.firstChild,C,m,B,Y,te,he);for(;G;){rt=!0;const Ae=G;G=G.nextSibling,r(Ae)}}else J&8&&m.textContent!==C.children&&(rt=!0,m.textContent=C.children)}return m.nextSibling},y=(m,C,B,Y,te,he,oe)=>{oe=oe||!!C.dynamicChildren;const N=C.children,ee=N.length;for(let J=0;J{const{slotScopeIds:oe}=C;oe&&(te=te?te.concat(oe):oe);const N=l(m),ee=y(i(m),C,N,B,Y,te,he);return ee&&Vn(ee)&&ee.data==="]"?i(C.anchor=ee):(rt=!0,a(C.anchor=u("]"),N,ee),ee)},M=(m,C,B,Y,te,he)=>{if(rt=!0,C.el=null,he){const ee=K(m);for(;;){const J=i(m);if(J&&J!==ee)r(J);else break}}const oe=i(m),N=l(m);return r(m),n(null,C,N,oe,B,Y,Tn(N),te),oe},K=m=>{let C=0;for(;m;)if(m=i(m),m&&Vn(m)&&(m.data==="["&&C++,m.data==="]")){if(C===0)return i(m);C--}return m};return[f,_]}const Ee=Ri;function ma(e){return ba(e,va)}function ba(e,t){const n=Xl();n.__VUE__=!0;const{insert:s,remove:o,patchProp:i,createElement:l,createText:r,createComment:a,setText:u,setElementText:f,parentNode:_,nextSibling:g,setScopeId:y=ze,insertStaticContent:T}=e,M=(c,d,v,w=null,x=null,L=null,A=!1,P=null,E=!!d.dynamicChildren)=>{if(c===d)return;c&&!Pt(c,d)&&(w=xn(c),qe(c,x,L,!0),c=null),d.patchFlag===-2&&(E=!1,d.dynamicChildren=null);const{type:$,ref:U,shapeFlag:F}=d;switch($){case qt:K(c,d,v,w);break;case Be:m(c,d,v,w);break;case Ut:c==null&&C(d,v,w,A);break;case Z:O(c,d,v,w,x,L,A,P,E);break;default:F&1?te(c,d,v,w,x,L,A,P,E):F&6?ne(c,d,v,w,x,L,A,P,E):(F&64||F&128)&&$.process(c,d,v,w,x,L,A,P,E,It)}U!=null&&x&&Hn(U,c&&c.ref,L,d||c,!d)},K=(c,d,v,w)=>{if(c==null)s(d.el=r(d.children),v,w);else{const x=d.el=c.el;d.children!==c.children&&u(x,d.children)}},m=(c,d,v,w)=>{c==null?s(d.el=a(d.children||""),v,w):d.el=c.el},C=(c,d,v,w)=>{[c.el,c.anchor]=T(c.children,d,v,w,c.el,c.anchor)},B=({el:c,anchor:d},v,w)=>{let x;for(;c&&c!==d;)x=g(c),s(c,v,w),c=x;s(d,v,w)},Y=({el:c,anchor:d})=>{let v;for(;c&&c!==d;)v=g(c),o(c),c=v;o(d)},te=(c,d,v,w,x,L,A,P,E)=>{A=A||d.type==="svg",c==null?he(d,v,w,x,L,A,P,E):ee(c,d,x,L,A,P,E)},he=(c,d,v,w,x,L,A,P)=>{let E,$;const{type:U,props:F,shapeFlag:j,transition:Q,dirs:se}=c;if(E=c.el=l(c.type,L,F&&F.is,F),j&8?f(E,c.children):j&16&&N(c.children,E,null,w,x,L&&U!=="foreignObject",A,P),se&&Qe(c,null,w,"created"),oe(E,c,c.scopeId,A,w),F){for(const fe in F)fe!=="value"&&!nn(fe)&&i(E,fe,null,F[fe],L,c.children,w,x,tt);"value"in F&&i(E,"value",null,F.value),($=F.onVnodeBeforeMount)&&He($,w,c)}se&&Qe(c,null,w,"beforeMount");const _e=(!x||x&&!x.pendingBranch)&&Q&&!Q.persisted;_e&&Q.beforeEnter(E),s(E,d,v),(($=F&&F.onVnodeMounted)||_e||se)&&Ee(()=>{$&&He($,w,c),_e&&Q.enter(E),se&&Qe(c,null,w,"mounted")},x)},oe=(c,d,v,w,x)=>{if(v&&y(c,v),w)for(let L=0;L{for(let $=E;${const P=d.el=c.el;let{patchFlag:E,dynamicChildren:$,dirs:U}=d;E|=c.patchFlag&16;const F=c.props||me,j=d.props||me;let Q;v&&kt(v,!1),(Q=j.onVnodeBeforeUpdate)&&He(Q,v,d,c),U&&Qe(d,c,v,"beforeUpdate"),v&&kt(v,!0);const se=x&&d.type!=="foreignObject";if($?J(c.dynamicChildren,$,P,v,w,se,L):A||pe(c,d,P,null,v,w,se,L,!1),E>0){if(E&16)re(P,d,F,j,v,w,x);else if(E&2&&F.class!==j.class&&i(P,"class",null,j.class,x),E&4&&i(P,"style",F.style,j.style,x),E&8){const _e=d.dynamicProps;for(let fe=0;fe<_e.length;fe++){const xe=_e[fe],De=F[xe],Nt=j[xe];(Nt!==De||xe==="value")&&i(P,xe,De,Nt,x,c.children,v,w,tt)}}E&1&&c.children!==d.children&&f(P,d.children)}else!A&&$==null&&re(P,d,F,j,v,w,x);((Q=j.onVnodeUpdated)||U)&&Ee(()=>{Q&&He(Q,v,d,c),U&&Qe(d,c,v,"updated")},w)},J=(c,d,v,w,x,L,A)=>{for(let P=0;P{if(v!==w){if(v!==me)for(const P in v)!nn(P)&&!(P in w)&&i(c,P,v[P],null,A,d.children,x,L,tt);for(const P in w){if(nn(P))continue;const E=w[P],$=v[P];E!==$&&P!=="value"&&i(c,P,$,E,A,d.children,x,L,tt)}"value"in w&&i(c,"value",v.value,w.value)}},O=(c,d,v,w,x,L,A,P,E)=>{const $=d.el=c?c.el:r(""),U=d.anchor=c?c.anchor:r("");let{patchFlag:F,dynamicChildren:j,slotScopeIds:Q}=d;Q&&(P=P?P.concat(Q):Q),c==null?(s($,v,w),s(U,v,w),N(d.children,v,U,x,L,A,P,E)):F>0&&F&64&&j&&c.dynamicChildren?(J(c.dynamicChildren,j,v,x,L,A,P),(d.key!=null||x&&d===x.subTree)&&ol(c,d,!0)):pe(c,d,v,U,x,L,A,P,E)},ne=(c,d,v,w,x,L,A,P,E)=>{d.slotScopeIds=P,c==null?d.shapeFlag&512?x.ctx.activate(d,v,w,A,E):G(d,v,w,x,L,A,E):Ae(c,d,E)},G=(c,d,v,w,x,L,A)=>{const P=c.component=Sa(c,w,x);if(bn(c)&&(P.ctx.renderer=It),Ta(P),P.asyncDep){if(x&&x.registerDep(P,de),!c.el){const E=P.subTree=V(Be);m(null,E,d,v)}return}de(P,c,d,v,x,L,A)},Ae=(c,d,v)=>{const w=d.component=c.component;if(Gr(c,d,v))if(w.asyncDep&&!w.asyncResolved){be(w,d,v);return}else w.next=d,Br(w.update),w.update();else d.el=c.el,w.vnode=d},de=(c,d,v,w,x,L,A)=>{const P=()=>{if(c.isMounted){let{next:U,bu:F,u:j,parent:Q,vnode:se}=c,_e=U,fe;kt(c,!1),U?(U.el=se.el,be(c,U,A)):U=se,F&&us(F),(fe=U.props&&U.props.onVnodeBeforeUpdate)&&He(fe,Q,U,se),kt(c,!0);const xe=ds(c),De=c.subTree;c.subTree=xe,M(De,xe,_(De.el),xn(De),c,x,L),U.el=xe.el,_e===null&&Ur(c,xe.el),j&&Ee(j,x),(fe=U.props&&U.props.onVnodeUpdated)&&Ee(()=>He(fe,Q,U,se),x)}else{let U;const{el:F,props:j}=d,{bm:Q,m:se,parent:_e}=c,fe=Gt(d);if(kt(c,!1),Q&&us(Q),!fe&&(U=j&&j.onVnodeBeforeMount)&&He(U,_e,d),kt(c,!0),F&&as){const xe=()=>{c.subTree=ds(c),as(F,c.subTree,c,x,null)};fe?d.type.__asyncLoader().then(()=>!c.isUnmounted&&xe()):xe()}else{const xe=c.subTree=ds(c);M(null,xe,v,w,c,x,L),d.el=xe.el}if(se&&Ee(se,x),!fe&&(U=j&&j.onVnodeMounted)){const xe=d;Ee(()=>He(U,_e,xe),x)}(d.shapeFlag&256||_e&&Gt(_e.vnode)&&_e.vnode.shapeFlag&256)&&c.a&&Ee(c.a,x),c.isMounted=!0,d=v=w=null}},E=c.effect=new zs(P,()=>Yn($),c.scope),$=c.update=()=>E.run();$.id=c.uid,kt(c,!0),$()},be=(c,d,v)=>{d.component=c;const w=c.vnode.props;c.vnode=d,c.next=null,da(c,d.props,w,v),pa(c,d.children,v),Jt(),So(),Xt()},pe=(c,d,v,w,x,L,A,P,E=!1)=>{const $=c&&c.children,U=c?c.shapeFlag:0,F=d.children,{patchFlag:j,shapeFlag:Q}=d;if(j>0){if(j&128){kn($,F,v,w,x,L,A,P,E);return}else if(j&256){bt($,F,v,w,x,L,A,P,E);return}}Q&8?(U&16&&tt($,x,L),F!==$&&f(v,F)):U&16?Q&16?kn($,F,v,w,x,L,A,P,E):tt($,x,L,!0):(U&8&&f(v,""),Q&16&&N(F,v,w,x,L,A,P,E))},bt=(c,d,v,w,x,L,A,P,E)=>{c=c||Ot,d=d||Ot;const $=c.length,U=d.length,F=Math.min($,U);let j;for(j=0;jU?tt(c,x,L,!0,!1,F):N(d,v,w,x,L,A,P,E,F)},kn=(c,d,v,w,x,L,A,P,E)=>{let $=0;const U=d.length;let F=c.length-1,j=U-1;for(;$<=F&&$<=j;){const Q=c[$],se=d[$]=E?ut(d[$]):Ge(d[$]);if(Pt(Q,se))M(Q,se,v,null,x,L,A,P,E);else break;$++}for(;$<=F&&$<=j;){const Q=c[F],se=d[j]=E?ut(d[j]):Ge(d[j]);if(Pt(Q,se))M(Q,se,v,null,x,L,A,P,E);else break;F--,j--}if($>F){if($<=j){const Q=j+1,se=Qj)for(;$<=F;)qe(c[$],x,L,!0),$++;else{const Q=$,se=$,_e=new Map;for($=se;$<=j;$++){const Ie=d[$]=E?ut(d[$]):Ge(d[$]);Ie.key!=null&&_e.set(Ie.key,$)}let fe,xe=0;const De=j-se+1;let Nt=!1,vo=0;const Zt=new Array(De);for($=0;$=De){qe(Ie,x,L,!0);continue}let We;if(Ie.key!=null)We=_e.get(Ie.key);else for(fe=se;fe<=j;fe++)if(Zt[fe-se]===0&&Pt(Ie,d[fe])){We=fe;break}We===void 0?qe(Ie,x,L,!0):(Zt[We-se]=$+1,We>=vo?vo=We:Nt=!0,M(Ie,d[We],v,null,x,L,A,P,E),xe++)}const mo=Nt?ya(Zt):Ot;for(fe=mo.length-1,$=De-1;$>=0;$--){const Ie=se+$,We=d[Ie],bo=Ie+1{const{el:L,type:A,transition:P,children:E,shapeFlag:$}=c;if($&6){yt(c.component.subTree,d,v,w);return}if($&128){c.suspense.move(d,v,w);return}if($&64){A.move(c,d,v,It);return}if(A===Z){s(L,d,v);for(let F=0;FP.enter(L),x);else{const{leave:F,delayLeave:j,afterLeave:Q}=P,se=()=>s(L,d,v),_e=()=>{F(L,()=>{se(),Q&&Q()})};j?j(L,se,_e):_e()}else s(L,d,v)},qe=(c,d,v,w=!1,x=!1)=>{const{type:L,props:A,ref:P,children:E,dynamicChildren:$,shapeFlag:U,patchFlag:F,dirs:j}=c;if(P!=null&&Hn(P,null,v,c,!0),U&256){d.ctx.deactivate(c);return}const Q=U&1&&j,se=!Gt(c);let _e;if(se&&(_e=A&&A.onVnodeBeforeUnmount)&&He(_e,d,c),U&6)Ol(c.component,v,w);else{if(U&128){c.suspense.unmount(v,w);return}Q&&Qe(c,null,d,"beforeUnmount"),U&64?c.type.remove(c,d,v,x,It,w):$&&(L!==Z||F>0&&F&64)?tt($,d,v,!1,!0):(L===Z&&F&384||!x&&U&16)&&tt(E,d,v),w&&_o(c)}(se&&(_e=A&&A.onVnodeUnmounted)||Q)&&Ee(()=>{_e&&He(_e,d,c),Q&&Qe(c,null,d,"unmounted")},v)},_o=c=>{const{type:d,el:v,anchor:w,transition:x}=c;if(d===Z){Bl(v,w);return}if(d===Ut){Y(c);return}const L=()=>{o(v),x&&!x.persisted&&x.afterLeave&&x.afterLeave()};if(c.shapeFlag&1&&x&&!x.persisted){const{leave:A,delayLeave:P}=x,E=()=>A(v,L);P?P(c.el,L,E):E()}else L()},Bl=(c,d)=>{let v;for(;c!==d;)v=g(c),o(c),c=v;o(d)},Ol=(c,d,v)=>{const{bum:w,scope:x,update:L,subTree:A,um:P}=c;w&&us(w),x.stop(),L&&(L.active=!1,qe(A,c,d,v)),P&&Ee(P,d),Ee(()=>{c.isUnmounted=!0},d),d&&d.pendingBranch&&!d.isUnmounted&&c.asyncDep&&!c.asyncResolved&&c.suspenseId===d.pendingId&&(d.deps--,d.deps===0&&d.resolve())},tt=(c,d,v,w=!1,x=!1,L=0)=>{for(let A=L;Ac.shapeFlag&6?xn(c.component.subTree):c.shapeFlag&128?c.suspense.next():g(c.anchor||c.el),go=(c,d,v)=>{c==null?d._vnode&&qe(d._vnode,null,null,!0):M(d._vnode||null,c,d,null,null,null,v),So(),Bn(),d._vnode=c},It={p:M,um:qe,m:yt,r:_o,mt:G,mc:N,pc:pe,pbc:J,n:xn,o:e};let rs,as;return t&&([rs,as]=t(It)),{render:go,hydrate:rs,createApp:ga(go,rs)}}function kt({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function ol(e,t,n=!1){const s=e.children,o=t.children;if(W(s)&&W(o))for(let i=0;i>1,e[n[r]]0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,l=n[i-1];i-- >0;)n[i]=l,l=t[l];return n}const ka=e=>e.__isTeleport,Z=Symbol(void 0),qt=Symbol(void 0),Be=Symbol(void 0),Ut=Symbol(void 0),ln=[];let je=null;function h(e=!1){ln.push(je=e?null:[])}function xa(){ln.pop(),je=ln[ln.length-1]||null}let pn=1;function Fo(e){pn+=e}function il(e){return e.dynamicChildren=pn>0?je||Ot:null,xa(),pn>0&&je&&je.push(e),e}function b(e,t,n,s,o,i){return il(k(e,t,n,s,o,i,!0))}function q(e,t,n,s,o){return il(V(e,t,n,s,o,!0))}function Rn(e){return e?e.__v_isVNode===!0:!1}function Pt(e,t){return e.type===t.type&&e.key===t.key}const ts="__vInternal",ll=({key:e})=>e??null,Mn=({ref:e,ref_key:t,ref_for:n})=>e!=null?ke(e)||Pe(e)||X(e)?{i:Le,r:e,k:t,f:!!n}:e:null;function k(e,t=null,n=null,s=0,o=null,i=e===Z?0:1,l=!1,r=!1){const a={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&ll(t),ref:t&&Mn(t),scopeId:Xn,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:s,dynamicProps:o,dynamicChildren:null,appContext:null,ctx:Le};return r?(oo(a,n),i&128&&e.normalize(a)):n&&(a.shapeFlag|=ke(n)?8:16),pn>0&&!l&&je&&(a.patchFlag>0||i&6)&&a.patchFlag!==32&&je.push(a),a}const V=wa;function wa(e,t=null,n=null,s=0,o=null,i=!1){if((!e||e===Wi)&&(e=Be),Rn(e)){const r=_t(e,t,!0);return n&&oo(r,n),pn>0&&!i&&je&&(r.shapeFlag&6?je[je.indexOf(e)]=r:je.push(r)),r.patchFlag|=-2,r}if(Aa(e)&&(e=e.__vccOpts),t){t=$a(t);let{class:r,style:a}=t;r&&!ke(r)&&(t.class=ge(r)),ve(a)&&(Vi(a)&&!W(a)&&(a=we({},a)),t.style=Hs(a))}const l=ke(e)?1:jr(e)?128:ka(e)?64:ve(e)?4:X(e)?2:0;return k(e,t,n,s,o,l,i,!0)}function $a(e){return e?Vi(e)||ts in e?we({},e):e:null}function _t(e,t,n=!1){const{props:s,ref:o,patchFlag:i,children:l}=e,r=t?An(s||{},t):s;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:r,key:r&&ll(r),ref:t&&t.ref?n&&o?W(o)?o.concat(Mn(t)):[o,Mn(t)]:Mn(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Z?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&_t(e.ssContent),ssFallback:e.ssFallback&&_t(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce}}function Se(e=" ",t=0){return V(qt,null,e,t)}function Ca(e,t){const n=V(Ut,null,e);return n.staticCount=t,n}function D(e="",t=!1){return t?(h(),q(Be,null,e)):V(Be,null,e)}function Ge(e){return e==null||typeof e=="boolean"?V(Be):W(e)?V(Z,null,e.slice()):typeof e=="object"?ut(e):V(qt,null,String(e))}function ut(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:_t(e)}function oo(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(W(t))n=16;else if(typeof t=="object")if(s&65){const o=t.default;o&&(o._c&&(o._d=!1),oo(e,o()),o._c&&(o._d=!0));return}else{n=32;const o=t._;!o&&!(ts in t)?t._ctx=Le:o===3&&Le&&(Le.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else X(t)?(t={default:t,_ctx:Le},n=32):(t=String(t),s&64?(n=16,t=[Se(t)]):n=8);e.children=t,e.shapeFlag|=n}function An(...e){const t={};for(let n=0;nye||Le,Wt=e=>{ye=e,e.scope.on()},Vt=()=>{ye&&ye.scope.off(),ye=null};function rl(e){return e.vnode.shapeFlag&4}let Qt=!1;function Ta(e,t=!1){Qt=t;const{props:n,children:s}=e.vnode,o=rl(e);ua(e,n,o,t),ha(e,s);const i=o?Va(e,t):void 0;return Qt=!1,i}function Va(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=sn(new Proxy(e.ctx,oa));const{setup:s}=n;if(s){const o=e.setupContext=s.length>1?cl(e):null;Wt(e),Jt();const i=ht(s,e,0,[e.props,o]);if(Xt(),Vt(),gi(i)){if(i.then(Vt,Vt),t)return i.then(l=>{Ho(e,l,t)}).catch(l=>{mn(l,e,0)});e.asyncDep=i}else Ho(e,i,t)}else al(e,t)}function Ho(e,t,n){X(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ve(t)&&(e.setupState=Ii(t)),al(e,n)}let Ro;function al(e,t,n){const s=e.type;if(!e.render){if(!t&&Ro&&!s.render){const o=s.template||no(e).template;if(o){const{isCustomElement:i,compilerOptions:l}=e.appContext.config,{delimiters:r,compilerOptions:a}=s,u=we(we({isCustomElement:i,delimiters:r},l),a);s.render=Ro(o,u)}}e.render=s.render||ze}Wt(e),Jt(),ia(e),Xt(),Vt()}function Ea(e){return new Proxy(e.attrs,{get(t,n){return Me(e,"get","$attrs"),t[n]}})}function cl(e){const t=s=>{e.exposed=s||{}};let n;return{get attrs(){return n||(n=Ea(e))},slots:e.slots,emit:e.emit,expose:t}}function io(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(Ii(sn(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in on)return on[n](e)},has(t,n){return n in t||n in on}}))}function Ma(e,t=!0){return X(e)?e.displayName||e.name:e.name||t&&e.__name}function Aa(e){return X(e)&&"__vccOpts"in e}const z=(e,t)=>Ar(e,t,Qt);function Ia(){return Na().slots}function Na(){const e=ns();return e.setupContext||(e.setupContext=cl(e))}function Dn(e,t,n){const s=arguments.length;return s===2?ve(t)&&!W(t)?Rn(t)?V(e,null,[t]):V(e,t):V(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&Rn(n)&&(n=[n]),V(e,t,n))}const Ba=Symbol(""),Oa=()=>Ke(Ba),Fa="3.2.47",Ha="http://www.w3.org/2000/svg",Lt=typeof document<"u"?document:null,Do=Lt&&Lt.createElement("template"),Ra={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const o=t?Lt.createElementNS(Ha,e):Lt.createElement(e,n?{is:n}:void 0);return e==="select"&&s&&s.multiple!=null&&o.setAttribute("multiple",s.multiple),o},createText:e=>Lt.createTextNode(e),createComment:e=>Lt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Lt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,o,i){const l=n?n.previousSibling:t.lastChild;if(o&&(o===i||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),n),!(o===i||!(o=o.nextSibling)););else{Do.innerHTML=s?`${e}`:e;const r=Do.content;if(s){const a=r.firstChild;for(;a.firstChild;)r.appendChild(a.firstChild);r.removeChild(a)}t.insertBefore(r,n)}return[l?l.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}};function Da(e,t,n){const s=e._vtc;s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}function Ga(e,t,n){const s=e.style,o=ke(n);if(n&&!o){if(t&&!ke(t))for(const i in t)n[i]==null&&Ms(s,i,"");for(const i in n)Ms(s,i,n[i])}else{const i=s.display;o?t!==n&&(s.cssText=n):t&&e.removeAttribute("style"),"_vod"in e&&(s.display=i)}}const Go=/\s*!important$/;function Ms(e,t,n){if(W(n))n.forEach(s=>Ms(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=Ua(e,t);Go.test(n)?e.setProperty(Yt(s),n.replace(Go,""),"important"):e[s]=n}}const Uo=["Webkit","Moz","ms"],_s={};function Ua(e,t){const n=_s[t];if(n)return n;let s=Xe(t);if(s!=="filter"&&s in e)return _s[t]=s;s=qn(s);for(let o=0;ogs||(Ya.then(()=>gs=0),gs=Date.now());function Xa(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;Re(Za(s,n.value),t,5,[s])};return n.value=e,n.attached=Ja(),n}function Za(e,t){if(W(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>o=>!o._stopped&&s&&s(o))}else return t}const Ko=/^on[a-z]/,ec=(e,t,n,s,o=!1,i,l,r,a)=>{t==="class"?Da(e,s,o):t==="style"?Ga(e,n,s):vn(t)?Rs(t)||Wa(e,t,n,s,l):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):tc(e,t,s,o))?za(e,t,s,i,l,r,a):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),ja(e,t,s,o))};function tc(e,t,n,s){return s?!!(t==="innerHTML"||t==="textContent"||t in e&&Ko.test(t)&&X(n)):t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA"||Ko.test(t)&&ke(n)?!1:t in e}function nc(e){const t=ns();if(!t)return;const n=t.ut=(o=e(t.proxy))=>{Array.from(document.querySelectorAll(`[data-v-owner="${t.uid}"]`)).forEach(i=>Is(i,o))},s=()=>{const o=e(t.proxy);As(t.subTree,o),n(o)};Di(s),Oe(()=>{const o=new MutationObserver(s);o.observe(t.subTree.el.parentNode,{childList:!0}),gt(()=>o.disconnect())})}function As(e,t){if(e.shapeFlag&128){const n=e.suspense;e=n.activeBranch,n.pendingBranch&&!n.isHydrating&&n.effects.push(()=>{As(n.activeBranch,t)})}for(;e.component;)e=e.component.subTree;if(e.shapeFlag&1&&e.el)Is(e.el,t);else if(e.type===Z)e.children.forEach(n=>As(n,t));else if(e.type===Ut){let{el:n,anchor:s}=e;for(;n&&(Is(n,t),n!==s);)n=n.nextSibling}}function Is(e,t){if(e.nodeType===1){const n=e.style;for(const s in t)n.setProperty(`--${s}`,t[s])}}const at="transition",en="animation",ss=(e,{slots:t})=>Dn(Ui,sc(e),t);ss.displayName="Transition";const ul={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String};ss.props=we({},Ui.props,ul);const xt=(e,t=[])=>{W(e)?e.forEach(n=>n(...t)):e&&e(...t)},qo=e=>e?W(e)?e.some(t=>t.length>1):e.length>1:!1;function sc(e){const t={};for(const O in e)O in ul||(t[O]=e[O]);if(e.css===!1)return t;const{name:n="v",type:s,duration:o,enterFromClass:i=`${n}-enter-from`,enterActiveClass:l=`${n}-enter-active`,enterToClass:r=`${n}-enter-to`,appearFromClass:a=i,appearActiveClass:u=l,appearToClass:f=r,leaveFromClass:_=`${n}-leave-from`,leaveActiveClass:g=`${n}-leave-active`,leaveToClass:y=`${n}-leave-to`}=e,T=oc(o),M=T&&T[0],K=T&&T[1],{onBeforeEnter:m,onEnter:C,onEnterCancelled:B,onLeave:Y,onLeaveCancelled:te,onBeforeAppear:he=m,onAppear:oe=C,onAppearCancelled:N=B}=t,ee=(O,ne,G)=>{wt(O,ne?f:r),wt(O,ne?u:l),G&&G()},J=(O,ne)=>{O._isLeaving=!1,wt(O,_),wt(O,y),wt(O,g),ne&&ne()},re=O=>(ne,G)=>{const Ae=O?oe:C,de=()=>ee(ne,O,G);xt(Ae,[ne,de]),Wo(()=>{wt(ne,O?a:i),ct(ne,O?f:r),qo(Ae)||Qo(ne,s,M,de)})};return we(t,{onBeforeEnter(O){xt(m,[O]),ct(O,i),ct(O,l)},onBeforeAppear(O){xt(he,[O]),ct(O,a),ct(O,u)},onEnter:re(!1),onAppear:re(!0),onLeave(O,ne){O._isLeaving=!0;const G=()=>J(O,ne);ct(O,_),rc(),ct(O,g),Wo(()=>{O._isLeaving&&(wt(O,_),ct(O,y),qo(Y)||Qo(O,s,K,G))}),xt(Y,[O,G])},onEnterCancelled(O){ee(O,!1),xt(B,[O])},onAppearCancelled(O){ee(O,!0),xt(N,[O])},onLeaveCancelled(O){J(O),xt(te,[O])}})}function oc(e){if(e==null)return null;if(ve(e))return[vs(e.enter),vs(e.leave)];{const t=vs(e);return[t,t]}}function vs(e){return Jl(e)}function ct(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e._vtc||(e._vtc=new Set)).add(t)}function wt(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const{_vtc:n}=e;n&&(n.delete(t),n.size||(e._vtc=void 0))}function Wo(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let ic=0;function Qo(e,t,n,s){const o=e._endId=++ic,i=()=>{o===e._endId&&s()};if(n)return setTimeout(i,n);const{type:l,timeout:r,propCount:a}=lc(e,t);if(!l)return s();const u=l+"end";let f=0;const _=()=>{e.removeEventListener(u,g),i()},g=y=>{y.target===e&&++f>=a&&_()};setTimeout(()=>{f(n[T]||"").split(", "),o=s(`${at}Delay`),i=s(`${at}Duration`),l=Yo(o,i),r=s(`${en}Delay`),a=s(`${en}Duration`),u=Yo(r,a);let f=null,_=0,g=0;t===at?l>0&&(f=at,_=l,g=i.length):t===en?u>0&&(f=en,_=u,g=a.length):(_=Math.max(l,u),f=_>0?l>u?at:en:null,g=f?f===at?i.length:a.length:0);const y=f===at&&/\b(transform|all)(,|$)/.test(s(`${at}Property`).toString());return{type:f,timeout:_,propCount:g,hasTransform:y}}function Yo(e,t){for(;e.lengthJo(n)+Jo(e[s])))}function Jo(e){return Number(e.slice(0,-1).replace(",","."))*1e3}function rc(){return document.body.offsetHeight}const ac=["ctrl","shift","alt","meta"],cc={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>ac.some(n=>e[`${n}Key`]&&!t.includes(n))},uc=(e,t)=>(n,...s)=>{for(let o=0;o{const t=fc().createApp(...e),{mount:n}=t;return t.mount=s=>{const o=pc(s);if(o)return n(o,!0,o instanceof SVGElement)},t};function pc(e){return ke(e)?document.querySelector(e):e}const H=(e,t)=>{const n=e.__vccOpts||e;for(const[s,o]of t)n[s]=o;return n},_c="modulepreload",gc=function(e){return"/static-blog/"+e},Zo={},dl=function(t,n,s){if(!n||n.length===0)return t();const o=document.getElementsByTagName("link");return Promise.all(n.map(i=>{if(i=gc(i),i in Zo)return;Zo[i]=!0;const l=i.endsWith(".css"),r=l?'[rel="stylesheet"]':"";if(!!s)for(let f=o.length-1;f>=0;f--){const _=o[f];if(_.href===i&&(!l||_.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${i}"]${r}`))return;const u=document.createElement("link");if(u.rel=l?"stylesheet":_c,l||(u.as="script",u.crossOrigin=""),u.href=i,document.head.appendChild(u),l)return new Promise((f,_)=>{u.addEventListener("load",f),u.addEventListener("error",()=>_(new Error(`Unable to preload CSS for ${i}`)))})})).then(()=>t())};const vc=R({__name:"VPBadge",props:{text:null,type:null},setup(e){return(t,n)=>(h(),b("span",{class:ge(["VPBadge",e.type??"tip"])},[S(t.$slots,"default",{},()=>[Se(ce(e.text),1)],!0)],2))}});const mc=H(vc,[["__scopeId","data-v-9ecb65e4"]]),bc=JSON.parse('{"lang":"en-US","dir":"ltr","title":"mx52jing","description":"mx52jing的博客","base":"/static-blog/","head":[],"appearance":true,"themeConfig":{"siteTitle":"mx52jing","smoothScroll":true,"nav":[{"text":"首页","link":"/"},{"text":"随手一记","link":"/hand-notes/JavaScript/数字四舍五入"},{"text":"知识沉淀","link":"/knowledge-deposition/前端工程化/Babel/Babel基础"},{"text":"算法","link":"/algorithm/LeetCode刷题/1-两数之和"},{"text":"收藏夹","link":"/favorites/CSS/"}],"sidebar":{"/hand-notes/":[{"text":"JavaScript","collapsible":false,"collapsed":false,"items":[{"text":"数字四舍五入","link":"/hand-notes/JavaScript/数字四舍五入"},{"text":"根据生日计算年龄","link":"/hand-notes/JavaScript/根据生日计算年龄"},{"text":"控制并发执行函数","link":"/hand-notes/JavaScript/控制并发执行函数"},{"text":"随机数的应用","link":"/hand-notes/JavaScript/随机数的应用"},{"text":"判断字母大小写","link":"/hand-notes/JavaScript/判断字母大小写"}]},{"text":"React","collapsible":false,"collapsed":false,"items":[{"text":"ProComponents","collapsible":false,"collapsed":false,"items":[{"text":"ProTable","link":"/hand-notes/React/ProComponents/ProTable"}]}]},{"text":"Chart","collapsible":false,"collapsed":false,"items":[{"text":"AntVF2","collapsible":false,"collapsed":false,"items":[{"text":"使用小记","link":"/hand-notes/Chart/AntVF2/使用小记"}]}]},{"text":"CSS","collapsible":true,"collapsed":false,"items":[{"text":"CSS实现文字渐变","link":"/hand-notes/CSS/CSS实现文字渐变"},{"text":"CSS实现突出不同颜色的圆角","link":"/hand-notes/CSS/CSS实现突出不同颜色的圆角"},{"text":"CSS计数器-counter","link":"/hand-notes/CSS/CSS计数器-counter"},{"text":"CSS模拟数字loading","link":"/hand-notes/CSS/CSS模拟数字loading"},{"text":"实现高度过渡","link":"/hand-notes/CSS/实现高度过渡"},{"text":"CSS实现类似微信头像效果","link":"/hand-notes/CSS/CSS实现类似微信头像效果"},{"text":"虚线边框","link":"/hand-notes/CSS/虚线边框"},{"text":"图片加载出错样式设置","link":"/hand-notes/CSS/图片加载出错样式设置"}]},{"text":"Sass","collapsible":false,"collapsed":false,"items":[{"text":"sass小技巧","link":"/hand-notes/Sass/sass小技巧"},{"text":"通过mixin简化响应式代码","link":"/hand-notes/Sass/通过mixin简化响应式代码"},{"text":"sass实现星空效果","link":"/hand-notes/Sass/sass实现星空效果"},{"text":"小球交互loading","link":"/hand-notes/Sass/小球交互loading"}]},{"text":"Canvas","collapsible":false,"collapsed":false,"items":[{"text":"绘制图片不清晰问题","link":"/hand-notes/Canvas/绘制图片不清晰问题"}]},{"text":"Linux","collapsible":false,"collapsed":false,"items":[{"text":"Bash实用方法","link":"/hand-notes/Linux/practice-method"},{"text":"图片压缩和格式转换","link":"/hand-notes/Linux/图片压缩和格式转换"},{"text":"计算升级版本号","link":"/hand-notes/Linux/计算升级版本号"},{"text":"文件压缩","link":"/hand-notes/Linux/文件压缩"},{"text":"用户操作相关","link":"/hand-notes/Linux/用户操作相关"},{"text":"权限相关","link":"/hand-notes/Linux/权限相关"}]},{"text":"Mac","collapsible":false,"collapsed":false,"items":[{"text":"环境初始化","link":"/hand-notes/Mac/init"},{"text":"使用小记","link":"/hand-notes/Mac/frequently-commands"},{"text":"快捷运行自定义shell脚本","link":"/hand-notes/Mac/快捷运行自定义shell脚本"}]},{"text":"Charles","collapsible":false,"collapsed":false,"items":[{"text":"抓包配置","link":"/hand-notes/Charles/抓包配置"},{"text":"修改请求或响应","link":"/hand-notes/Charles/修改请求或响应"}]}],"/knowledge-deposition/":[{"text":"前端工程化","collapsible":false,"collapsed":false,"items":[{"text":"Babel","collapsible":false,"collapsed":false,"items":[{"text":"Babel基础","link":"/knowledge-deposition/前端工程化/Babel/Babel基础"}]},{"text":"Vite","collapsible":false,"collapsed":false,"items":[{"text":"初体验","link":"/knowledge-deposition/前端工程化/Vite/初体验"},{"text":"区分不同环境","link":"/knowledge-deposition/前端工程化/Vite/区分不同环境"},{"text":"处理样式","link":"/knowledge-deposition/前端工程化/Vite/处理样式"},{"text":"处理静态资源","link":"/knowledge-deposition/前端工程化/Vite/处理静态资源"},{"text":"依赖预构建","link":"/knowledge-deposition/前端工程化/Vite/依赖预构建"},{"text":"esbuild相关","link":"/knowledge-deposition/前端工程化/Vite/esbuild相关"},{"text":"Rollup的插件机制","link":"/knowledge-deposition/前端工程化/Vite/Rollup的插件机制"},{"text":"Vite插件机制","link":"/knowledge-deposition/前端工程化/Vite/Vite插件机制"}]}]},{"text":"Docker","collapsible":false,"collapsed":false,"items":[{"text":"Docker基础知识","link":"/knowledge-deposition/Docker/Docker基础知识"},{"text":"Dockerfile","link":"/knowledge-deposition/Docker/Dockerfile"}]},{"text":"MySQL","collapsible":false,"collapsed":false,"items":[{"text":"基础","link":"/knowledge-deposition/MySQL/基础知识"},{"text":"SQL","link":"/knowledge-deposition/MySQL/SQL"},{"text":"数据操作和查询","link":"/knowledge-deposition/MySQL/数据操作和查询"},{"text":"函数","link":"/knowledge-deposition/MySQL/函数"},{"text":"分组和子查询","link":"/knowledge-deposition/MySQL/分组和子查询"},{"text":"表连接","link":"/knowledge-deposition/MySQL/表连接"}]},{"text":"SSH","collapsible":false,"collapsed":false,"items":[{"text":"SSH基础","link":"/knowledge-deposition/SSH/ssh-base"}]},{"text":"Linux","collapsible":false,"collapsed":false,"items":[{"text":"Bash基础知识","link":"/knowledge-deposition/Linux/Bash基础知识"}]},{"text":"GoLang","collapsible":false,"collapsed":false,"items":[{"text":"基础知识","collapsible":false,"collapsed":true,"items":[{"text":"环境搭建","link":"/knowledge-deposition/GoLang/基础知识/环境搭建"},{"text":"fmt格式输出含义","link":"/knowledge-deposition/GoLang/基础知识/fmt输出含义"},{"text":"变量常量","link":"/knowledge-deposition/GoLang/基础知识/变量常量"},{"text":"流程控制","link":"/knowledge-deposition/GoLang/基础知识/流程控制"},{"text":"基础数据类型","link":"/knowledge-deposition/GoLang/基础知识/基础数据类型"},{"text":"数组、切片、Map","link":"/knowledge-deposition/GoLang/基础知识/数组、切片、Map"},{"text":"strings包","link":"/knowledge-deposition/GoLang/基础知识/strings包"},{"text":"函数","link":"/knowledge-deposition/GoLang/基础知识/函数"},{"text":"指针","link":"/knowledge-deposition/GoLang/基础知识/指针"},{"text":"结构体","link":"/knowledge-deposition/GoLang/基础知识/结构体"},{"text":"接口","link":"/knowledge-deposition/GoLang/基础知识/接口"},{"text":"协程","link":"/knowledge-deposition/GoLang/基础知识/协程"},{"text":"协程安全","link":"/knowledge-deposition/GoLang/基础知识/协程安全"},{"text":"通道channel","link":"/knowledge-deposition/GoLang/基础知识/通道channel"},{"text":"Select","link":"/knowledge-deposition/GoLang/基础知识/Select"},{"text":"time包","link":"/knowledge-deposition/GoLang/基础知识/time包"},{"text":"url包","link":"/knowledge-deposition/GoLang/基础知识/url包"},{"text":"json序列化","link":"/knowledge-deposition/GoLang/基础知识/json序列化"},{"text":"Context","link":"/knowledge-deposition/GoLang/基础知识/Context"},{"text":"文件操作","collapsible":false,"collapsed":true,"link":"/knowledge-deposition/GoLang/基础知识/文件操作/","items":[{"text":"读文件","link":"/knowledge-deposition/GoLang/基础知识/文件操作/读文件"},{"text":"写文件","link":"/knowledge-deposition/GoLang/基础知识/文件操作/写文件"},{"text":"文件复制","link":"/knowledge-deposition/GoLang/基础知识/文件操作/文件复制"},{"text":"目录操作","link":"/knowledge-deposition/GoLang/基础知识/文件操作/目录操作"},{"text":"读取配置文件","link":"/knowledge-deposition/GoLang/基础知识/文件操作/读取配置文件"},{"text":"并发下载远程文件","link":"/knowledge-deposition/GoLang/基础知识/文件操作/并发下载远程文件"}]},{"text":"网络","collapsible":false,"collapsed":true,"items":[{"text":"TCP","link":"/knowledge-deposition/GoLang/基础知识/网络/TCP"},{"text":"HTTP","link":"/knowledge-deposition/GoLang/基础知识/网络/HTTP"},{"text":"RPC","link":"/knowledge-deposition/GoLang/基础知识/网络/RPC"}]},{"text":"Test","link":"/knowledge-deposition/GoLang/基础知识/Test"}]},{"text":"Gin","collapsible":false,"collapsed":true,"items":[{"text":"hello-world","link":"/knowledge-deposition/GoLang/Gin/hello-world"},{"text":"响应数据","link":"/knowledge-deposition/GoLang/Gin/响应数据"},{"text":"请求参数","link":"/knowledge-deposition/GoLang/Gin/请求参数"},{"text":"bind绑定器","link":"/knowledge-deposition/GoLang/Gin/bind绑定器"},{"text":"请求头和响应头","link":"/knowledge-deposition/GoLang/Gin/请求头和响应头"},{"text":"上传和下载文件","link":"/knowledge-deposition/GoLang/Gin/上传和下载文件"},{"text":"路由分组","link":"/knowledge-deposition/GoLang/Gin/路由分组"},{"text":"中间件","link":"/knowledge-deposition/GoLang/Gin/中间件"},{"text":"支持跨域","link":"/knowledge-deposition/GoLang/Gin/支持跨域"},{"text":"集成Swagger","link":"/knowledge-deposition/GoLang/Gin/集成Swagger"}]},{"text":"Gorm","collapsible":false,"collapsed":true,"items":[{"text":"连接数据库","link":"/knowledge-deposition/GoLang/Gorm/连接数据库"},{"text":"模型定义","link":"/knowledge-deposition/GoLang/Gorm/模型定义"},{"text":"Create","link":"/knowledge-deposition/GoLang/Gorm/Create"},{"text":"Query","link":"/knowledge-deposition/GoLang/Gorm/Query"},{"text":"AdvancedQuery","link":"/knowledge-deposition/GoLang/Gorm/AdvancedQuery"},{"text":"Update","link":"/knowledge-deposition/GoLang/Gorm/Update"},{"text":"Delete","link":"/knowledge-deposition/GoLang/Gorm/Delete"},{"text":"关联之一对一","link":"/knowledge-deposition/GoLang/Gorm/关联之一对一"},{"text":"关联之一对多","link":"/knowledge-deposition/GoLang/Gorm/关联之一对多"},{"text":"关联之多对多","link":"/knowledge-deposition/GoLang/Gorm/关联之多对多"},{"text":"事务","link":"/knowledge-deposition/GoLang/Gorm/事务"},{"text":"自定义数据类型","link":"/knowledge-deposition/GoLang/Gorm/自定义数据类型"}]},{"text":"Logger","collapsible":false,"collapsed":true,"items":[{"text":"Logrus","collapsible":false,"collapsed":true,"items":[{"text":"基础用法","link":"/knowledge-deposition/GoLang/Logger/Logrus/基础用法"},{"text":"Hook","link":"/knowledge-deposition/GoLang/Logger/Logrus/Hook"},{"text":"日志分割","link":"/knowledge-deposition/GoLang/Logger/Logrus/日志分割"}]},{"text":"Zap","collapsible":false,"collapsed":true,"items":[{"text":"zap使用","link":"/knowledge-deposition/GoLang/Logger/Zap/zap使用"}]}]},{"text":"Crawler","collapsible":false,"collapsed":true,"items":[{"text":"HTTP请求方法","link":"/knowledge-deposition/GoLang/Crawler/HTTP请求方法"}]},{"text":"加密","collapsible":false,"collapsed":true,"items":[{"text":"AES加密","link":"/knowledge-deposition/GoLang/加密/AES加密"},{"text":"RSA加密","link":"/knowledge-deposition/GoLang/加密/RSA加密"}]}]},{"text":"Nacos","collapsible":false,"collapsed":false,"items":[{"text":"基本概念和安装启动","link":"/knowledge-deposition/Nacos/基本概念和安装启动"},{"text":"操作动态配置文件","link":"/knowledge-deposition/Nacos/操作动态配置文件"}]},{"text":"RabbitMQ","collapsible":false,"collapsed":false,"items":[{"text":"基本概念和安装启动","link":"/knowledge-deposition/RabbitMQ/基本概念和安装启动"},{"text":"工作队列","link":"/knowledge-deposition/RabbitMQ/工作队列"}]}],"/algorithm/":[{"text":"LeetCode刷题","collapsible":false,"collapsed":true,"items":[{"text":"1-两数之和","link":"/algorithm/LeetCode刷题/1-两数之和"},{"text":"20-有效的括号","link":"/algorithm/LeetCode刷题/20-有效的括号"},{"text":"26-删除有序数组中的重复项","link":"/algorithm/LeetCode刷题/26-删除有序数组中的重复项"},{"text":"27-移除元素","link":"/algorithm/LeetCode刷题/27-移除元素"},{"text":"28-找出字符串中第一个匹配项的下标","link":"/algorithm/LeetCode刷题/28-找出字符串中第一个匹配项的下标"},{"text":"3-无重复字符的最长子串","link":"/algorithm/LeetCode刷题/3-无重复字符的最长子串"},{"text":"35-搜索插入位置","link":"/algorithm/LeetCode刷题/35-搜索插入位置"},{"text":"14-最长公共前缀","link":"/algorithm/LeetCode刷题/14-最长公共前缀"},{"text":"58-最后一个单词的长度","link":"/algorithm/LeetCode刷题/58-最后一个单词的长度"},{"text":"136-只出现一次的数字","link":"/algorithm/LeetCode刷题/136-只出现一次的数字"},{"text":"LCR-018-验证回文串","link":"/algorithm/LeetCode刷题/LCR-018-验证回文串"},{"text":"9-回文数","link":"/algorithm/LeetCode刷题/9-回文数"},{"text":"17-电话号码的字母组合","link":"/algorithm/LeetCode刷题/17-电话号码的字母组合"},{"text":"202-快乐数","link":"/algorithm/LeetCode刷题/202-快乐数"},{"text":"485-最大连续1的个数","link":"/algorithm/LeetCode刷题/485-最大连续1的个数"},{"text":"628-三个数的最大乘积","link":"/algorithm/LeetCode刷题/628-三个数的最大乘积"},{"text":"414-第三大的数","link":"/algorithm/LeetCode刷题/414-第三大的数"},{"text":"520-检测大写字母","link":"/algorithm/LeetCode刷题/520-检测大写字母"},{"text":"977-有序数组的平方","link":"/algorithm/LeetCode刷题/977-有序数组的平方"},{"text":"209-长度最小的子数组","link":"/algorithm/LeetCode刷题/209-长度最小的子数组"},{"text":"203-移除链表元素","link":"/algorithm/LeetCode刷题/203-移除链表元素"},{"text":"707-设计链表","link":"/algorithm/LeetCode刷题/707-设计链表"},{"text":"206-反转链表","link":"/algorithm/LeetCode刷题/206-反转链表"},{"text":"24-两两交换链表中的节点","link":"/algorithm/LeetCode刷题/24-两两交换链表中的节点"},{"text":"19-删除链表的倒数第N个结点","link":"/algorithm/LeetCode刷题/19-删除链表的倒数第N个结点"},{"text":"242-有效的字母异位词","link":"/algorithm/LeetCode刷题/242-有效的字母异位词"},{"text":"349-两个数组的交集","link":"/algorithm/LeetCode刷题/349-两个数组的交集"},{"text":"454-四数相加II","link":"/algorithm/LeetCode刷题/454-四数相加II"},{"text":"15-三数之和","link":"/algorithm/LeetCode刷题/15-三数之和"},{"text":"18-四数之和","link":"/algorithm/LeetCode刷题/18-四数之和"},{"text":"344-反转字符串","link":"/algorithm/LeetCode刷题/344-反转字符串"},{"text":"541-反转字符串II","link":"/algorithm/LeetCode刷题/541-反转字符串II"},{"text":"151-反转字符串中的单词","link":"/algorithm/LeetCode刷题/151-反转字符串中的单词"},{"text":"1047-删除字符串中的所有相邻重复项","link":"/algorithm/LeetCode刷题/1047-删除字符串中的所有相邻重复项"},{"text":"150-逆波兰表达式求值","link":"/algorithm/LeetCode刷题/150-逆波兰表达式求值"},{"text":"144-94-145-遍历二叉树","link":"/algorithm/LeetCode刷题/144-94-145-遍历二叉树"}]}],"/favorites/":[{"text":"CSS","link":"/favorites/CSS/"},{"text":"Git","link":"/favorites/Git/"},{"text":"Mobile Side","link":"/favorites/Mobile/"},{"text":"Nginx","link":"/favorites/Nginx/"},{"text":"Mac","link":"/favorites/Mac/"},{"text":"Canvas","link":"/favorites/Canvas/"},{"text":"Browser","link":"/favorites/Browser/"},{"text":"ProblemSolving","link":"/favorites/ProblemSolving/"},{"text":"React","link":"/favorites/React/"},{"text":"Docker","link":"/favorites/Docker/"},{"text":"算法","link":"/favorites/算法/"},{"text":"Golang","link":"/favorites/Golang/"},{"text":"IDE","link":"/favorites/IDE/"},{"text":"Linux","link":"/favorites/Linux/"},{"text":"UI设计灵感","link":"/favorites/UI设计灵感/"},{"text":"Books","link":"/favorites/Books/"},{"text":"其他","link":"/favorites/其他/"}]},"socialLinks":[{"icon":"github","link":"https://github.com/mx52jing"}],"algolia":{"appId":"OZ2LZP2CGA","apiKey":"f4ad8bb32fae6abf12202305c27f286e","indexName":"static"},"lastUpdated":true,"aside":true,"outline":"deep"},"locales":{},"scrollOffset":90,"cleanUrls":true}'),os=/^[a-z]+:/i,yc=/^pathname:\/\//,ei="vitepress-theme-appearance",fl=/#.*$/,kc=/(index)?\.(md|html)$/,$e=typeof document<"u",hl={relativePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0};function At(e,t,n=!1){if(t===void 0)return!1;if(e=ti(`/${e}`),n)return new RegExp(t).test(e);if(ti(t)!==e)return!1;const s=t.match(fl);return s?($e?location.hash:"")===s[0]:!0}function ti(e){return decodeURI(e).replace(fl,"").replace(kc,"")}function pl(e){return os.test(e)}function xc(e,t){var s,o,i,l,r,a,u;const n=Object.keys(e.locales).find(f=>f!=="root"&&!pl(f)&&At(t,`/${f}/`,!0))||"root";return Object.assign({},e,{localeIndex:n,lang:((s=e.locales[n])==null?void 0:s.lang)??e.lang,dir:((o=e.locales[n])==null?void 0:o.dir)??e.dir,title:((i=e.locales[n])==null?void 0:i.title)??e.title,titleTemplate:((l=e.locales[n])==null?void 0:l.titleTemplate)??e.titleTemplate,description:((r=e.locales[n])==null?void 0:r.description)??e.description,head:gl(e.head,((a=e.locales[n])==null?void 0:a.head)??[]),themeConfig:{...e.themeConfig,...(u=e.locales[n])==null?void 0:u.themeConfig}})}function _l(e,t){const n=t.title||e.title,s=t.titleTemplate??e.titleTemplate;if(typeof s=="string"&&s.includes(":title"))return s.replace(/:title/g,n);const o=wc(e.title,s);return`${n}${o}`}function wc(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function $c(e,t){const[n,s]=t;if(n!=="meta")return!1;const o=Object.entries(s)[0];return o==null?!1:e.some(([i,l])=>i===n&&l[o[0]]===o[1])}function gl(e,t){return[...e.filter(n=>!$c(t,n)),...t]}const Cc=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,Pc=/^[a-z]:/i;function ni(e){const t=Pc.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(Cc,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const vl=Symbol(),dt=Tr(bc);function Lc(e){const t=z(()=>xc(dt.value,e.data.relativePath));return{site:t,theme:z(()=>t.value.themeConfig),page:z(()=>e.data),frontmatter:z(()=>e.data.frontmatter),lang:z(()=>t.value.lang),dir:z(()=>t.value.dir),localeIndex:z(()=>t.value.localeIndex||"root"),title:z(()=>_l(t.value,e.data)),description:z(()=>e.data.description||t.value.description),isDark:le(!1)}}function ml(){const e=Ke(vl);if(!e)throw new Error("vitepress data not properly injected in app");return e}function Sc(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function _n(e){return os.test(e)||e.startsWith(".")?e:Sc(dt.value.base,e)}function bl(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),$e){const n="/static-blog/";t=ni(t.slice(n.length).replace(/\//g,"_")||"index")+".md";let s=__VP_HASH_MAP__[t.toLowerCase()];s||(t=t.endsWith("_index.md")?t.slice(0,-9)+".md":t.slice(0,-3)+"_index.md",s=__VP_HASH_MAP__[t.toLowerCase()]),t=`${n}assets/${t}.${s}.js`}else t=`./${ni(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}const yl=Symbol(),si="http://a.com",Tc=()=>({path:"/",component:null,data:hl});function Vc(e,t){const n=Qn(Tc()),s={route:n,go:o};async function o(r=$e?location.href:"/"){var u,f;await((u=s.onBeforeRouteChange)==null?void 0:u.call(s,r));const a=new URL(r,si);dt.value.cleanUrls||!a.pathname.endsWith("/")&&!a.pathname.endsWith(".html")&&(a.pathname+=".html",r=a.pathname+a.search+a.hash),$e&&r!==location.href&&(history.replaceState({scrollPosition:window.scrollY},document.title),history.pushState(null,"",r)),await l(r),await((f=s.onAfterRouteChanged)==null?void 0:f.call(s,r))}let i=null;async function l(r,a=0,u=!1){const f=new URL(r,si),_=i=f.pathname;try{let g=await e(_);if(i===_){i=null;const{default:y,__pageData:T}=g;if(!y)throw new Error(`Invalid route component: ${y}`);n.path=$e?_:_n(_),n.component=sn(y),n.data=sn(T),$e&&Zs(()=>{let M=dt.value.base+T.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");if(!dt.value.cleanUrls&&!M.endsWith("/")&&(M+=".html"),M!==f.pathname&&(f.pathname=M,r=M+f.search+f.hash,history.replaceState(null,"",r)),f.hash&&!a){let K=null;try{K=document.querySelector(decodeURIComponent(f.hash))}catch(m){console.warn(m)}if(K){oi(K,f.hash);return}}window.scrollTo(0,a)})}}catch(g){if(!/fetch/.test(g.message)&&!/^\/404(\.html|\/)?$/.test(r)&&console.error(g),!u)try{const y=await fetch(dt.value.base+"hashmap.json");window.__VP_HASH_MAP__=await y.json(),await l(r,a,!0);return}catch{}i===_&&(i=null,n.path=$e?_:_n(_),n.component=t?sn(t):null,n.data=hl)}}return $e&&(window.addEventListener("click",r=>{if(r.target.closest("button"))return;const u=r.target.closest("a");if(u&&!u.closest(".vp-raw")&&(u instanceof SVGElement||!u.download)){const{target:f}=u,{href:_,origin:g,pathname:y,hash:T,search:M}=new URL(u.href instanceof SVGAnimatedString?u.href.animVal:u.href,u.baseURI),K=window.location,m=y.match(/\.\w+$/);!r.ctrlKey&&!r.shiftKey&&!r.altKey&&!r.metaKey&&f!=="_blank"&&g===K.origin&&!(m&&m[0]!==".html")&&(r.preventDefault(),y===K.pathname&&M===K.search?T&&T!==K.hash&&(history.pushState(null,"",T),window.dispatchEvent(new Event("hashchange")),oi(u,T,u.classList.contains("header-anchor"))):o(_))}},{capture:!0}),window.addEventListener("popstate",r=>{l(location.href,r.state&&r.state.scrollPosition||0)}),window.addEventListener("hashchange",r=>{r.preventDefault()})),s}function Ec(){const e=Ke(yl);if(!e)throw new Error("useRouter() is called without provider.");return e}function vt(){return Ec().route}function oi(e,t,n=!1){let s=null;try{s=e.classList.contains("header-anchor")?e:document.querySelector(decodeURIComponent(t))}catch(o){console.warn(o)}if(s){let o=dt.value.scrollOffset;typeof o=="string"&&(o=document.querySelector(o).getBoundingClientRect().bottom+24);const i=parseInt(window.getComputedStyle(s).paddingTop,10),l=window.scrollY+s.getBoundingClientRect().top-o+i;!n||Math.abs(l-window.scrollY)>window.innerHeight?window.scrollTo(0,l):window.scrollTo({left:0,top:l,behavior:"smooth"})}}const Mc=R({name:"VitePressContent",props:{onContentUpdated:Function},setup(e){const t=vt();return eo(()=>{var n;(n=e.onContentUpdated)==null||n.call(e)}),()=>Dn("div",{style:{position:"relative"}},[t.component?Dn(t.component):null])}}),ue=ml;var ii;const kl=typeof window<"u",Ac=e=>typeof e=="string",Ic=()=>{};kl&&((ii=window==null?void 0:window.navigator)!=null&&ii.userAgent)&&/iP(ad|hone|od)/.test(window.navigator.userAgent);function xl(e){return typeof e=="function"?e():p(e)}function Nc(e){return e}function wl(e){return bi()?(tr(e),!0):!1}function Bc(e){return typeof e=="function"?z(e):le(e)}function Oc(e,t=!0){ns()?Oe(e):t?e():Zs(e)}function Fc(e){var t;const n=xl(e);return(t=n==null?void 0:n.$el)!=null?t:n}const lo=kl?window:void 0;function Hc(...e){let t,n,s,o;if(Ac(e[0])||Array.isArray(e[0])?([n,s,o]=e,t=lo):[t,n,s,o]=e,!t)return Ic;Array.isArray(n)||(n=[n]),Array.isArray(s)||(s=[s]);const i=[],l=()=>{i.forEach(f=>f()),i.length=0},r=(f,_,g,y)=>(f.addEventListener(_,g,y),()=>f.removeEventListener(_,g,y)),a=Je(()=>[Fc(t),xl(o)],([f,_])=>{l(),f&&i.push(...n.flatMap(g=>s.map(y=>r(f,g,y,_))))},{immediate:!0,flush:"post"}),u=()=>{a(),l()};return wl(u),u}function Rc(e,t=!1){const n=le(),s=()=>n.value=!!e();return s(),Oc(s,t),n}function Ns(e,t={}){const{window:n=lo}=t,s=Rc(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let o;const i=le(!1),l=()=>{o&&("removeEventListener"in o?o.removeEventListener("change",r):o.removeListener(r))},r=()=>{s.value&&(l(),o=n.matchMedia(Bc(e).value),i.value=o.matches,"addEventListener"in o?o.addEventListener("change",r):o.addListener(r))};return Et(r),wl(()=>l()),i}const li=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},ri="__vueuse_ssr_handlers__";li[ri]=li[ri]||{};var ai;(function(e){e.UP="UP",e.RIGHT="RIGHT",e.DOWN="DOWN",e.LEFT="LEFT",e.NONE="NONE"})(ai||(ai={}));var Dc=Object.defineProperty,ci=Object.getOwnPropertySymbols,Gc=Object.prototype.hasOwnProperty,Uc=Object.prototype.propertyIsEnumerable,ui=(e,t,n)=>t in e?Dc(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,jc=(e,t)=>{for(var n in t||(t={}))Gc.call(t,n)&&ui(e,n,t[n]);if(ci)for(var n of ci(t))Uc.call(t,n)&&ui(e,n,t[n]);return e};const zc={easeInSine:[.12,0,.39,0],easeOutSine:[.61,1,.88,1],easeInOutSine:[.37,0,.63,1],easeInQuad:[.11,0,.5,0],easeOutQuad:[.5,1,.89,1],easeInOutQuad:[.45,0,.55,1],easeInCubic:[.32,0,.67,0],easeOutCubic:[.33,1,.68,1],easeInOutCubic:[.65,0,.35,1],easeInQuart:[.5,0,.75,0],easeOutQuart:[.25,1,.5,1],easeInOutQuart:[.76,0,.24,1],easeInQuint:[.64,0,.78,0],easeOutQuint:[.22,1,.36,1],easeInOutQuint:[.83,0,.17,1],easeInExpo:[.7,0,.84,0],easeOutExpo:[.16,1,.3,1],easeInOutExpo:[.87,0,.13,1],easeInCirc:[.55,0,1,.45],easeOutCirc:[0,.55,.45,1],easeInOutCirc:[.85,0,.15,1],easeInBack:[.36,0,.66,-.56],easeOutBack:[.34,1.56,.64,1],easeInOutBack:[.68,-.6,.32,1.6]};jc({linear:Nc},zc);function Kc({window:e=lo}={}){if(!e)return{x:le(0),y:le(0)};const t=le(e.scrollX),n=le(e.scrollY);return Hc(e,"scroll",()=>{t.value=e.scrollX,n.value=e.scrollY},{capture:!1,passive:!0}),{x:t,y:n}}function qc(e,t){let n,s=!1;return()=>{n&&clearTimeout(n),s?n=setTimeout(e,t):(e(),s=!0,setTimeout(()=>{s=!1},t))}}function Bs(e){return/^\//.test(e)?e:`/${e}`}function gn(e){if(pl(e))return e.replace(yc,"");const{site:t}=ue(),{pathname:n,search:s,hash:o}=new URL(e,"http://example.com"),i=n.endsWith("/")||n.endsWith(".html")?e:e.replace(/(?:(^\.+)\/)?.*$/,`$1${n.replace(/(\.md)?$/,t.value.cleanUrls?"":".html")}${s}${o}`);return _n(i)}function $l(e,t){if(Array.isArray(e))return e;if(e==null)return[];t=Bs(t);const n=Object.keys(e).sort((s,o)=>o.split("/").length-s.split("/").length).find(s=>t.startsWith(Bs(s)));return n?e[n]:[]}function Wc(e){const t=[];let n=0;for(const s in e){const o=e[s];if(o.items){n=t.push(o);continue}t[n]||t.push({items:[]}),t[n].items.push(o)}return t}function Qc(e){const t=[];function n(s){for(const o of s)o.text&&o.link&&t.push({text:o.text,link:o.link}),o.items&&n(o.items)}return n(e),t}function Os(e,t){return Array.isArray(t)?t.some(n=>Os(e,n)):At(e,t.link)?!0:t.items?Os(e,t.items):!1}function it(){const e=vt(),{theme:t,frontmatter:n}=ue(),s=Ns("(min-width: 960px)"),o=le(!1),i=z(()=>{const y=t.value.sidebar,T=e.data.relativePath;return y?$l(y,T):[]}),l=z(()=>n.value.sidebar!==!1&&i.value.length>0&&n.value.layout!=="home"),r=z(()=>n.value.layout==="home"?!1:n.value.aside!=null?!!n.value.aside:t.value.aside!==!1),a=z(()=>l.value&&s.value),u=z(()=>l.value?Wc(i.value):[]);function f(){o.value=!0}function _(){o.value=!1}function g(){o.value?_():f()}return{isOpen:o,sidebar:i,sidebarGroups:u,hasSidebar:l,hasAside:r,isSidebarEnabled:a,open:f,close:_,toggle:g}}function Yc(e,t){let n;Et(()=>{n=e.value?document.activeElement:void 0}),Oe(()=>{window.addEventListener("keyup",s)}),gt(()=>{window.removeEventListener("keyup",s)});function s(o){o.key==="Escape"&&e.value&&(t(),n==null||n.focus())}}function Jc(e){const{page:t}=ue(),n=le(!1),s=z(()=>e.value.collapsed!=null),o=z(()=>!!e.value.link),i=z(()=>At(t.value.relativePath,e.value.link)),l=z(()=>i.value?!0:e.value.items?Os(t.value.relativePath,e.value.items):!1),r=z(()=>!!(e.value.items&&e.value.items.length));Et(()=>{n.value=!!(s.value&&e.value.collapsed)}),Et(()=>{(i.value||l.value)&&(n.value=!1)});function a(){s.value&&(n.value=!n.value)}return{collapsed:n,collapsible:s,isLink:o,isActiveLink:i,hasActiveLink:l,hasChildren:r,toggle:a}}const Xc=R({__name:"VPSkipLink",setup(e){const t=vt(),n=le();Je(()=>t.path,()=>n.value.focus());function s({target:o}){const i=document.querySelector(o.hash);if(i){const l=()=>{i.removeAttribute("tabindex"),i.removeEventListener("blur",l)};i.setAttribute("tabindex","-1"),i.addEventListener("blur",l),i.focus(),window.scrollTo(0,0)}}return(o,i)=>(h(),b(Z,null,[k("span",{ref_key:"backToTop",ref:n,tabindex:"-1"},null,512),k("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:s}," Skip to content ")],64))}});const Zc=H(Xc,[["__scopeId","data-v-0c14bf17"]]),eu={key:0,class:"VPBackdrop"},tu=R({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(e){return(t,n)=>(h(),q(ss,{name:"fade"},{default:I(()=>[e.show?(h(),b("div",eu)):D("",!0)]),_:1}))}});const nu=H(tu,[["__scopeId","data-v-f156ed5b"]]);function su(){const e=le(!1);function t(){e.value=!0,window.addEventListener("resize",o)}function n(){e.value=!1,window.removeEventListener("resize",o)}function s(){e.value?n():t()}function o(){window.outerWidth>=768&&n()}const i=vt();return Je(()=>i.path,n),{isScreenOpen:e,openScreen:t,closeScreen:n,toggleScreen:s}}function yn({removeCurrent:e=!0,correspondingLink:t=!1}={}){const{site:n,localeIndex:s,page:o,theme:i}=ue(),l=z(()=>{var a,u;return{label:(a=n.value.locales[s.value])==null?void 0:a.label,link:((u=n.value.locales[s.value])==null?void 0:u.link)||(s.value==="root"?"/":`/${s.value}/`)}});return{localeLinks:z(()=>Object.entries(n.value.locales).flatMap(([a,u])=>e&&l.value.label===u.label?[]:{text:u.label,link:ou(u.link||(a==="root"?"/":`/${a}/`),i.value.i18nRouting!==!1&&t,o.value.relativePath.slice(l.value.link.length-1),!n.value.cleanUrls)})),currentLang:l}}function ou(e,t,n,s){return t?e.replace(/\/$/,"")+Bs(n.replace(/(^|\/)?index.md$/,"$1").replace(/\.md$/,s?".html":"")):e}const iu=["src","alt"],lu={inheritAttrs:!1},ru=R({...lu,__name:"VPImage",props:{image:null,alt:null},setup(e){return(t,n)=>{const s=Mt("VPImage",!0);return e.image?(h(),b(Z,{key:0},[typeof e.image=="string"||"src"in e.image?(h(),b("img",An({key:0,class:"VPImage"},typeof e.image=="string"?t.$attrs:{...e.image,...t.$attrs},{src:p(_n)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,iu)):(h(),b(Z,{key:1},[V(s,An({class:"dark",image:e.image.dark,alt:e.image.alt},t.$attrs),null,16,["image","alt"]),V(s,An({class:"light",image:e.image.light,alt:e.image.alt},t.$attrs),null,16,["image","alt"])],64))],64)):D("",!0)}}});const ro=H(ru,[["__scopeId","data-v-2ecb366c"]]),au=["href"],cu=R({__name:"VPNavBarTitle",setup(e){const{site:t,theme:n}=ue(),{hasSidebar:s}=it(),{currentLang:o}=yn();return(i,l)=>(h(),b("div",{class:ge(["VPNavBarTitle",{"has-sidebar":p(s)}])},[k("a",{class:"title",href:p(gn)(p(o).link)},[S(i.$slots,"nav-bar-title-before",{},void 0,!0),p(n).logo?(h(),q(ro,{key:0,class:"logo",image:p(n).logo},null,8,["image"])):D("",!0),p(n).siteTitle?(h(),b(Z,{key:1},[Se(ce(p(n).siteTitle),1)],64)):p(n).siteTitle===void 0?(h(),b(Z,{key:2},[Se(ce(p(t).title),1)],64)):D("",!0),S(i.$slots,"nav-bar-title-after",{},void 0,!0)],8,au)],2))}});const uu=H(cu,[["__scopeId","data-v-fb6ffc33"]]);const du={key:0,class:"VPNavBarSearch"},fu={type:"button",class:"DocSearch DocSearch-Button","aria-label":"Search"},hu={class:"DocSearch-Button-Container"},pu=k("svg",{class:"DocSearch-Search-Icon",width:"20",height:"20",viewBox:"0 0 20 20"},[k("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none","fill-rule":"evenodd","stroke-linecap":"round","stroke-linejoin":"round"})],-1),_u={class:"DocSearch-Button-Placeholder"},gu=k("span",{class:"DocSearch-Button-Keys"},[k("kbd",{class:"DocSearch-Button-Key"}),k("kbd",{class:"DocSearch-Button-Key"},"K")],-1),vu=R({__name:"VPNavBarSearch",setup(e){nc(f=>({"2475c8e4":i.value}));const t=Wr(()=>dl(()=>import("./chunks/VPAlgoliaSearchBox.1b11cc16.js"),[])),{theme:n,localeIndex:s}=ue(),o=le(!1),i=le("'Meta'"),l=z(()=>{var f,_,g,y,T,M,K,m;return((T=(y=(g=(_=(f=n.value.algolia)==null?void 0:f.locales)==null?void 0:_[s.value])==null?void 0:g.translations)==null?void 0:y.button)==null?void 0:T.buttonText)||((m=(K=(M=n.value.algolia)==null?void 0:M.translations)==null?void 0:K.button)==null?void 0:m.buttonText)||"Search"}),r=()=>{const f="VPAlgoliaPreconnect";(window.requestIdleCallback||setTimeout)(()=>{const g=document.createElement("link");g.id=f,g.rel="preconnect",g.href=`https://${n.value.algolia.appId}-dsn.algolia.net`,g.crossOrigin="",document.head.appendChild(g)})};Oe(()=>{if(!n.value.algolia)return;r(),i.value=/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)?"'⌘'":"'Ctrl'";const f=g=>{g.key==="k"&&(g.ctrlKey||g.metaKey)&&(g.preventDefault(),a(),_())},_=()=>{window.removeEventListener("keydown",f)};window.addEventListener("keydown",f),gt(_)});function a(){o.value||(o.value=!0,setTimeout(u,16))}function u(){const f=new Event("keydown");f.key="k",f.metaKey=!0,window.dispatchEvent(f),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||u()},16)}return(f,_)=>p(n).algolia?(h(),b("div",du,[o.value?(h(),q(p(t),{key:0,algolia:p(n).algolia},null,8,["algolia"])):(h(),b("div",{key:1,id:"docsearch",onClick:a},[k("button",fu,[k("span",hu,[pu,k("span",_u,ce(p(l)),1)]),gu])]))])):D("",!0)}});const mu={},bu={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",height:"24px",viewBox:"0 0 24 24",width:"24px"},yu=k("path",{d:"M0 0h24v24H0V0z",fill:"none"},null,-1),ku=k("path",{d:"M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5H9z"},null,-1),xu=[yu,ku];function wu(e,t){return h(),b("svg",bu,xu)}const $u=H(mu,[["render",wu]]),Cu=R({__name:"VPLink",props:{tag:null,href:null,noIcon:{type:Boolean},target:null,rel:null},setup(e){const t=e,n=z(()=>t.tag??t.href?"a":"span"),s=z(()=>t.href&&os.test(t.href));return(o,i)=>(h(),q(hn(p(n)),{class:ge(["VPLink",{link:e.href}]),href:e.href?p(gn)(e.href):void 0,target:e.target||(p(s)?"_blank":void 0),rel:e.rel||(p(s)?"noreferrer":void 0)},{default:I(()=>[S(o.$slots,"default",{},void 0,!0),p(s)&&!e.noIcon?(h(),q($u,{key:0,class:"icon"})):D("",!0)]),_:3},8,["class","href","target","rel"]))}});const mt=H(Cu,[["__scopeId","data-v-b9be72d4"]]),Pu=R({__name:"VPNavBarMenuLink",props:{item:null},setup(e){const{page:t}=ue();return(n,s)=>(h(),q(mt,{class:ge({VPNavBarMenuLink:!0,active:p(At)(p(t).relativePath,e.item.activeMatch||e.item.link,!!e.item.activeMatch)}),href:e.item.link,target:e.item.target,rel:e.item.rel},{default:I(()=>[Se(ce(e.item.text),1)]),_:1},8,["class","href","target","rel"]))}});const Lu=H(Pu,[["__scopeId","data-v-eaade15b"]]),ao=le();let Cl=!1,bs=0;function Su(e){const t=le(!1);if($e){!Cl&&Tu(),bs++;const n=Je(ao,s=>{var o,i,l;s===e.el.value||(o=e.el.value)!=null&&o.contains(s)?(t.value=!0,(i=e.onFocus)==null||i.call(e)):(t.value=!1,(l=e.onBlur)==null||l.call(e))});gt(()=>{n(),bs--,bs||Vu()})}return Qs(t)}function Tu(){document.addEventListener("focusin",Pl),Cl=!0,ao.value=document.activeElement}function Vu(){document.removeEventListener("focusin",Pl)}function Pl(){ao.value=document.activeElement}const Eu={},Mu={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Au=k("path",{d:"M12,16c-0.3,0-0.5-0.1-0.7-0.3l-6-6c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l5.3,5.3l5.3-5.3c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-6,6C12.5,15.9,12.3,16,12,16z"},null,-1),Iu=[Au];function Nu(e,t){return h(),b("svg",Mu,Iu)}const Ll=H(Eu,[["render",Nu]]),Bu={},Ou={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Fu=k("circle",{cx:"12",cy:"12",r:"2"},null,-1),Hu=k("circle",{cx:"19",cy:"12",r:"2"},null,-1),Ru=k("circle",{cx:"5",cy:"12",r:"2"},null,-1),Du=[Fu,Hu,Ru];function Gu(e,t){return h(),b("svg",Ou,Du)}const Uu=H(Bu,[["render",Gu]]),ju={class:"VPMenuLink"},zu=R({__name:"VPMenuLink",props:{item:null},setup(e){const{page:t}=ue();return(n,s)=>(h(),b("div",ju,[V(mt,{class:ge({active:p(At)(p(t).relativePath,e.item.activeMatch||e.item.link,!!e.item.activeMatch)}),href:e.item.link,target:e.item.target,rel:e.item.rel},{default:I(()=>[Se(ce(e.item.text),1)]),_:1},8,["class","href","target","rel"])]))}});const is=H(zu,[["__scopeId","data-v-c8305630"]]),Ku={class:"VPMenuGroup"},qu={key:0,class:"title"},Wu=R({__name:"VPMenuGroup",props:{text:null,items:null},setup(e){return(t,n)=>(h(),b("div",Ku,[e.text?(h(),b("p",qu,ce(e.text),1)):D("",!0),(h(!0),b(Z,null,Ve(e.items,s=>(h(),b(Z,null,["link"in s?(h(),q(is,{key:0,item:s},null,8,["item"])):D("",!0)],64))),256))]))}});const Qu=H(Wu,[["__scopeId","data-v-4ed46b20"]]),Yu={class:"VPMenu"},Ju={key:0,class:"items"},Xu=R({__name:"VPMenu",props:{items:null},setup(e){return(t,n)=>(h(),b("div",Yu,[e.items?(h(),b("div",Ju,[(h(!0),b(Z,null,Ve(e.items,s=>(h(),b(Z,{key:s.text},["link"in s?(h(),q(is,{key:0,item:s},null,8,["item"])):(h(),q(Qu,{key:1,text:s.text,items:s.items},null,8,["text","items"]))],64))),128))])):D("",!0),S(t.$slots,"default",{},void 0,!0)]))}});const Zu=H(Xu,[["__scopeId","data-v-ad9b1221"]]),ed=["aria-expanded","aria-label"],td={key:0,class:"text"},nd={class:"menu"},sd=R({__name:"VPFlyout",props:{icon:null,button:null,label:null,items:null},setup(e){const t=le(!1),n=le();Su({el:n,onBlur:s});function s(){t.value=!1}return(o,i)=>(h(),b("div",{class:"VPFlyout",ref_key:"el",ref:n,onMouseenter:i[1]||(i[1]=l=>t.value=!0),onMouseleave:i[2]||(i[2]=l=>t.value=!1)},[k("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":t.value,"aria-label":e.label,onClick:i[0]||(i[0]=l=>t.value=!t.value)},[e.button||e.icon?(h(),b("span",td,[e.icon?(h(),q(hn(e.icon),{key:0,class:"option-icon"})):D("",!0),Se(" "+ce(e.button)+" ",1),V(Ll,{class:"text-icon"})])):(h(),q(Uu,{key:1,class:"icon"}))],8,ed),k("div",nd,[V(Zu,{items:e.items},{default:I(()=>[S(o.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}});const co=H(sd,[["__scopeId","data-v-5ade3574"]]),od=R({__name:"VPNavBarMenuGroup",props:{item:null},setup(e){const{page:t}=ue();return(n,s)=>(h(),q(co,{class:ge({VPNavBarMenuGroup:!0,active:p(At)(p(t).relativePath,e.item.activeMatch,!!e.item.activeMatch)}),button:e.item.text,items:e.item.items},null,8,["class","button","items"]))}}),id=e=>(Ze("data-v-f7e0d92f"),e=e(),et(),e),ld={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},rd=id(()=>k("span",{id:"main-nav-aria-label",class:"visually-hidden"},"Main Navigation",-1)),ad=R({__name:"VPNavBarMenu",setup(e){const{theme:t}=ue();return(n,s)=>p(t).nav?(h(),b("nav",ld,[rd,(h(!0),b(Z,null,Ve(p(t).nav,o=>(h(),b(Z,{key:o.text},["link"in o?(h(),q(Lu,{key:0,item:o},null,8,["item"])):(h(),q(od,{key:1,item:o},null,8,["item"]))],64))),128))])):D("",!0)}});const cd=H(ad,[["__scopeId","data-v-f7e0d92f"]]),ud={},dd={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},fd=k("path",{d:"M0 0h24v24H0z",fill:"none"},null,-1),hd=k("path",{d:" M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z ",class:"css-c4d79v"},null,-1),pd=[fd,hd];function _d(e,t){return h(),b("svg",dd,pd)}const Sl=H(ud,[["render",_d]]),gd={class:"items"},vd={class:"title"},md=R({__name:"VPNavBarTranslations",setup(e){const{localeLinks:t,currentLang:n}=yn({correspondingLink:!0});return(s,o)=>p(t).length&&p(n).label?(h(),q(co,{key:0,class:"VPNavBarTranslations",icon:Sl},{default:I(()=>[k("div",gd,[k("p",vd,ce(p(n).label),1),(h(!0),b(Z,null,Ve(p(t),i=>(h(),q(is,{key:i.link,item:i},null,8,["item"]))),128))])]),_:1})):D("",!0)}});const bd=H(md,[["__scopeId","data-v-d8bbd8f6"]]);const yd={},kd={class:"VPSwitch",type:"button",role:"switch"},xd={class:"check"},wd={key:0,class:"icon"};function $d(e,t){return h(),b("button",kd,[k("span",xd,[e.$slots.default?(h(),b("span",wd,[S(e.$slots,"default",{},void 0,!0)])):D("",!0)])])}const Cd=H(yd,[["render",$d],["__scopeId","data-v-f4e143c6"]]),Pd={},Ld={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Sd=Ca('',9),Td=[Sd];function Vd(e,t){return h(),b("svg",Ld,Td)}const Ed=H(Pd,[["render",Vd]]),Md={},Ad={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Id=k("path",{d:"M12.1,22c-0.3,0-0.6,0-0.9,0c-5.5-0.5-9.5-5.4-9-10.9c0.4-4.8,4.2-8.6,9-9c0.4,0,0.8,0.2,1,0.5c0.2,0.3,0.2,0.8-0.1,1.1c-2,2.7-1.4,6.4,1.3,8.4c2.1,1.6,5,1.6,7.1,0c0.3-0.2,0.7-0.3,1.1-0.1c0.3,0.2,0.5,0.6,0.5,1c-0.2,2.7-1.5,5.1-3.6,6.8C16.6,21.2,14.4,22,12.1,22zM9.3,4.4c-2.9,1-5,3.6-5.2,6.8c-0.4,4.4,2.8,8.3,7.2,8.7c2.1,0.2,4.2-0.4,5.8-1.8c1.1-0.9,1.9-2.1,2.4-3.4c-2.5,0.9-5.3,0.5-7.5-1.1C9.2,11.4,8.1,7.7,9.3,4.4z"},null,-1),Nd=[Id];function Bd(e,t){return h(),b("svg",Ad,Nd)}const Od=H(Md,[["render",Bd]]),Fd=R({__name:"VPSwitchAppearance",setup(e){const{site:t,isDark:n}=ue(),s=le(!1),o=typeof localStorage<"u"?i():()=>{};Oe(()=>{s.value=document.documentElement.classList.contains("dark")});function i(){const l=window.matchMedia("(prefers-color-scheme: dark)"),r=document.documentElement.classList;let a=localStorage.getItem(ei),u=t.value.appearance==="dark"&&a==null||(a==="auto"||a==null?l.matches:a==="dark");l.onchange=g=>{a==="auto"&&_(u=g.matches)};function f(){_(u=!u),a=u?l.matches?"auto":"dark":l.matches?"light":"auto",localStorage.setItem(ei,a)}function _(g){const y=document.createElement("style");y.type="text/css",y.appendChild(document.createTextNode(`:not(.VPSwitchAppearance):not(.VPSwitchAppearance *) {
+function Fs(e,t){const n=Object.create(null),s=e.split(",");for(let o=0;o!!n[o.toLowerCase()]:o=>!!n[o]}function Hs(e){if(W(e)){const t={};for(let n=0;n{if(n){const s=n.split(Hl);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function ge(e){let t="";if(ke(e))t=e;else if(W(e))for(let n=0;nke(e)?e:e==null?"":W(e)||ve(e)&&(e.toString===vi||!X(e.toString))?JSON.stringify(e,pi,2):String(e),pi=(e,t)=>t&&t.__v_isRef?pi(e,t.value):Ft(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,o])=>(n[`${s} =>`]=o,n),{})}:_i(t)?{[`Set(${t.size})`]:[...t.values()]}:ve(t)&&!W(t)&&!mi(t)?String(t):t,me={},Ot=[],ze=()=>{},jl=()=>!1,zl=/^on[^a-z]/,vn=e=>zl.test(e),Rs=e=>e.startsWith("onUpdate:"),we=Object.assign,Ds=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Kl=Object.prototype.hasOwnProperty,ie=(e,t)=>Kl.call(e,t),W=Array.isArray,Ft=e=>zn(e)==="[object Map]",_i=e=>zn(e)==="[object Set]",X=e=>typeof e=="function",ke=e=>typeof e=="string",Gs=e=>typeof e=="symbol",ve=e=>e!==null&&typeof e=="object",gi=e=>ve(e)&&X(e.then)&&X(e.catch),vi=Object.prototype.toString,zn=e=>vi.call(e),ql=e=>zn(e).slice(8,-1),mi=e=>zn(e)==="[object Object]",Us=e=>ke(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,nn=Fs(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Kn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Wl=/-(\w)/g,Xe=Kn(e=>e.replace(Wl,(t,n)=>n?n.toUpperCase():"")),Ql=/\B([A-Z])/g,Yt=Kn(e=>e.replace(Ql,"-$1").toLowerCase()),qn=Kn(e=>e.charAt(0).toUpperCase()+e.slice(1)),cs=Kn(e=>e?`on${qn(e)}`:""),cn=(e,t)=>!Object.is(e,t),us=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},Yl=e=>{const t=parseFloat(e);return isNaN(t)?e:t},Jl=e=>{const t=ke(e)?Number(e):NaN;return isNaN(t)?e:t};let yo;const Xl=()=>yo||(yo=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});let Ne;class Zl{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this.parent=Ne,!t&&Ne&&(this.index=(Ne.scopes||(Ne.scopes=[])).push(this)-1)}get active(){return this._active}run(t){if(this._active){const n=Ne;try{return Ne=this,t()}finally{Ne=n}}}on(){Ne=this}off(){Ne=this.parent}stop(t){if(this._active){let n,s;for(n=0,s=this.effects.length;n{const t=new Set(e);return t.w=0,t.n=0,t},yi=e=>(e.w&pt)>0,ki=e=>(e.n&pt)>0,nr=({deps:e})=>{if(e.length)for(let t=0;t{const{deps:t}=e;if(t.length){let n=0;for(let s=0;s{(f==="length"||f>=a)&&r.push(u)})}else switch(n!==void 0&&r.push(l.get(n)),t){case"add":W(e)?Us(n)&&r.push(l.get("length")):(r.push(l.get(Tt)),Ft(e)&&r.push(l.get(ws)));break;case"delete":W(e)||(r.push(l.get(Tt)),Ft(e)&&r.push(l.get(ws)));break;case"set":Ft(e)&&r.push(l.get(Tt));break}if(r.length===1)r[0]&&$s(r[0]);else{const a=[];for(const u of r)u&&a.push(...u);$s(js(a))}}function $s(e,t){const n=W(e)?e:[...e];for(const s of n)s.computed&&xo(s);for(const s of n)s.computed||xo(s)}function xo(e,t){(e!==Ue||e.allowRecurse)&&(e.scheduler?e.scheduler():e.run())}const or=Fs("__proto__,__v_isRef,__isVue"),$i=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Gs)),ir=Ks(),lr=Ks(!1,!0),rr=Ks(!0),wo=ar();function ar(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const s=ae(this);for(let i=0,l=this.length;i{e[t]=function(...n){Jt();const s=ae(this)[t].apply(this,n);return Xt(),s}}),e}function cr(e){const t=ae(this);return Me(t,"has",e),t.hasOwnProperty(e)}function Ks(e=!1,t=!1){return function(s,o,i){if(o==="__v_isReactive")return!e;if(o==="__v_isReadonly")return e;if(o==="__v_isShallow")return t;if(o==="__v_raw"&&i===(e?t?Cr:Ti:t?Si:Li).get(s))return s;const l=W(s);if(!e){if(l&&ie(wo,o))return Reflect.get(wo,o,i);if(o==="hasOwnProperty")return cr}const r=Reflect.get(s,o,i);return(Gs(o)?$i.has(o):or(o))||(e||Me(s,"get",o),t)?r:Pe(r)?l&&Us(o)?r:r.value:ve(r)?e?Qs(r):Qn(r):r}}const ur=Ci(),dr=Ci(!0);function Ci(e=!1){return function(n,s,o,i){let l=n[s];if(Kt(l)&&Pe(l)&&!Pe(o))return!1;if(!e&&(!Nn(o)&&!Kt(o)&&(l=ae(l),o=ae(o)),!W(n)&&Pe(l)&&!Pe(o)))return l.value=o,!0;const r=W(n)&&Us(s)?Number(s)e,Wn=e=>Reflect.getPrototypeOf(e);function wn(e,t,n=!1,s=!1){e=e.__v_raw;const o=ae(e),i=ae(t);n||(t!==i&&Me(o,"get",t),Me(o,"get",i));const{has:l}=Wn(o),r=s?qs:n?Js:un;if(l.call(o,t))return r(e.get(t));if(l.call(o,i))return r(e.get(i));e!==o&&e.get(t)}function $n(e,t=!1){const n=this.__v_raw,s=ae(n),o=ae(e);return t||(e!==o&&Me(s,"has",e),Me(s,"has",o)),e===o?n.has(e):n.has(e)||n.has(o)}function Cn(e,t=!1){return e=e.__v_raw,!t&&Me(ae(e),"iterate",Tt),Reflect.get(e,"size",e)}function $o(e){e=ae(e);const t=ae(this);return Wn(t).has.call(t,e)||(t.add(e),st(t,"add",e,e)),this}function Co(e,t){t=ae(t);const n=ae(this),{has:s,get:o}=Wn(n);let i=s.call(n,e);i||(e=ae(e),i=s.call(n,e));const l=o.call(n,e);return n.set(e,t),i?cn(t,l)&&st(n,"set",e,t):st(n,"add",e,t),this}function Po(e){const t=ae(this),{has:n,get:s}=Wn(t);let o=n.call(t,e);o||(e=ae(e),o=n.call(t,e)),s&&s.call(t,e);const i=t.delete(e);return o&&st(t,"delete",e,void 0),i}function Lo(){const e=ae(this),t=e.size!==0,n=e.clear();return t&&st(e,"clear",void 0,void 0),n}function Pn(e,t){return function(s,o){const i=this,l=i.__v_raw,r=ae(l),a=t?qs:e?Js:un;return!e&&Me(r,"iterate",Tt),l.forEach((u,f)=>s.call(o,a(u),a(f),i))}}function Ln(e,t,n){return function(...s){const o=this.__v_raw,i=ae(o),l=Ft(i),r=e==="entries"||e===Symbol.iterator&&l,a=e==="keys"&&l,u=o[e](...s),f=n?qs:t?Js:un;return!t&&Me(i,"iterate",a?ws:Tt),{next(){const{value:_,done:g}=u.next();return g?{value:_,done:g}:{value:r?[f(_[0]),f(_[1])]:f(_),done:g}},[Symbol.iterator](){return this}}}}function lt(e){return function(...t){return e==="delete"?!1:this}}function vr(){const e={get(i){return wn(this,i)},get size(){return Cn(this)},has:$n,add:$o,set:Co,delete:Po,clear:Lo,forEach:Pn(!1,!1)},t={get(i){return wn(this,i,!1,!0)},get size(){return Cn(this)},has:$n,add:$o,set:Co,delete:Po,clear:Lo,forEach:Pn(!1,!0)},n={get(i){return wn(this,i,!0)},get size(){return Cn(this,!0)},has(i){return $n.call(this,i,!0)},add:lt("add"),set:lt("set"),delete:lt("delete"),clear:lt("clear"),forEach:Pn(!0,!1)},s={get(i){return wn(this,i,!0,!0)},get size(){return Cn(this,!0)},has(i){return $n.call(this,i,!0)},add:lt("add"),set:lt("set"),delete:lt("delete"),clear:lt("clear"),forEach:Pn(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(i=>{e[i]=Ln(i,!1,!1),n[i]=Ln(i,!0,!1),t[i]=Ln(i,!1,!0),s[i]=Ln(i,!0,!0)}),[e,n,t,s]}const[mr,br,yr,kr]=vr();function Ws(e,t){const n=t?e?kr:yr:e?br:mr;return(s,o,i)=>o==="__v_isReactive"?!e:o==="__v_isReadonly"?e:o==="__v_raw"?s:Reflect.get(ie(n,o)&&o in s?n:s,o,i)}const xr={get:Ws(!1,!1)},wr={get:Ws(!1,!0)},$r={get:Ws(!0,!1)},Li=new WeakMap,Si=new WeakMap,Ti=new WeakMap,Cr=new WeakMap;function Pr(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Lr(e){return e.__v_skip||!Object.isExtensible(e)?0:Pr(ql(e))}function Qn(e){return Kt(e)?e:Ys(e,!1,Pi,xr,Li)}function Sr(e){return Ys(e,!1,gr,wr,Si)}function Qs(e){return Ys(e,!0,_r,$r,Ti)}function Ys(e,t,n,s,o){if(!ve(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=o.get(e);if(i)return i;const l=Lr(e);if(l===0)return e;const r=new Proxy(e,l===2?s:n);return o.set(e,r),r}function Ht(e){return Kt(e)?Ht(e.__v_raw):!!(e&&e.__v_isReactive)}function Kt(e){return!!(e&&e.__v_isReadonly)}function Nn(e){return!!(e&&e.__v_isShallow)}function Vi(e){return Ht(e)||Kt(e)}function ae(e){const t=e&&e.__v_raw;return t?ae(t):e}function sn(e){return In(e,"__v_skip",!0),e}const un=e=>ve(e)?Qn(e):e,Js=e=>ve(e)?Qs(e):e;function Ei(e){ft&&Ue&&(e=ae(e),wi(e.dep||(e.dep=js())))}function Mi(e,t){e=ae(e);const n=e.dep;n&&$s(n)}function Pe(e){return!!(e&&e.__v_isRef===!0)}function le(e){return Ai(e,!1)}function Tr(e){return Ai(e,!0)}function Ai(e,t){return Pe(e)?e:new Vr(e,t)}class Vr{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:ae(t),this._value=n?t:un(t)}get value(){return Ei(this),this._value}set value(t){const n=this.__v_isShallow||Nn(t)||Kt(t);t=n?t:ae(t),cn(t,this._rawValue)&&(this._rawValue=t,this._value=n?t:un(t),Mi(this))}}function p(e){return Pe(e)?e.value:e}const Er={get:(e,t,n)=>p(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const o=e[t];return Pe(o)&&!Pe(n)?(o.value=n,!0):Reflect.set(e,t,n,s)}};function Ii(e){return Ht(e)?e:new Proxy(e,Er)}var Ni;class Mr{constructor(t,n,s,o){this._setter=n,this.dep=void 0,this.__v_isRef=!0,this[Ni]=!1,this._dirty=!0,this.effect=new zs(t,()=>{this._dirty||(this._dirty=!0,Mi(this))}),this.effect.computed=this,this.effect.active=this._cacheable=!o,this.__v_isReadonly=s}get value(){const t=ae(this);return Ei(t),(t._dirty||!t._cacheable)&&(t._dirty=!1,t._value=t.effect.run()),t._value}set value(t){this._setter(t)}}Ni="__v_isReadonly";function Ar(e,t,n=!1){let s,o;const i=X(e);return i?(s=e,o=ze):(s=e.get,o=e.set),new Mr(s,o,i||!o,n)}function ht(e,t,n,s){let o;try{o=s?e(...s):e()}catch(i){mn(i,t,n)}return o}function Re(e,t,n,s){if(X(e)){const i=ht(e,t,n,s);return i&&gi(i)&&i.catch(l=>{mn(l,t,n)}),i}const o=[];for(let i=0;i>>1;fn(Ce[s])Ye&&Ce.splice(t,1)}function Or(e){W(e)?Rt.push(...e):(!nt||!nt.includes(e,e.allowRecurse?Ct+1:Ct))&&Rt.push(e),Oi()}function So(e,t=dn?Ye+1:0){for(;tfn(n)-fn(s)),Ct=0;Cte.id==null?1/0:e.id,Fr=(e,t)=>{const n=fn(e)-fn(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function Fi(e){Cs=!1,dn=!0,Ce.sort(Fr);const t=ze;try{for(Ye=0;Yeke(y)?y.trim():y)),_&&(o=n.map(Yl))}let r,a=s[r=cs(t)]||s[r=cs(Xe(t))];!a&&i&&(a=s[r=cs(Yt(t))]),a&&Re(a,e,6,o);const u=s[r+"Once"];if(u){if(!e.emitted)e.emitted={};else if(e.emitted[r])return;e.emitted[r]=!0,Re(u,e,6,o)}}function Hi(e,t,n=!1){const s=t.emitsCache,o=s.get(e);if(o!==void 0)return o;const i=e.emits;let l={},r=!1;if(!X(e)){const a=u=>{const f=Hi(u,t,!0);f&&(r=!0,we(l,f))};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}return!i&&!r?(ve(e)&&s.set(e,null),null):(W(i)?i.forEach(a=>l[a]=null):we(l,i),ve(e)&&s.set(e,l),l)}function Jn(e,t){return!e||!vn(t)?!1:(t=t.slice(2).replace(/Once$/,""),ie(e,t[0].toLowerCase()+t.slice(1))||ie(e,Yt(t))||ie(e,t))}let Le=null,Xn=null;function On(e){const t=Le;return Le=e,Xn=e&&e.type.__scopeId||null,t}function Ze(e){Xn=e}function et(){Xn=null}function I(e,t=Le,n){if(!t||e._n)return e;const s=(...o)=>{s._d&&Fo(-1);const i=On(t);let l;try{l=e(...o)}finally{On(i),s._d&&Fo(1)}return l};return s._n=!0,s._c=!0,s._d=!0,s}function ds(e){const{type:t,vnode:n,proxy:s,withProxy:o,props:i,propsOptions:[l],slots:r,attrs:a,emit:u,render:f,renderCache:_,data:g,setupState:y,ctx:T,inheritAttrs:M}=e;let K,m;const C=On(e);try{if(n.shapeFlag&4){const Y=o||s;K=Ge(f.call(Y,Y,_,i,y,g,T)),m=a}else{const Y=t;K=Ge(Y.length>1?Y(i,{attrs:a,slots:r,emit:u}):Y(i,null)),m=t.props?a:Rr(a)}}catch(Y){ln.length=0,mn(Y,e,1),K=V(Be)}let B=K;if(m&&M!==!1){const Y=Object.keys(m),{shapeFlag:te}=B;Y.length&&te&7&&(l&&Y.some(Rs)&&(m=Dr(m,l)),B=_t(B,m))}return n.dirs&&(B=_t(B),B.dirs=B.dirs?B.dirs.concat(n.dirs):n.dirs),n.transition&&(B.transition=n.transition),K=B,On(C),K}const Rr=e=>{let t;for(const n in e)(n==="class"||n==="style"||vn(n))&&((t||(t={}))[n]=e[n]);return t},Dr=(e,t)=>{const n={};for(const s in e)(!Rs(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function Gr(e,t,n){const{props:s,children:o,component:i}=e,{props:l,children:r,patchFlag:a}=t,u=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&a>=0){if(a&1024)return!0;if(a&16)return s?To(s,l,u):!!l;if(a&8){const f=t.dynamicProps;for(let _=0;_e.__isSuspense;function Ri(e,t){t&&t.pendingBranch?W(e)?t.effects.push(...e):t.effects.push(e):Or(e)}function Dt(e,t){if(ye){let n=ye.provides;const s=ye.parent&&ye.parent.provides;s===n&&(n=ye.provides=Object.create(s)),n[e]=t}}function Ke(e,t,n=!1){const s=ye||Le;if(s){const o=s.parent==null?s.vnode.appContext&&s.vnode.appContext.provides:s.parent.provides;if(o&&e in o)return o[e];if(arguments.length>1)return n&&X(t)?t.call(s.proxy):t}}function Et(e,t){return Zn(e,null,t)}function Di(e,t){return Zn(e,null,{flush:"post"})}const Sn={};function Je(e,t,n){return Zn(e,t,n)}function Zn(e,t,{immediate:n,deep:s,flush:o,onTrack:i,onTrigger:l}=me){const r=bi()===(ye==null?void 0:ye.scope)?ye:null;let a,u=!1,f=!1;if(Pe(e)?(a=()=>e.value,u=Nn(e)):Ht(e)?(a=()=>e,s=!0):W(e)?(f=!0,u=e.some(B=>Ht(B)||Nn(B)),a=()=>e.map(B=>{if(Pe(B))return B.value;if(Ht(B))return Bt(B);if(X(B))return ht(B,r,2)})):X(e)?t?a=()=>ht(e,r,2):a=()=>{if(!(r&&r.isUnmounted))return _&&_(),Re(e,r,3,[g])}:a=ze,t&&s){const B=a;a=()=>Bt(B())}let _,g=B=>{_=m.onStop=()=>{ht(B,r,4)}},y;if(Qt)if(g=ze,t?n&&Re(t,r,3,[a(),f?[]:void 0,g]):a(),o==="sync"){const B=Oa();y=B.__watcherHandles||(B.__watcherHandles=[])}else return ze;let T=f?new Array(e.length).fill(Sn):Sn;const M=()=>{if(m.active)if(t){const B=m.run();(s||u||(f?B.some((Y,te)=>cn(Y,T[te])):cn(B,T)))&&(_&&_(),Re(t,r,3,[B,T===Sn?void 0:f&&T[0]===Sn?[]:T,g]),T=B)}else m.run()};M.allowRecurse=!!t;let K;o==="sync"?K=M:o==="post"?K=()=>Ee(M,r&&r.suspense):(M.pre=!0,r&&(M.id=r.uid),K=()=>Yn(M));const m=new zs(a,K);t?n?M():T=m.run():o==="post"?Ee(m.run.bind(m),r&&r.suspense):m.run();const C=()=>{m.stop(),r&&r.scope&&Ds(r.scope.effects,m)};return y&&y.push(C),C}function zr(e,t,n){const s=this.proxy,o=ke(e)?e.includes(".")?Gi(s,e):()=>s[e]:e.bind(s,s);let i;X(t)?i=t:(i=t.handler,n=t);const l=ye;Wt(this);const r=Zn(o,i.bind(s),n);return l?Wt(l):Vt(),r}function Gi(e,t){const n=t.split(".");return()=>{let s=e;for(let o=0;o{Bt(n,t)});else if(mi(e))for(const n in e)Bt(e[n],t);return e}function Kr(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return Oe(()=>{e.isMounted=!0}),qi(()=>{e.isUnmounting=!0}),e}const Fe=[Function,Array],qr={name:"BaseTransition",props:{mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Fe,onEnter:Fe,onAfterEnter:Fe,onEnterCancelled:Fe,onBeforeLeave:Fe,onLeave:Fe,onAfterLeave:Fe,onLeaveCancelled:Fe,onBeforeAppear:Fe,onAppear:Fe,onAfterAppear:Fe,onAppearCancelled:Fe},setup(e,{slots:t}){const n=ns(),s=Kr();let o;return()=>{const i=t.default&&zi(t.default(),!0);if(!i||!i.length)return;let l=i[0];if(i.length>1){for(const M of i)if(M.type!==Be){l=M;break}}const r=ae(e),{mode:a}=r;if(s.isLeaving)return fs(l);const u=Vo(l);if(!u)return fs(l);const f=Ps(u,r,s,n);Ls(u,f);const _=n.subTree,g=_&&Vo(_);let y=!1;const{getTransitionKey:T}=u.type;if(T){const M=T();o===void 0?o=M:M!==o&&(o=M,y=!0)}if(g&&g.type!==Be&&(!Pt(u,g)||y)){const M=Ps(g,r,s,n);if(Ls(g,M),a==="out-in")return s.isLeaving=!0,M.afterLeave=()=>{s.isLeaving=!1,n.update.active!==!1&&n.update()},fs(l);a==="in-out"&&u.type!==Be&&(M.delayLeave=(K,m,C)=>{const B=ji(s,g);B[String(g.key)]=g,K._leaveCb=()=>{m(),K._leaveCb=void 0,delete f.delayedLeave},f.delayedLeave=C})}return l}}},Ui=qr;function ji(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function Ps(e,t,n,s){const{appear:o,mode:i,persisted:l=!1,onBeforeEnter:r,onEnter:a,onAfterEnter:u,onEnterCancelled:f,onBeforeLeave:_,onLeave:g,onAfterLeave:y,onLeaveCancelled:T,onBeforeAppear:M,onAppear:K,onAfterAppear:m,onAppearCancelled:C}=t,B=String(e.key),Y=ji(n,e),te=(N,ee)=>{N&&Re(N,s,9,ee)},he=(N,ee)=>{const J=ee[1];te(N,ee),W(N)?N.every(re=>re.length<=1)&&J():N.length<=1&&J()},oe={mode:i,persisted:l,beforeEnter(N){let ee=r;if(!n.isMounted)if(o)ee=M||r;else return;N._leaveCb&&N._leaveCb(!0);const J=Y[B];J&&Pt(e,J)&&J.el._leaveCb&&J.el._leaveCb(),te(ee,[N])},enter(N){let ee=a,J=u,re=f;if(!n.isMounted)if(o)ee=K||a,J=m||u,re=C||f;else return;let O=!1;const ne=N._enterCb=G=>{O||(O=!0,G?te(re,[N]):te(J,[N]),oe.delayedLeave&&oe.delayedLeave(),N._enterCb=void 0)};ee?he(ee,[N,ne]):ne()},leave(N,ee){const J=String(e.key);if(N._enterCb&&N._enterCb(!0),n.isUnmounting)return ee();te(_,[N]);let re=!1;const O=N._leaveCb=ne=>{re||(re=!0,ee(),ne?te(T,[N]):te(y,[N]),N._leaveCb=void 0,Y[J]===e&&delete Y[J])};Y[J]=e,g?he(g,[N,O]):O()},clone(N){return Ps(N,t,n,s)}};return oe}function fs(e){if(bn(e))return e=_t(e),e.children=null,e}function Vo(e){return bn(e)?e.children?e.children[0]:void 0:e}function Ls(e,t){e.shapeFlag&6&&e.component?Ls(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function zi(e,t=!1,n){let s=[],o=0;for(let i=0;i1)for(let i=0;i!!e.type.__asyncLoader;function Wr(e){X(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:s,delay:o=200,timeout:i,suspensible:l=!0,onError:r}=e;let a=null,u,f=0;const _=()=>(f++,a=null,g()),g=()=>{let y;return a||(y=a=t().catch(T=>{if(T=T instanceof Error?T:new Error(String(T)),r)return new Promise((M,K)=>{r(T,()=>M(_()),()=>K(T),f+1)});throw T}).then(T=>y!==a&&a?a:(T&&(T.__esModule||T[Symbol.toStringTag]==="Module")&&(T=T.default),u=T,T)))};return R({name:"AsyncComponentWrapper",__asyncLoader:g,get __asyncResolved(){return u},setup(){const y=ye;if(u)return()=>hs(u,y);const T=C=>{a=null,mn(C,y,13,!s)};if(l&&y.suspense||Qt)return g().then(C=>()=>hs(C,y)).catch(C=>(T(C),()=>s?V(s,{error:C}):null));const M=le(!1),K=le(),m=le(!!o);return o&&setTimeout(()=>{m.value=!1},o),i!=null&&setTimeout(()=>{if(!M.value&&!K.value){const C=new Error(`Async component timed out after ${i}ms.`);T(C),K.value=C}},i),g().then(()=>{M.value=!0,y.parent&&bn(y.parent.vnode)&&Yn(y.parent.update)}).catch(C=>{T(C),K.value=C}),()=>{if(M.value&&u)return hs(u,y);if(K.value&&s)return V(s,{error:K.value});if(n&&!m.value)return V(n)}}})}function hs(e,t){const{ref:n,props:s,children:o,ce:i}=t.vnode,l=V(e,s,o);return l.ref=n,l.ce=i,delete t.vnode.ce,l}const bn=e=>e.type.__isKeepAlive;function Qr(e,t){Ki(e,"a",t)}function Yr(e,t){Ki(e,"da",t)}function Ki(e,t,n=ye){const s=e.__wdc||(e.__wdc=()=>{let o=n;for(;o;){if(o.isDeactivated)return;o=o.parent}return e()});if(es(t,s,n),n){let o=n.parent;for(;o&&o.parent;)bn(o.parent.vnode)&&Jr(s,t,n,o),o=o.parent}}function Jr(e,t,n,s){const o=es(t,e,s,!0);gt(()=>{Ds(s[t],o)},n)}function es(e,t,n=ye,s=!1){if(n){const o=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...l)=>{if(n.isUnmounted)return;Jt(),Wt(n);const r=Re(t,n,e,l);return Vt(),Xt(),r});return s?o.unshift(i):o.push(i),i}}const ot=e=>(t,n=ye)=>(!Qt||e==="sp")&&es(e,(...s)=>t(...s),n),Xr=ot("bm"),Oe=ot("m"),Zr=ot("bu"),eo=ot("u"),qi=ot("bum"),gt=ot("um"),ea=ot("sp"),ta=ot("rtg"),na=ot("rtc");function sa(e,t=ye){es("ec",e,t)}function Qe(e,t,n,s){const o=e.dirs,i=t&&t.dirs;for(let l=0;lt(l,r,void 0,i&&i[r]));else{const l=Object.keys(e);o=new Array(l.length);for(let r=0,a=l.length;rRn(t)?!(t.type===Be||t.type===Z&&!Yi(t.children)):!0)?e:null}const Ss=e=>e?rl(e)?io(e)||e.proxy:Ss(e.parent):null,on=we(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Ss(e.parent),$root:e=>Ss(e.root),$emit:e=>e.emit,$options:e=>no(e),$forceUpdate:e=>e.f||(e.f=()=>Yn(e.update)),$nextTick:e=>e.n||(e.n=Zs.bind(e.proxy)),$watch:e=>zr.bind(e)}),ps=(e,t)=>e!==me&&!e.__isScriptSetup&&ie(e,t),oa={get({_:e},t){const{ctx:n,setupState:s,data:o,props:i,accessCache:l,type:r,appContext:a}=e;let u;if(t[0]!=="$"){const y=l[t];if(y!==void 0)switch(y){case 1:return s[t];case 2:return o[t];case 4:return n[t];case 3:return i[t]}else{if(ps(s,t))return l[t]=1,s[t];if(o!==me&&ie(o,t))return l[t]=2,o[t];if((u=e.propsOptions[0])&&ie(u,t))return l[t]=3,i[t];if(n!==me&&ie(n,t))return l[t]=4,n[t];Ts&&(l[t]=0)}}const f=on[t];let _,g;if(f)return t==="$attrs"&&Me(e,"get",t),f(e);if((_=r.__cssModules)&&(_=_[t]))return _;if(n!==me&&ie(n,t))return l[t]=4,n[t];if(g=a.config.globalProperties,ie(g,t))return g[t]},set({_:e},t,n){const{data:s,setupState:o,ctx:i}=e;return ps(o,t)?(o[t]=n,!0):s!==me&&ie(s,t)?(s[t]=n,!0):ie(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:o,propsOptions:i}},l){let r;return!!n[l]||e!==me&&ie(e,l)||ps(t,l)||(r=i[0])&&ie(r,l)||ie(s,l)||ie(on,l)||ie(o.config.globalProperties,l)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:ie(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};let Ts=!0;function ia(e){const t=no(e),n=e.proxy,s=e.ctx;Ts=!1,t.beforeCreate&&Mo(t.beforeCreate,e,"bc");const{data:o,computed:i,methods:l,watch:r,provide:a,inject:u,created:f,beforeMount:_,mounted:g,beforeUpdate:y,updated:T,activated:M,deactivated:K,beforeDestroy:m,beforeUnmount:C,destroyed:B,unmounted:Y,render:te,renderTracked:he,renderTriggered:oe,errorCaptured:N,serverPrefetch:ee,expose:J,inheritAttrs:re,components:O,directives:ne,filters:G}=t;if(u&&la(u,s,null,e.appContext.config.unwrapInjectedRef),l)for(const be in l){const pe=l[be];X(pe)&&(s[be]=pe.bind(n))}if(o){const be=o.call(n,n);ve(be)&&(e.data=Qn(be))}if(Ts=!0,i)for(const be in i){const pe=i[be],bt=X(pe)?pe.bind(n,n):X(pe.get)?pe.get.bind(n,n):ze,kn=!X(pe)&&X(pe.set)?pe.set.bind(n):ze,yt=z({get:bt,set:kn});Object.defineProperty(s,be,{enumerable:!0,configurable:!0,get:()=>yt.value,set:qe=>yt.value=qe})}if(r)for(const be in r)Ji(r[be],s,n,be);if(a){const be=X(a)?a.call(n):a;Reflect.ownKeys(be).forEach(pe=>{Dt(pe,be[pe])})}f&&Mo(f,e,"c");function de(be,pe){W(pe)?pe.forEach(bt=>be(bt.bind(n))):pe&&be(pe.bind(n))}if(de(Xr,_),de(Oe,g),de(Zr,y),de(eo,T),de(Qr,M),de(Yr,K),de(sa,N),de(na,he),de(ta,oe),de(qi,C),de(gt,Y),de(ea,ee),W(J))if(J.length){const be=e.exposed||(e.exposed={});J.forEach(pe=>{Object.defineProperty(be,pe,{get:()=>n[pe],set:bt=>n[pe]=bt})})}else e.exposed||(e.exposed={});te&&e.render===ze&&(e.render=te),re!=null&&(e.inheritAttrs=re),O&&(e.components=O),ne&&(e.directives=ne)}function la(e,t,n=ze,s=!1){W(e)&&(e=Vs(e));for(const o in e){const i=e[o];let l;ve(i)?"default"in i?l=Ke(i.from||o,i.default,!0):l=Ke(i.from||o):l=Ke(i),Pe(l)&&s?Object.defineProperty(t,o,{enumerable:!0,configurable:!0,get:()=>l.value,set:r=>l.value=r}):t[o]=l}}function Mo(e,t,n){Re(W(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function Ji(e,t,n,s){const o=s.includes(".")?Gi(n,s):()=>n[s];if(ke(e)){const i=t[e];X(i)&&Je(o,i)}else if(X(e))Je(o,e.bind(n));else if(ve(e))if(W(e))e.forEach(i=>Ji(i,t,n,s));else{const i=X(e.handler)?e.handler.bind(n):t[e.handler];X(i)&&Je(o,i,e)}}function no(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:o,optionsCache:i,config:{optionMergeStrategies:l}}=e.appContext,r=i.get(t);let a;return r?a=r:!o.length&&!n&&!s?a=t:(a={},o.length&&o.forEach(u=>Fn(a,u,l,!0)),Fn(a,t,l)),ve(t)&&i.set(t,a),a}function Fn(e,t,n,s=!1){const{mixins:o,extends:i}=t;i&&Fn(e,i,n,!0),o&&o.forEach(l=>Fn(e,l,n,!0));for(const l in t)if(!(s&&l==="expose")){const r=ra[l]||n&&n[l];e[l]=r?r(e[l],t[l]):t[l]}return e}const ra={data:Ao,props:$t,emits:$t,methods:$t,computed:$t,beforeCreate:Te,created:Te,beforeMount:Te,mounted:Te,beforeUpdate:Te,updated:Te,beforeDestroy:Te,beforeUnmount:Te,destroyed:Te,unmounted:Te,activated:Te,deactivated:Te,errorCaptured:Te,serverPrefetch:Te,components:$t,directives:$t,watch:ca,provide:Ao,inject:aa};function Ao(e,t){return t?e?function(){return we(X(e)?e.call(this,this):e,X(t)?t.call(this,this):t)}:t:e}function aa(e,t){return $t(Vs(e),Vs(t))}function Vs(e){if(W(e)){const t={};for(let n=0;n0)&&!(l&16)){if(l&8){const f=e.vnode.dynamicProps;for(let _=0;_{a=!0;const[g,y]=Zi(_,t,!0);we(l,g),y&&r.push(...y)};!n&&t.mixins.length&&t.mixins.forEach(f),e.extends&&f(e.extends),e.mixins&&e.mixins.forEach(f)}if(!i&&!a)return ve(e)&&s.set(e,Ot),Ot;if(W(i))for(let f=0;f-1,y[1]=M<0||T-1||ie(y,"default"))&&r.push(_)}}}const u=[l,r];return ve(e)&&s.set(e,u),u}function Io(e){return e[0]!=="$"}function No(e){const t=e&&e.toString().match(/^\s*(function|class) (\w+)/);return t?t[2]:e===null?"null":""}function Bo(e,t){return No(e)===No(t)}function Oo(e,t){return W(t)?t.findIndex(n=>Bo(n,e)):X(t)&&Bo(t,e)?0:-1}const el=e=>e[0]==="_"||e==="$stable",so=e=>W(e)?e.map(Ge):[Ge(e)],fa=(e,t,n)=>{if(t._n)return t;const s=I((...o)=>so(t(...o)),n);return s._c=!1,s},tl=(e,t,n)=>{const s=e._ctx;for(const o in e){if(el(o))continue;const i=e[o];if(X(i))t[o]=fa(o,i,s);else if(i!=null){const l=so(i);t[o]=()=>l}}},nl=(e,t)=>{const n=so(t);e.slots.default=()=>n},ha=(e,t)=>{if(e.vnode.shapeFlag&32){const n=t._;n?(e.slots=ae(t),In(t,"_",n)):tl(t,e.slots={})}else e.slots={},t&&nl(e,t);In(e.slots,ts,1)},pa=(e,t,n)=>{const{vnode:s,slots:o}=e;let i=!0,l=me;if(s.shapeFlag&32){const r=t._;r?n&&r===1?i=!1:(we(o,t),!n&&r===1&&delete o._):(i=!t.$stable,tl(t,o)),l=t}else t&&(nl(e,t),l={default:1});if(i)for(const r in o)!el(r)&&!(r in l)&&delete o[r]};function sl(){return{app:null,config:{isNativeTag:jl,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let _a=0;function ga(e,t){return function(s,o=null){X(s)||(s=Object.assign({},s)),o!=null&&!ve(o)&&(o=null);const i=sl(),l=new Set;let r=!1;const a=i.app={_uid:_a++,_component:s,_props:o,_container:null,_context:i,_instance:null,version:Fa,get config(){return i.config},set config(u){},use(u,...f){return l.has(u)||(u&&X(u.install)?(l.add(u),u.install(a,...f)):X(u)&&(l.add(u),u(a,...f))),a},mixin(u){return i.mixins.includes(u)||i.mixins.push(u),a},component(u,f){return f?(i.components[u]=f,a):i.components[u]},directive(u,f){return f?(i.directives[u]=f,a):i.directives[u]},mount(u,f,_){if(!r){const g=V(s,o);return g.appContext=i,f&&t?t(g,u):e(g,u,_),r=!0,a._container=u,u.__vue_app__=a,io(g.component)||g.component.proxy}},unmount(){r&&(e(null,a._container),delete a._container.__vue_app__)},provide(u,f){return i.provides[u]=f,a}};return a}}function Hn(e,t,n,s,o=!1){if(W(e)){e.forEach((g,y)=>Hn(g,t&&(W(t)?t[y]:t),n,s,o));return}if(Gt(s)&&!o)return;const i=s.shapeFlag&4?io(s.component)||s.component.proxy:s.el,l=o?null:i,{i:r,r:a}=e,u=t&&t.r,f=r.refs===me?r.refs={}:r.refs,_=r.setupState;if(u!=null&&u!==a&&(ke(u)?(f[u]=null,ie(_,u)&&(_[u]=null)):Pe(u)&&(u.value=null)),X(a))ht(a,r,12,[l,f]);else{const g=ke(a),y=Pe(a);if(g||y){const T=()=>{if(e.f){const M=g?ie(_,a)?_[a]:f[a]:a.value;o?W(M)&&Ds(M,i):W(M)?M.includes(i)||M.push(i):g?(f[a]=[i],ie(_,a)&&(_[a]=f[a])):(a.value=[i],e.k&&(f[e.k]=a.value))}else g?(f[a]=l,ie(_,a)&&(_[a]=l)):y&&(a.value=l,e.k&&(f[e.k]=l))};l?(T.id=-1,Ee(T,n)):T()}}}let rt=!1;const Tn=e=>/svg/.test(e.namespaceURI)&&e.tagName!=="foreignObject",Vn=e=>e.nodeType===8;function va(e){const{mt:t,p:n,o:{patchProp:s,createText:o,nextSibling:i,parentNode:l,remove:r,insert:a,createComment:u}}=e,f=(m,C)=>{if(!C.hasChildNodes()){n(null,m,C),Bn(),C._vnode=m;return}rt=!1,_(C.firstChild,m,null,null,null),Bn(),C._vnode=m,rt&&console.error("Hydration completed but contains mismatches.")},_=(m,C,B,Y,te,he=!1)=>{const oe=Vn(m)&&m.data==="[",N=()=>M(m,C,B,Y,te,oe),{type:ee,ref:J,shapeFlag:re,patchFlag:O}=C;let ne=m.nodeType;C.el=m,O===-2&&(he=!1,C.dynamicChildren=null);let G=null;switch(ee){case qt:ne!==3?C.children===""?(a(C.el=o(""),l(m),m),G=m):G=N():(m.data!==C.children&&(rt=!0,m.data=C.children),G=i(m));break;case Be:ne!==8||oe?G=N():G=i(m);break;case Ut:if(oe&&(m=i(m),ne=m.nodeType),ne===1||ne===3){G=m;const Ae=!C.children.length;for(let de=0;de{he=he||!!C.dynamicChildren;const{type:oe,props:N,patchFlag:ee,shapeFlag:J,dirs:re}=C,O=oe==="input"&&re||oe==="option";if(O||ee!==-1){if(re&&Qe(C,null,B,"created"),N)if(O||!he||ee&48)for(const G in N)(O&&G.endsWith("value")||vn(G)&&!nn(G))&&s(m,G,null,N[G],!1,void 0,B);else N.onClick&&s(m,"onClick",null,N.onClick,!1,void 0,B);let ne;if((ne=N&&N.onVnodeBeforeMount)&&He(ne,B,C),re&&Qe(C,null,B,"beforeMount"),((ne=N&&N.onVnodeMounted)||re)&&Ri(()=>{ne&&He(ne,B,C),re&&Qe(C,null,B,"mounted")},Y),J&16&&!(N&&(N.innerHTML||N.textContent))){let G=y(m.firstChild,C,m,B,Y,te,he);for(;G;){rt=!0;const Ae=G;G=G.nextSibling,r(Ae)}}else J&8&&m.textContent!==C.children&&(rt=!0,m.textContent=C.children)}return m.nextSibling},y=(m,C,B,Y,te,he,oe)=>{oe=oe||!!C.dynamicChildren;const N=C.children,ee=N.length;for(let J=0;J{const{slotScopeIds:oe}=C;oe&&(te=te?te.concat(oe):oe);const N=l(m),ee=y(i(m),C,N,B,Y,te,he);return ee&&Vn(ee)&&ee.data==="]"?i(C.anchor=ee):(rt=!0,a(C.anchor=u("]"),N,ee),ee)},M=(m,C,B,Y,te,he)=>{if(rt=!0,C.el=null,he){const ee=K(m);for(;;){const J=i(m);if(J&&J!==ee)r(J);else break}}const oe=i(m),N=l(m);return r(m),n(null,C,N,oe,B,Y,Tn(N),te),oe},K=m=>{let C=0;for(;m;)if(m=i(m),m&&Vn(m)&&(m.data==="["&&C++,m.data==="]")){if(C===0)return i(m);C--}return m};return[f,_]}const Ee=Ri;function ma(e){return ba(e,va)}function ba(e,t){const n=Xl();n.__VUE__=!0;const{insert:s,remove:o,patchProp:i,createElement:l,createText:r,createComment:a,setText:u,setElementText:f,parentNode:_,nextSibling:g,setScopeId:y=ze,insertStaticContent:T}=e,M=(c,d,v,w=null,x=null,L=null,A=!1,P=null,E=!!d.dynamicChildren)=>{if(c===d)return;c&&!Pt(c,d)&&(w=xn(c),qe(c,x,L,!0),c=null),d.patchFlag===-2&&(E=!1,d.dynamicChildren=null);const{type:$,ref:U,shapeFlag:F}=d;switch($){case qt:K(c,d,v,w);break;case Be:m(c,d,v,w);break;case Ut:c==null&&C(d,v,w,A);break;case Z:O(c,d,v,w,x,L,A,P,E);break;default:F&1?te(c,d,v,w,x,L,A,P,E):F&6?ne(c,d,v,w,x,L,A,P,E):(F&64||F&128)&&$.process(c,d,v,w,x,L,A,P,E,It)}U!=null&&x&&Hn(U,c&&c.ref,L,d||c,!d)},K=(c,d,v,w)=>{if(c==null)s(d.el=r(d.children),v,w);else{const x=d.el=c.el;d.children!==c.children&&u(x,d.children)}},m=(c,d,v,w)=>{c==null?s(d.el=a(d.children||""),v,w):d.el=c.el},C=(c,d,v,w)=>{[c.el,c.anchor]=T(c.children,d,v,w,c.el,c.anchor)},B=({el:c,anchor:d},v,w)=>{let x;for(;c&&c!==d;)x=g(c),s(c,v,w),c=x;s(d,v,w)},Y=({el:c,anchor:d})=>{let v;for(;c&&c!==d;)v=g(c),o(c),c=v;o(d)},te=(c,d,v,w,x,L,A,P,E)=>{A=A||d.type==="svg",c==null?he(d,v,w,x,L,A,P,E):ee(c,d,x,L,A,P,E)},he=(c,d,v,w,x,L,A,P)=>{let E,$;const{type:U,props:F,shapeFlag:j,transition:Q,dirs:se}=c;if(E=c.el=l(c.type,L,F&&F.is,F),j&8?f(E,c.children):j&16&&N(c.children,E,null,w,x,L&&U!=="foreignObject",A,P),se&&Qe(c,null,w,"created"),oe(E,c,c.scopeId,A,w),F){for(const fe in F)fe!=="value"&&!nn(fe)&&i(E,fe,null,F[fe],L,c.children,w,x,tt);"value"in F&&i(E,"value",null,F.value),($=F.onVnodeBeforeMount)&&He($,w,c)}se&&Qe(c,null,w,"beforeMount");const _e=(!x||x&&!x.pendingBranch)&&Q&&!Q.persisted;_e&&Q.beforeEnter(E),s(E,d,v),(($=F&&F.onVnodeMounted)||_e||se)&&Ee(()=>{$&&He($,w,c),_e&&Q.enter(E),se&&Qe(c,null,w,"mounted")},x)},oe=(c,d,v,w,x)=>{if(v&&y(c,v),w)for(let L=0;L{for(let $=E;${const P=d.el=c.el;let{patchFlag:E,dynamicChildren:$,dirs:U}=d;E|=c.patchFlag&16;const F=c.props||me,j=d.props||me;let Q;v&&kt(v,!1),(Q=j.onVnodeBeforeUpdate)&&He(Q,v,d,c),U&&Qe(d,c,v,"beforeUpdate"),v&&kt(v,!0);const se=x&&d.type!=="foreignObject";if($?J(c.dynamicChildren,$,P,v,w,se,L):A||pe(c,d,P,null,v,w,se,L,!1),E>0){if(E&16)re(P,d,F,j,v,w,x);else if(E&2&&F.class!==j.class&&i(P,"class",null,j.class,x),E&4&&i(P,"style",F.style,j.style,x),E&8){const _e=d.dynamicProps;for(let fe=0;fe<_e.length;fe++){const xe=_e[fe],De=F[xe],Nt=j[xe];(Nt!==De||xe==="value")&&i(P,xe,De,Nt,x,c.children,v,w,tt)}}E&1&&c.children!==d.children&&f(P,d.children)}else!A&&$==null&&re(P,d,F,j,v,w,x);((Q=j.onVnodeUpdated)||U)&&Ee(()=>{Q&&He(Q,v,d,c),U&&Qe(d,c,v,"updated")},w)},J=(c,d,v,w,x,L,A)=>{for(let P=0;P{if(v!==w){if(v!==me)for(const P in v)!nn(P)&&!(P in w)&&i(c,P,v[P],null,A,d.children,x,L,tt);for(const P in w){if(nn(P))continue;const E=w[P],$=v[P];E!==$&&P!=="value"&&i(c,P,$,E,A,d.children,x,L,tt)}"value"in w&&i(c,"value",v.value,w.value)}},O=(c,d,v,w,x,L,A,P,E)=>{const $=d.el=c?c.el:r(""),U=d.anchor=c?c.anchor:r("");let{patchFlag:F,dynamicChildren:j,slotScopeIds:Q}=d;Q&&(P=P?P.concat(Q):Q),c==null?(s($,v,w),s(U,v,w),N(d.children,v,U,x,L,A,P,E)):F>0&&F&64&&j&&c.dynamicChildren?(J(c.dynamicChildren,j,v,x,L,A,P),(d.key!=null||x&&d===x.subTree)&&ol(c,d,!0)):pe(c,d,v,U,x,L,A,P,E)},ne=(c,d,v,w,x,L,A,P,E)=>{d.slotScopeIds=P,c==null?d.shapeFlag&512?x.ctx.activate(d,v,w,A,E):G(d,v,w,x,L,A,E):Ae(c,d,E)},G=(c,d,v,w,x,L,A)=>{const P=c.component=Sa(c,w,x);if(bn(c)&&(P.ctx.renderer=It),Ta(P),P.asyncDep){if(x&&x.registerDep(P,de),!c.el){const E=P.subTree=V(Be);m(null,E,d,v)}return}de(P,c,d,v,x,L,A)},Ae=(c,d,v)=>{const w=d.component=c.component;if(Gr(c,d,v))if(w.asyncDep&&!w.asyncResolved){be(w,d,v);return}else w.next=d,Br(w.update),w.update();else d.el=c.el,w.vnode=d},de=(c,d,v,w,x,L,A)=>{const P=()=>{if(c.isMounted){let{next:U,bu:F,u:j,parent:Q,vnode:se}=c,_e=U,fe;kt(c,!1),U?(U.el=se.el,be(c,U,A)):U=se,F&&us(F),(fe=U.props&&U.props.onVnodeBeforeUpdate)&&He(fe,Q,U,se),kt(c,!0);const xe=ds(c),De=c.subTree;c.subTree=xe,M(De,xe,_(De.el),xn(De),c,x,L),U.el=xe.el,_e===null&&Ur(c,xe.el),j&&Ee(j,x),(fe=U.props&&U.props.onVnodeUpdated)&&Ee(()=>He(fe,Q,U,se),x)}else{let U;const{el:F,props:j}=d,{bm:Q,m:se,parent:_e}=c,fe=Gt(d);if(kt(c,!1),Q&&us(Q),!fe&&(U=j&&j.onVnodeBeforeMount)&&He(U,_e,d),kt(c,!0),F&&as){const xe=()=>{c.subTree=ds(c),as(F,c.subTree,c,x,null)};fe?d.type.__asyncLoader().then(()=>!c.isUnmounted&&xe()):xe()}else{const xe=c.subTree=ds(c);M(null,xe,v,w,c,x,L),d.el=xe.el}if(se&&Ee(se,x),!fe&&(U=j&&j.onVnodeMounted)){const xe=d;Ee(()=>He(U,_e,xe),x)}(d.shapeFlag&256||_e&&Gt(_e.vnode)&&_e.vnode.shapeFlag&256)&&c.a&&Ee(c.a,x),c.isMounted=!0,d=v=w=null}},E=c.effect=new zs(P,()=>Yn($),c.scope),$=c.update=()=>E.run();$.id=c.uid,kt(c,!0),$()},be=(c,d,v)=>{d.component=c;const w=c.vnode.props;c.vnode=d,c.next=null,da(c,d.props,w,v),pa(c,d.children,v),Jt(),So(),Xt()},pe=(c,d,v,w,x,L,A,P,E=!1)=>{const $=c&&c.children,U=c?c.shapeFlag:0,F=d.children,{patchFlag:j,shapeFlag:Q}=d;if(j>0){if(j&128){kn($,F,v,w,x,L,A,P,E);return}else if(j&256){bt($,F,v,w,x,L,A,P,E);return}}Q&8?(U&16&&tt($,x,L),F!==$&&f(v,F)):U&16?Q&16?kn($,F,v,w,x,L,A,P,E):tt($,x,L,!0):(U&8&&f(v,""),Q&16&&N(F,v,w,x,L,A,P,E))},bt=(c,d,v,w,x,L,A,P,E)=>{c=c||Ot,d=d||Ot;const $=c.length,U=d.length,F=Math.min($,U);let j;for(j=0;jU?tt(c,x,L,!0,!1,F):N(d,v,w,x,L,A,P,E,F)},kn=(c,d,v,w,x,L,A,P,E)=>{let $=0;const U=d.length;let F=c.length-1,j=U-1;for(;$<=F&&$<=j;){const Q=c[$],se=d[$]=E?ut(d[$]):Ge(d[$]);if(Pt(Q,se))M(Q,se,v,null,x,L,A,P,E);else break;$++}for(;$<=F&&$<=j;){const Q=c[F],se=d[j]=E?ut(d[j]):Ge(d[j]);if(Pt(Q,se))M(Q,se,v,null,x,L,A,P,E);else break;F--,j--}if($>F){if($<=j){const Q=j+1,se=Qj)for(;$<=F;)qe(c[$],x,L,!0),$++;else{const Q=$,se=$,_e=new Map;for($=se;$<=j;$++){const Ie=d[$]=E?ut(d[$]):Ge(d[$]);Ie.key!=null&&_e.set(Ie.key,$)}let fe,xe=0;const De=j-se+1;let Nt=!1,vo=0;const Zt=new Array(De);for($=0;$=De){qe(Ie,x,L,!0);continue}let We;if(Ie.key!=null)We=_e.get(Ie.key);else for(fe=se;fe<=j;fe++)if(Zt[fe-se]===0&&Pt(Ie,d[fe])){We=fe;break}We===void 0?qe(Ie,x,L,!0):(Zt[We-se]=$+1,We>=vo?vo=We:Nt=!0,M(Ie,d[We],v,null,x,L,A,P,E),xe++)}const mo=Nt?ya(Zt):Ot;for(fe=mo.length-1,$=De-1;$>=0;$--){const Ie=se+$,We=d[Ie],bo=Ie+1{const{el:L,type:A,transition:P,children:E,shapeFlag:$}=c;if($&6){yt(c.component.subTree,d,v,w);return}if($&128){c.suspense.move(d,v,w);return}if($&64){A.move(c,d,v,It);return}if(A===Z){s(L,d,v);for(let F=0;FP.enter(L),x);else{const{leave:F,delayLeave:j,afterLeave:Q}=P,se=()=>s(L,d,v),_e=()=>{F(L,()=>{se(),Q&&Q()})};j?j(L,se,_e):_e()}else s(L,d,v)},qe=(c,d,v,w=!1,x=!1)=>{const{type:L,props:A,ref:P,children:E,dynamicChildren:$,shapeFlag:U,patchFlag:F,dirs:j}=c;if(P!=null&&Hn(P,null,v,c,!0),U&256){d.ctx.deactivate(c);return}const Q=U&1&&j,se=!Gt(c);let _e;if(se&&(_e=A&&A.onVnodeBeforeUnmount)&&He(_e,d,c),U&6)Ol(c.component,v,w);else{if(U&128){c.suspense.unmount(v,w);return}Q&&Qe(c,null,d,"beforeUnmount"),U&64?c.type.remove(c,d,v,x,It,w):$&&(L!==Z||F>0&&F&64)?tt($,d,v,!1,!0):(L===Z&&F&384||!x&&U&16)&&tt(E,d,v),w&&_o(c)}(se&&(_e=A&&A.onVnodeUnmounted)||Q)&&Ee(()=>{_e&&He(_e,d,c),Q&&Qe(c,null,d,"unmounted")},v)},_o=c=>{const{type:d,el:v,anchor:w,transition:x}=c;if(d===Z){Bl(v,w);return}if(d===Ut){Y(c);return}const L=()=>{o(v),x&&!x.persisted&&x.afterLeave&&x.afterLeave()};if(c.shapeFlag&1&&x&&!x.persisted){const{leave:A,delayLeave:P}=x,E=()=>A(v,L);P?P(c.el,L,E):E()}else L()},Bl=(c,d)=>{let v;for(;c!==d;)v=g(c),o(c),c=v;o(d)},Ol=(c,d,v)=>{const{bum:w,scope:x,update:L,subTree:A,um:P}=c;w&&us(w),x.stop(),L&&(L.active=!1,qe(A,c,d,v)),P&&Ee(P,d),Ee(()=>{c.isUnmounted=!0},d),d&&d.pendingBranch&&!d.isUnmounted&&c.asyncDep&&!c.asyncResolved&&c.suspenseId===d.pendingId&&(d.deps--,d.deps===0&&d.resolve())},tt=(c,d,v,w=!1,x=!1,L=0)=>{for(let A=L;Ac.shapeFlag&6?xn(c.component.subTree):c.shapeFlag&128?c.suspense.next():g(c.anchor||c.el),go=(c,d,v)=>{c==null?d._vnode&&qe(d._vnode,null,null,!0):M(d._vnode||null,c,d,null,null,null,v),So(),Bn(),d._vnode=c},It={p:M,um:qe,m:yt,r:_o,mt:G,mc:N,pc:pe,pbc:J,n:xn,o:e};let rs,as;return t&&([rs,as]=t(It)),{render:go,hydrate:rs,createApp:ga(go,rs)}}function kt({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function ol(e,t,n=!1){const s=e.children,o=t.children;if(W(s)&&W(o))for(let i=0;i>1,e[n[r]]0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,l=n[i-1];i-- >0;)n[i]=l,l=t[l];return n}const ka=e=>e.__isTeleport,Z=Symbol(void 0),qt=Symbol(void 0),Be=Symbol(void 0),Ut=Symbol(void 0),ln=[];let je=null;function h(e=!1){ln.push(je=e?null:[])}function xa(){ln.pop(),je=ln[ln.length-1]||null}let pn=1;function Fo(e){pn+=e}function il(e){return e.dynamicChildren=pn>0?je||Ot:null,xa(),pn>0&&je&&je.push(e),e}function b(e,t,n,s,o,i){return il(k(e,t,n,s,o,i,!0))}function q(e,t,n,s,o){return il(V(e,t,n,s,o,!0))}function Rn(e){return e?e.__v_isVNode===!0:!1}function Pt(e,t){return e.type===t.type&&e.key===t.key}const ts="__vInternal",ll=({key:e})=>e??null,Mn=({ref:e,ref_key:t,ref_for:n})=>e!=null?ke(e)||Pe(e)||X(e)?{i:Le,r:e,k:t,f:!!n}:e:null;function k(e,t=null,n=null,s=0,o=null,i=e===Z?0:1,l=!1,r=!1){const a={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&ll(t),ref:t&&Mn(t),scopeId:Xn,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:s,dynamicProps:o,dynamicChildren:null,appContext:null,ctx:Le};return r?(oo(a,n),i&128&&e.normalize(a)):n&&(a.shapeFlag|=ke(n)?8:16),pn>0&&!l&&je&&(a.patchFlag>0||i&6)&&a.patchFlag!==32&&je.push(a),a}const V=wa;function wa(e,t=null,n=null,s=0,o=null,i=!1){if((!e||e===Wi)&&(e=Be),Rn(e)){const r=_t(e,t,!0);return n&&oo(r,n),pn>0&&!i&&je&&(r.shapeFlag&6?je[je.indexOf(e)]=r:je.push(r)),r.patchFlag|=-2,r}if(Aa(e)&&(e=e.__vccOpts),t){t=$a(t);let{class:r,style:a}=t;r&&!ke(r)&&(t.class=ge(r)),ve(a)&&(Vi(a)&&!W(a)&&(a=we({},a)),t.style=Hs(a))}const l=ke(e)?1:jr(e)?128:ka(e)?64:ve(e)?4:X(e)?2:0;return k(e,t,n,s,o,l,i,!0)}function $a(e){return e?Vi(e)||ts in e?we({},e):e:null}function _t(e,t,n=!1){const{props:s,ref:o,patchFlag:i,children:l}=e,r=t?An(s||{},t):s;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:r,key:r&&ll(r),ref:t&&t.ref?n&&o?W(o)?o.concat(Mn(t)):[o,Mn(t)]:Mn(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Z?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&_t(e.ssContent),ssFallback:e.ssFallback&&_t(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce}}function Se(e=" ",t=0){return V(qt,null,e,t)}function Ca(e,t){const n=V(Ut,null,e);return n.staticCount=t,n}function D(e="",t=!1){return t?(h(),q(Be,null,e)):V(Be,null,e)}function Ge(e){return e==null||typeof e=="boolean"?V(Be):W(e)?V(Z,null,e.slice()):typeof e=="object"?ut(e):V(qt,null,String(e))}function ut(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:_t(e)}function oo(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(W(t))n=16;else if(typeof t=="object")if(s&65){const o=t.default;o&&(o._c&&(o._d=!1),oo(e,o()),o._c&&(o._d=!0));return}else{n=32;const o=t._;!o&&!(ts in t)?t._ctx=Le:o===3&&Le&&(Le.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else X(t)?(t={default:t,_ctx:Le},n=32):(t=String(t),s&64?(n=16,t=[Se(t)]):n=8);e.children=t,e.shapeFlag|=n}function An(...e){const t={};for(let n=0;nye||Le,Wt=e=>{ye=e,e.scope.on()},Vt=()=>{ye&&ye.scope.off(),ye=null};function rl(e){return e.vnode.shapeFlag&4}let Qt=!1;function Ta(e,t=!1){Qt=t;const{props:n,children:s}=e.vnode,o=rl(e);ua(e,n,o,t),ha(e,s);const i=o?Va(e,t):void 0;return Qt=!1,i}function Va(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=sn(new Proxy(e.ctx,oa));const{setup:s}=n;if(s){const o=e.setupContext=s.length>1?cl(e):null;Wt(e),Jt();const i=ht(s,e,0,[e.props,o]);if(Xt(),Vt(),gi(i)){if(i.then(Vt,Vt),t)return i.then(l=>{Ho(e,l,t)}).catch(l=>{mn(l,e,0)});e.asyncDep=i}else Ho(e,i,t)}else al(e,t)}function Ho(e,t,n){X(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ve(t)&&(e.setupState=Ii(t)),al(e,n)}let Ro;function al(e,t,n){const s=e.type;if(!e.render){if(!t&&Ro&&!s.render){const o=s.template||no(e).template;if(o){const{isCustomElement:i,compilerOptions:l}=e.appContext.config,{delimiters:r,compilerOptions:a}=s,u=we(we({isCustomElement:i,delimiters:r},l),a);s.render=Ro(o,u)}}e.render=s.render||ze}Wt(e),Jt(),ia(e),Xt(),Vt()}function Ea(e){return new Proxy(e.attrs,{get(t,n){return Me(e,"get","$attrs"),t[n]}})}function cl(e){const t=s=>{e.exposed=s||{}};let n;return{get attrs(){return n||(n=Ea(e))},slots:e.slots,emit:e.emit,expose:t}}function io(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(Ii(sn(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in on)return on[n](e)},has(t,n){return n in t||n in on}}))}function Ma(e,t=!0){return X(e)?e.displayName||e.name:e.name||t&&e.__name}function Aa(e){return X(e)&&"__vccOpts"in e}const z=(e,t)=>Ar(e,t,Qt);function Ia(){return Na().slots}function Na(){const e=ns();return e.setupContext||(e.setupContext=cl(e))}function Dn(e,t,n){const s=arguments.length;return s===2?ve(t)&&!W(t)?Rn(t)?V(e,null,[t]):V(e,t):V(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&Rn(n)&&(n=[n]),V(e,t,n))}const Ba=Symbol(""),Oa=()=>Ke(Ba),Fa="3.2.47",Ha="http://www.w3.org/2000/svg",Lt=typeof document<"u"?document:null,Do=Lt&&Lt.createElement("template"),Ra={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const o=t?Lt.createElementNS(Ha,e):Lt.createElement(e,n?{is:n}:void 0);return e==="select"&&s&&s.multiple!=null&&o.setAttribute("multiple",s.multiple),o},createText:e=>Lt.createTextNode(e),createComment:e=>Lt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Lt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,o,i){const l=n?n.previousSibling:t.lastChild;if(o&&(o===i||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),n),!(o===i||!(o=o.nextSibling)););else{Do.innerHTML=s?`${e}`:e;const r=Do.content;if(s){const a=r.firstChild;for(;a.firstChild;)r.appendChild(a.firstChild);r.removeChild(a)}t.insertBefore(r,n)}return[l?l.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}};function Da(e,t,n){const s=e._vtc;s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}function Ga(e,t,n){const s=e.style,o=ke(n);if(n&&!o){if(t&&!ke(t))for(const i in t)n[i]==null&&Ms(s,i,"");for(const i in n)Ms(s,i,n[i])}else{const i=s.display;o?t!==n&&(s.cssText=n):t&&e.removeAttribute("style"),"_vod"in e&&(s.display=i)}}const Go=/\s*!important$/;function Ms(e,t,n){if(W(n))n.forEach(s=>Ms(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=Ua(e,t);Go.test(n)?e.setProperty(Yt(s),n.replace(Go,""),"important"):e[s]=n}}const Uo=["Webkit","Moz","ms"],_s={};function Ua(e,t){const n=_s[t];if(n)return n;let s=Xe(t);if(s!=="filter"&&s in e)return _s[t]=s;s=qn(s);for(let o=0;ogs||(Ya.then(()=>gs=0),gs=Date.now());function Xa(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;Re(Za(s,n.value),t,5,[s])};return n.value=e,n.attached=Ja(),n}function Za(e,t){if(W(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>o=>!o._stopped&&s&&s(o))}else return t}const Ko=/^on[a-z]/,ec=(e,t,n,s,o=!1,i,l,r,a)=>{t==="class"?Da(e,s,o):t==="style"?Ga(e,n,s):vn(t)?Rs(t)||Wa(e,t,n,s,l):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):tc(e,t,s,o))?za(e,t,s,i,l,r,a):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),ja(e,t,s,o))};function tc(e,t,n,s){return s?!!(t==="innerHTML"||t==="textContent"||t in e&&Ko.test(t)&&X(n)):t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA"||Ko.test(t)&&ke(n)?!1:t in e}function nc(e){const t=ns();if(!t)return;const n=t.ut=(o=e(t.proxy))=>{Array.from(document.querySelectorAll(`[data-v-owner="${t.uid}"]`)).forEach(i=>Is(i,o))},s=()=>{const o=e(t.proxy);As(t.subTree,o),n(o)};Di(s),Oe(()=>{const o=new MutationObserver(s);o.observe(t.subTree.el.parentNode,{childList:!0}),gt(()=>o.disconnect())})}function As(e,t){if(e.shapeFlag&128){const n=e.suspense;e=n.activeBranch,n.pendingBranch&&!n.isHydrating&&n.effects.push(()=>{As(n.activeBranch,t)})}for(;e.component;)e=e.component.subTree;if(e.shapeFlag&1&&e.el)Is(e.el,t);else if(e.type===Z)e.children.forEach(n=>As(n,t));else if(e.type===Ut){let{el:n,anchor:s}=e;for(;n&&(Is(n,t),n!==s);)n=n.nextSibling}}function Is(e,t){if(e.nodeType===1){const n=e.style;for(const s in t)n.setProperty(`--${s}`,t[s])}}const at="transition",en="animation",ss=(e,{slots:t})=>Dn(Ui,sc(e),t);ss.displayName="Transition";const ul={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String};ss.props=we({},Ui.props,ul);const xt=(e,t=[])=>{W(e)?e.forEach(n=>n(...t)):e&&e(...t)},qo=e=>e?W(e)?e.some(t=>t.length>1):e.length>1:!1;function sc(e){const t={};for(const O in e)O in ul||(t[O]=e[O]);if(e.css===!1)return t;const{name:n="v",type:s,duration:o,enterFromClass:i=`${n}-enter-from`,enterActiveClass:l=`${n}-enter-active`,enterToClass:r=`${n}-enter-to`,appearFromClass:a=i,appearActiveClass:u=l,appearToClass:f=r,leaveFromClass:_=`${n}-leave-from`,leaveActiveClass:g=`${n}-leave-active`,leaveToClass:y=`${n}-leave-to`}=e,T=oc(o),M=T&&T[0],K=T&&T[1],{onBeforeEnter:m,onEnter:C,onEnterCancelled:B,onLeave:Y,onLeaveCancelled:te,onBeforeAppear:he=m,onAppear:oe=C,onAppearCancelled:N=B}=t,ee=(O,ne,G)=>{wt(O,ne?f:r),wt(O,ne?u:l),G&&G()},J=(O,ne)=>{O._isLeaving=!1,wt(O,_),wt(O,y),wt(O,g),ne&&ne()},re=O=>(ne,G)=>{const Ae=O?oe:C,de=()=>ee(ne,O,G);xt(Ae,[ne,de]),Wo(()=>{wt(ne,O?a:i),ct(ne,O?f:r),qo(Ae)||Qo(ne,s,M,de)})};return we(t,{onBeforeEnter(O){xt(m,[O]),ct(O,i),ct(O,l)},onBeforeAppear(O){xt(he,[O]),ct(O,a),ct(O,u)},onEnter:re(!1),onAppear:re(!0),onLeave(O,ne){O._isLeaving=!0;const G=()=>J(O,ne);ct(O,_),rc(),ct(O,g),Wo(()=>{O._isLeaving&&(wt(O,_),ct(O,y),qo(Y)||Qo(O,s,K,G))}),xt(Y,[O,G])},onEnterCancelled(O){ee(O,!1),xt(B,[O])},onAppearCancelled(O){ee(O,!0),xt(N,[O])},onLeaveCancelled(O){J(O),xt(te,[O])}})}function oc(e){if(e==null)return null;if(ve(e))return[vs(e.enter),vs(e.leave)];{const t=vs(e);return[t,t]}}function vs(e){return Jl(e)}function ct(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e._vtc||(e._vtc=new Set)).add(t)}function wt(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const{_vtc:n}=e;n&&(n.delete(t),n.size||(e._vtc=void 0))}function Wo(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let ic=0;function Qo(e,t,n,s){const o=e._endId=++ic,i=()=>{o===e._endId&&s()};if(n)return setTimeout(i,n);const{type:l,timeout:r,propCount:a}=lc(e,t);if(!l)return s();const u=l+"end";let f=0;const _=()=>{e.removeEventListener(u,g),i()},g=y=>{y.target===e&&++f>=a&&_()};setTimeout(()=>{f(n[T]||"").split(", "),o=s(`${at}Delay`),i=s(`${at}Duration`),l=Yo(o,i),r=s(`${en}Delay`),a=s(`${en}Duration`),u=Yo(r,a);let f=null,_=0,g=0;t===at?l>0&&(f=at,_=l,g=i.length):t===en?u>0&&(f=en,_=u,g=a.length):(_=Math.max(l,u),f=_>0?l>u?at:en:null,g=f?f===at?i.length:a.length:0);const y=f===at&&/\b(transform|all)(,|$)/.test(s(`${at}Property`).toString());return{type:f,timeout:_,propCount:g,hasTransform:y}}function Yo(e,t){for(;e.lengthJo(n)+Jo(e[s])))}function Jo(e){return Number(e.slice(0,-1).replace(",","."))*1e3}function rc(){return document.body.offsetHeight}const ac=["ctrl","shift","alt","meta"],cc={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>ac.some(n=>e[`${n}Key`]&&!t.includes(n))},uc=(e,t)=>(n,...s)=>{for(let o=0;o{const t=fc().createApp(...e),{mount:n}=t;return t.mount=s=>{const o=pc(s);if(o)return n(o,!0,o instanceof SVGElement)},t};function pc(e){return ke(e)?document.querySelector(e):e}const H=(e,t)=>{const n=e.__vccOpts||e;for(const[s,o]of t)n[s]=o;return n},_c="modulepreload",gc=function(e){return"/static-blog/"+e},Zo={},dl=function(t,n,s){if(!n||n.length===0)return t();const o=document.getElementsByTagName("link");return Promise.all(n.map(i=>{if(i=gc(i),i in Zo)return;Zo[i]=!0;const l=i.endsWith(".css"),r=l?'[rel="stylesheet"]':"";if(!!s)for(let f=o.length-1;f>=0;f--){const _=o[f];if(_.href===i&&(!l||_.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${i}"]${r}`))return;const u=document.createElement("link");if(u.rel=l?"stylesheet":_c,l||(u.as="script",u.crossOrigin=""),u.href=i,document.head.appendChild(u),l)return new Promise((f,_)=>{u.addEventListener("load",f),u.addEventListener("error",()=>_(new Error(`Unable to preload CSS for ${i}`)))})})).then(()=>t())};const vc=R({__name:"VPBadge",props:{text:null,type:null},setup(e){return(t,n)=>(h(),b("span",{class:ge(["VPBadge",e.type??"tip"])},[S(t.$slots,"default",{},()=>[Se(ce(e.text),1)],!0)],2))}});const mc=H(vc,[["__scopeId","data-v-9ecb65e4"]]),bc=JSON.parse('{"lang":"en-US","dir":"ltr","title":"mx52jing","description":"mx52jing的博客","base":"/static-blog/","head":[],"appearance":true,"themeConfig":{"siteTitle":"mx52jing","smoothScroll":true,"nav":[{"text":"首页","link":"/"},{"text":"随手一记","link":"/hand-notes/JavaScript/数字四舍五入"},{"text":"知识沉淀","link":"/knowledge-deposition/前端工程化/Babel/Babel基础"},{"text":"算法","link":"/algorithm/LeetCode刷题/1-两数之和"},{"text":"收藏夹","link":"/favorites/CSS/"}],"sidebar":{"/hand-notes/":[{"text":"JavaScript","collapsible":false,"collapsed":false,"items":[{"text":"数字四舍五入","link":"/hand-notes/JavaScript/数字四舍五入"},{"text":"根据生日计算年龄","link":"/hand-notes/JavaScript/根据生日计算年龄"},{"text":"控制并发执行函数","link":"/hand-notes/JavaScript/控制并发执行函数"},{"text":"随机数的应用","link":"/hand-notes/JavaScript/随机数的应用"},{"text":"判断字母大小写","link":"/hand-notes/JavaScript/判断字母大小写"}]},{"text":"React","collapsible":false,"collapsed":false,"items":[{"text":"ProComponents","collapsible":false,"collapsed":false,"items":[{"text":"ProTable","link":"/hand-notes/React/ProComponents/ProTable"}]}]},{"text":"Chart","collapsible":false,"collapsed":false,"items":[{"text":"AntVF2","collapsible":false,"collapsed":false,"items":[{"text":"使用小记","link":"/hand-notes/Chart/AntVF2/使用小记"}]}]},{"text":"CSS","collapsible":true,"collapsed":false,"items":[{"text":"CSS实现文字渐变","link":"/hand-notes/CSS/CSS实现文字渐变"},{"text":"CSS实现突出不同颜色的圆角","link":"/hand-notes/CSS/CSS实现突出不同颜色的圆角"},{"text":"CSS计数器-counter","link":"/hand-notes/CSS/CSS计数器-counter"},{"text":"CSS模拟数字loading","link":"/hand-notes/CSS/CSS模拟数字loading"},{"text":"实现高度过渡","link":"/hand-notes/CSS/实现高度过渡"},{"text":"CSS实现类似微信头像效果","link":"/hand-notes/CSS/CSS实现类似微信头像效果"},{"text":"虚线边框","link":"/hand-notes/CSS/虚线边框"},{"text":"图片加载出错样式设置","link":"/hand-notes/CSS/图片加载出错样式设置"}]},{"text":"Sass","collapsible":false,"collapsed":false,"items":[{"text":"sass小技巧","link":"/hand-notes/Sass/sass小技巧"},{"text":"通过mixin简化响应式代码","link":"/hand-notes/Sass/通过mixin简化响应式代码"},{"text":"sass实现星空效果","link":"/hand-notes/Sass/sass实现星空效果"},{"text":"小球交互loading","link":"/hand-notes/Sass/小球交互loading"}]},{"text":"Canvas","collapsible":false,"collapsed":false,"items":[{"text":"绘制图片不清晰问题","link":"/hand-notes/Canvas/绘制图片不清晰问题"}]},{"text":"Linux","collapsible":false,"collapsed":false,"items":[{"text":"Bash实用方法","link":"/hand-notes/Linux/practice-method"},{"text":"图片压缩和格式转换","link":"/hand-notes/Linux/图片压缩和格式转换"},{"text":"计算升级版本号","link":"/hand-notes/Linux/计算升级版本号"},{"text":"文件压缩","link":"/hand-notes/Linux/文件压缩"},{"text":"用户操作相关","link":"/hand-notes/Linux/用户操作相关"},{"text":"权限相关","link":"/hand-notes/Linux/权限相关"}]},{"text":"Mac","collapsible":false,"collapsed":false,"items":[{"text":"环境初始化","link":"/hand-notes/Mac/init"},{"text":"使用小记","link":"/hand-notes/Mac/frequently-commands"},{"text":"快捷运行自定义shell脚本","link":"/hand-notes/Mac/快捷运行自定义shell脚本"}]},{"text":"Charles","collapsible":false,"collapsed":false,"items":[{"text":"抓包配置","link":"/hand-notes/Charles/抓包配置"},{"text":"修改请求或响应","link":"/hand-notes/Charles/修改请求或响应"}]}],"/knowledge-deposition/":[{"text":"前端工程化","collapsible":false,"collapsed":false,"items":[{"text":"Babel","collapsible":false,"collapsed":false,"items":[{"text":"Babel基础","link":"/knowledge-deposition/前端工程化/Babel/Babel基础"}]},{"text":"Vite","collapsible":false,"collapsed":false,"items":[{"text":"初体验","link":"/knowledge-deposition/前端工程化/Vite/初体验"},{"text":"区分不同环境","link":"/knowledge-deposition/前端工程化/Vite/区分不同环境"},{"text":"处理样式","link":"/knowledge-deposition/前端工程化/Vite/处理样式"},{"text":"处理静态资源","link":"/knowledge-deposition/前端工程化/Vite/处理静态资源"},{"text":"依赖预构建","link":"/knowledge-deposition/前端工程化/Vite/依赖预构建"},{"text":"esbuild相关","link":"/knowledge-deposition/前端工程化/Vite/esbuild相关"},{"text":"Rollup的插件机制","link":"/knowledge-deposition/前端工程化/Vite/Rollup的插件机制"},{"text":"Vite插件机制","link":"/knowledge-deposition/前端工程化/Vite/Vite插件机制"}]}]},{"text":"Docker","collapsible":false,"collapsed":false,"items":[{"text":"Docker基础知识","link":"/knowledge-deposition/Docker/Docker基础知识"},{"text":"Dockerfile","link":"/knowledge-deposition/Docker/Dockerfile"}]},{"text":"MySQL","collapsible":false,"collapsed":false,"items":[{"text":"基础","link":"/knowledge-deposition/MySQL/基础知识"},{"text":"SQL","link":"/knowledge-deposition/MySQL/SQL"},{"text":"数据操作和查询","link":"/knowledge-deposition/MySQL/数据操作和查询"},{"text":"函数","link":"/knowledge-deposition/MySQL/函数"},{"text":"分组和子查询","link":"/knowledge-deposition/MySQL/分组和子查询"},{"text":"表连接","link":"/knowledge-deposition/MySQL/表连接"}]},{"text":"SSH","collapsible":false,"collapsed":false,"items":[{"text":"SSH基础","link":"/knowledge-deposition/SSH/ssh-base"}]},{"text":"Linux","collapsible":false,"collapsed":false,"items":[{"text":"Bash基础知识","link":"/knowledge-deposition/Linux/Bash基础知识"}]},{"text":"GoLang","collapsible":false,"collapsed":false,"items":[{"text":"基础知识","collapsible":false,"collapsed":true,"items":[{"text":"环境搭建","link":"/knowledge-deposition/GoLang/基础知识/环境搭建"},{"text":"fmt格式输出含义","link":"/knowledge-deposition/GoLang/基础知识/fmt输出含义"},{"text":"变量常量","link":"/knowledge-deposition/GoLang/基础知识/变量常量"},{"text":"流程控制","link":"/knowledge-deposition/GoLang/基础知识/流程控制"},{"text":"基础数据类型","link":"/knowledge-deposition/GoLang/基础知识/基础数据类型"},{"text":"数组、切片、Map","link":"/knowledge-deposition/GoLang/基础知识/数组、切片、Map"},{"text":"strings包","link":"/knowledge-deposition/GoLang/基础知识/strings包"},{"text":"函数","link":"/knowledge-deposition/GoLang/基础知识/函数"},{"text":"指针","link":"/knowledge-deposition/GoLang/基础知识/指针"},{"text":"结构体","link":"/knowledge-deposition/GoLang/基础知识/结构体"},{"text":"接口","link":"/knowledge-deposition/GoLang/基础知识/接口"},{"text":"协程","link":"/knowledge-deposition/GoLang/基础知识/协程"},{"text":"协程安全","link":"/knowledge-deposition/GoLang/基础知识/协程安全"},{"text":"通道channel","link":"/knowledge-deposition/GoLang/基础知识/通道channel"},{"text":"Select","link":"/knowledge-deposition/GoLang/基础知识/Select"},{"text":"time包","link":"/knowledge-deposition/GoLang/基础知识/time包"},{"text":"url包","link":"/knowledge-deposition/GoLang/基础知识/url包"},{"text":"json序列化","link":"/knowledge-deposition/GoLang/基础知识/json序列化"},{"text":"Context","link":"/knowledge-deposition/GoLang/基础知识/Context"},{"text":"文件操作","collapsible":false,"collapsed":true,"link":"/knowledge-deposition/GoLang/基础知识/文件操作/","items":[{"text":"读文件","link":"/knowledge-deposition/GoLang/基础知识/文件操作/读文件"},{"text":"写文件","link":"/knowledge-deposition/GoLang/基础知识/文件操作/写文件"},{"text":"文件复制","link":"/knowledge-deposition/GoLang/基础知识/文件操作/文件复制"},{"text":"目录操作","link":"/knowledge-deposition/GoLang/基础知识/文件操作/目录操作"},{"text":"读取配置文件","link":"/knowledge-deposition/GoLang/基础知识/文件操作/读取配置文件"},{"text":"并发下载远程文件","link":"/knowledge-deposition/GoLang/基础知识/文件操作/并发下载远程文件"}]},{"text":"网络","collapsible":false,"collapsed":true,"items":[{"text":"TCP","link":"/knowledge-deposition/GoLang/基础知识/网络/TCP"},{"text":"HTTP","link":"/knowledge-deposition/GoLang/基础知识/网络/HTTP"},{"text":"RPC","link":"/knowledge-deposition/GoLang/基础知识/网络/RPC"}]},{"text":"Test","link":"/knowledge-deposition/GoLang/基础知识/Test"}]},{"text":"Gin","collapsible":false,"collapsed":true,"items":[{"text":"hello-world","link":"/knowledge-deposition/GoLang/Gin/hello-world"},{"text":"响应数据","link":"/knowledge-deposition/GoLang/Gin/响应数据"},{"text":"请求参数","link":"/knowledge-deposition/GoLang/Gin/请求参数"},{"text":"bind绑定器","link":"/knowledge-deposition/GoLang/Gin/bind绑定器"},{"text":"请求头和响应头","link":"/knowledge-deposition/GoLang/Gin/请求头和响应头"},{"text":"上传和下载文件","link":"/knowledge-deposition/GoLang/Gin/上传和下载文件"},{"text":"路由分组","link":"/knowledge-deposition/GoLang/Gin/路由分组"},{"text":"中间件","link":"/knowledge-deposition/GoLang/Gin/中间件"},{"text":"支持跨域","link":"/knowledge-deposition/GoLang/Gin/支持跨域"},{"text":"集成Swagger","link":"/knowledge-deposition/GoLang/Gin/集成Swagger"}]},{"text":"Gorm","collapsible":false,"collapsed":true,"items":[{"text":"连接数据库","link":"/knowledge-deposition/GoLang/Gorm/连接数据库"},{"text":"模型定义","link":"/knowledge-deposition/GoLang/Gorm/模型定义"},{"text":"Create","link":"/knowledge-deposition/GoLang/Gorm/Create"},{"text":"Query","link":"/knowledge-deposition/GoLang/Gorm/Query"},{"text":"AdvancedQuery","link":"/knowledge-deposition/GoLang/Gorm/AdvancedQuery"},{"text":"Update","link":"/knowledge-deposition/GoLang/Gorm/Update"},{"text":"Delete","link":"/knowledge-deposition/GoLang/Gorm/Delete"},{"text":"关联之一对一","link":"/knowledge-deposition/GoLang/Gorm/关联之一对一"},{"text":"关联之一对多","link":"/knowledge-deposition/GoLang/Gorm/关联之一对多"},{"text":"关联之多对多","link":"/knowledge-deposition/GoLang/Gorm/关联之多对多"},{"text":"事务","link":"/knowledge-deposition/GoLang/Gorm/事务"},{"text":"自定义数据类型","link":"/knowledge-deposition/GoLang/Gorm/自定义数据类型"}]},{"text":"Logger","collapsible":false,"collapsed":true,"items":[{"text":"Logrus","collapsible":false,"collapsed":true,"items":[{"text":"基础用法","link":"/knowledge-deposition/GoLang/Logger/Logrus/基础用法"},{"text":"Hook","link":"/knowledge-deposition/GoLang/Logger/Logrus/Hook"},{"text":"日志分割","link":"/knowledge-deposition/GoLang/Logger/Logrus/日志分割"}]},{"text":"Zap","collapsible":false,"collapsed":true,"items":[{"text":"zap使用","link":"/knowledge-deposition/GoLang/Logger/Zap/zap使用"}]}]},{"text":"Crawler","collapsible":false,"collapsed":true,"items":[{"text":"HTTP请求方法","link":"/knowledge-deposition/GoLang/Crawler/HTTP请求方法"}]},{"text":"加密","collapsible":false,"collapsed":true,"items":[{"text":"AES加密","link":"/knowledge-deposition/GoLang/加密/AES加密"},{"text":"RSA加密","link":"/knowledge-deposition/GoLang/加密/RSA加密"}]}]},{"text":"Nacos","collapsible":false,"collapsed":false,"items":[{"text":"基本概念和安装启动","link":"/knowledge-deposition/Nacos/基本概念和安装启动"},{"text":"操作动态配置文件","link":"/knowledge-deposition/Nacos/操作动态配置文件"}]},{"text":"RabbitMQ","collapsible":false,"collapsed":false,"items":[{"text":"基本概念和安装启动","link":"/knowledge-deposition/RabbitMQ/基本概念和安装启动"},{"text":"工作队列","link":"/knowledge-deposition/RabbitMQ/工作队列"},{"text":"发布订阅","link":"/knowledge-deposition/RabbitMQ/发布订阅"}]}],"/algorithm/":[{"text":"LeetCode刷题","collapsible":false,"collapsed":true,"items":[{"text":"1-两数之和","link":"/algorithm/LeetCode刷题/1-两数之和"},{"text":"20-有效的括号","link":"/algorithm/LeetCode刷题/20-有效的括号"},{"text":"26-删除有序数组中的重复项","link":"/algorithm/LeetCode刷题/26-删除有序数组中的重复项"},{"text":"27-移除元素","link":"/algorithm/LeetCode刷题/27-移除元素"},{"text":"28-找出字符串中第一个匹配项的下标","link":"/algorithm/LeetCode刷题/28-找出字符串中第一个匹配项的下标"},{"text":"3-无重复字符的最长子串","link":"/algorithm/LeetCode刷题/3-无重复字符的最长子串"},{"text":"35-搜索插入位置","link":"/algorithm/LeetCode刷题/35-搜索插入位置"},{"text":"14-最长公共前缀","link":"/algorithm/LeetCode刷题/14-最长公共前缀"},{"text":"58-最后一个单词的长度","link":"/algorithm/LeetCode刷题/58-最后一个单词的长度"},{"text":"136-只出现一次的数字","link":"/algorithm/LeetCode刷题/136-只出现一次的数字"},{"text":"LCR-018-验证回文串","link":"/algorithm/LeetCode刷题/LCR-018-验证回文串"},{"text":"9-回文数","link":"/algorithm/LeetCode刷题/9-回文数"},{"text":"17-电话号码的字母组合","link":"/algorithm/LeetCode刷题/17-电话号码的字母组合"},{"text":"202-快乐数","link":"/algorithm/LeetCode刷题/202-快乐数"},{"text":"485-最大连续1的个数","link":"/algorithm/LeetCode刷题/485-最大连续1的个数"},{"text":"628-三个数的最大乘积","link":"/algorithm/LeetCode刷题/628-三个数的最大乘积"},{"text":"414-第三大的数","link":"/algorithm/LeetCode刷题/414-第三大的数"},{"text":"520-检测大写字母","link":"/algorithm/LeetCode刷题/520-检测大写字母"},{"text":"977-有序数组的平方","link":"/algorithm/LeetCode刷题/977-有序数组的平方"},{"text":"209-长度最小的子数组","link":"/algorithm/LeetCode刷题/209-长度最小的子数组"},{"text":"203-移除链表元素","link":"/algorithm/LeetCode刷题/203-移除链表元素"},{"text":"707-设计链表","link":"/algorithm/LeetCode刷题/707-设计链表"},{"text":"206-反转链表","link":"/algorithm/LeetCode刷题/206-反转链表"},{"text":"24-两两交换链表中的节点","link":"/algorithm/LeetCode刷题/24-两两交换链表中的节点"},{"text":"19-删除链表的倒数第N个结点","link":"/algorithm/LeetCode刷题/19-删除链表的倒数第N个结点"},{"text":"242-有效的字母异位词","link":"/algorithm/LeetCode刷题/242-有效的字母异位词"},{"text":"349-两个数组的交集","link":"/algorithm/LeetCode刷题/349-两个数组的交集"},{"text":"454-四数相加II","link":"/algorithm/LeetCode刷题/454-四数相加II"},{"text":"15-三数之和","link":"/algorithm/LeetCode刷题/15-三数之和"},{"text":"18-四数之和","link":"/algorithm/LeetCode刷题/18-四数之和"},{"text":"344-反转字符串","link":"/algorithm/LeetCode刷题/344-反转字符串"},{"text":"541-反转字符串II","link":"/algorithm/LeetCode刷题/541-反转字符串II"},{"text":"151-反转字符串中的单词","link":"/algorithm/LeetCode刷题/151-反转字符串中的单词"},{"text":"1047-删除字符串中的所有相邻重复项","link":"/algorithm/LeetCode刷题/1047-删除字符串中的所有相邻重复项"},{"text":"150-逆波兰表达式求值","link":"/algorithm/LeetCode刷题/150-逆波兰表达式求值"},{"text":"144-94-145-遍历二叉树","link":"/algorithm/LeetCode刷题/144-94-145-遍历二叉树"}]}],"/favorites/":[{"text":"CSS","link":"/favorites/CSS/"},{"text":"Git","link":"/favorites/Git/"},{"text":"Mobile Side","link":"/favorites/Mobile/"},{"text":"Nginx","link":"/favorites/Nginx/"},{"text":"Mac","link":"/favorites/Mac/"},{"text":"Canvas","link":"/favorites/Canvas/"},{"text":"Browser","link":"/favorites/Browser/"},{"text":"ProblemSolving","link":"/favorites/ProblemSolving/"},{"text":"React","link":"/favorites/React/"},{"text":"Docker","link":"/favorites/Docker/"},{"text":"算法","link":"/favorites/算法/"},{"text":"Golang","link":"/favorites/Golang/"},{"text":"IDE","link":"/favorites/IDE/"},{"text":"Linux","link":"/favorites/Linux/"},{"text":"UI设计灵感","link":"/favorites/UI设计灵感/"},{"text":"Books","link":"/favorites/Books/"},{"text":"其他","link":"/favorites/其他/"}]},"socialLinks":[{"icon":"github","link":"https://github.com/mx52jing"}],"algolia":{"appId":"OZ2LZP2CGA","apiKey":"f4ad8bb32fae6abf12202305c27f286e","indexName":"static"},"lastUpdated":true,"aside":true,"outline":"deep"},"locales":{},"scrollOffset":90,"cleanUrls":true}'),os=/^[a-z]+:/i,yc=/^pathname:\/\//,ei="vitepress-theme-appearance",fl=/#.*$/,kc=/(index)?\.(md|html)$/,$e=typeof document<"u",hl={relativePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0};function At(e,t,n=!1){if(t===void 0)return!1;if(e=ti(`/${e}`),n)return new RegExp(t).test(e);if(ti(t)!==e)return!1;const s=t.match(fl);return s?($e?location.hash:"")===s[0]:!0}function ti(e){return decodeURI(e).replace(fl,"").replace(kc,"")}function pl(e){return os.test(e)}function xc(e,t){var s,o,i,l,r,a,u;const n=Object.keys(e.locales).find(f=>f!=="root"&&!pl(f)&&At(t,`/${f}/`,!0))||"root";return Object.assign({},e,{localeIndex:n,lang:((s=e.locales[n])==null?void 0:s.lang)??e.lang,dir:((o=e.locales[n])==null?void 0:o.dir)??e.dir,title:((i=e.locales[n])==null?void 0:i.title)??e.title,titleTemplate:((l=e.locales[n])==null?void 0:l.titleTemplate)??e.titleTemplate,description:((r=e.locales[n])==null?void 0:r.description)??e.description,head:gl(e.head,((a=e.locales[n])==null?void 0:a.head)??[]),themeConfig:{...e.themeConfig,...(u=e.locales[n])==null?void 0:u.themeConfig}})}function _l(e,t){const n=t.title||e.title,s=t.titleTemplate??e.titleTemplate;if(typeof s=="string"&&s.includes(":title"))return s.replace(/:title/g,n);const o=wc(e.title,s);return`${n}${o}`}function wc(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function $c(e,t){const[n,s]=t;if(n!=="meta")return!1;const o=Object.entries(s)[0];return o==null?!1:e.some(([i,l])=>i===n&&l[o[0]]===o[1])}function gl(e,t){return[...e.filter(n=>!$c(t,n)),...t]}const Cc=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,Pc=/^[a-z]:/i;function ni(e){const t=Pc.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(Cc,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const vl=Symbol(),dt=Tr(bc);function Lc(e){const t=z(()=>xc(dt.value,e.data.relativePath));return{site:t,theme:z(()=>t.value.themeConfig),page:z(()=>e.data),frontmatter:z(()=>e.data.frontmatter),lang:z(()=>t.value.lang),dir:z(()=>t.value.dir),localeIndex:z(()=>t.value.localeIndex||"root"),title:z(()=>_l(t.value,e.data)),description:z(()=>e.data.description||t.value.description),isDark:le(!1)}}function ml(){const e=Ke(vl);if(!e)throw new Error("vitepress data not properly injected in app");return e}function Sc(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function _n(e){return os.test(e)||e.startsWith(".")?e:Sc(dt.value.base,e)}function bl(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),$e){const n="/static-blog/";t=ni(t.slice(n.length).replace(/\//g,"_")||"index")+".md";let s=__VP_HASH_MAP__[t.toLowerCase()];s||(t=t.endsWith("_index.md")?t.slice(0,-9)+".md":t.slice(0,-3)+"_index.md",s=__VP_HASH_MAP__[t.toLowerCase()]),t=`${n}assets/${t}.${s}.js`}else t=`./${ni(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}const yl=Symbol(),si="http://a.com",Tc=()=>({path:"/",component:null,data:hl});function Vc(e,t){const n=Qn(Tc()),s={route:n,go:o};async function o(r=$e?location.href:"/"){var u,f;await((u=s.onBeforeRouteChange)==null?void 0:u.call(s,r));const a=new URL(r,si);dt.value.cleanUrls||!a.pathname.endsWith("/")&&!a.pathname.endsWith(".html")&&(a.pathname+=".html",r=a.pathname+a.search+a.hash),$e&&r!==location.href&&(history.replaceState({scrollPosition:window.scrollY},document.title),history.pushState(null,"",r)),await l(r),await((f=s.onAfterRouteChanged)==null?void 0:f.call(s,r))}let i=null;async function l(r,a=0,u=!1){const f=new URL(r,si),_=i=f.pathname;try{let g=await e(_);if(i===_){i=null;const{default:y,__pageData:T}=g;if(!y)throw new Error(`Invalid route component: ${y}`);n.path=$e?_:_n(_),n.component=sn(y),n.data=sn(T),$e&&Zs(()=>{let M=dt.value.base+T.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");if(!dt.value.cleanUrls&&!M.endsWith("/")&&(M+=".html"),M!==f.pathname&&(f.pathname=M,r=M+f.search+f.hash,history.replaceState(null,"",r)),f.hash&&!a){let K=null;try{K=document.querySelector(decodeURIComponent(f.hash))}catch(m){console.warn(m)}if(K){oi(K,f.hash);return}}window.scrollTo(0,a)})}}catch(g){if(!/fetch/.test(g.message)&&!/^\/404(\.html|\/)?$/.test(r)&&console.error(g),!u)try{const y=await fetch(dt.value.base+"hashmap.json");window.__VP_HASH_MAP__=await y.json(),await l(r,a,!0);return}catch{}i===_&&(i=null,n.path=$e?_:_n(_),n.component=t?sn(t):null,n.data=hl)}}return $e&&(window.addEventListener("click",r=>{if(r.target.closest("button"))return;const u=r.target.closest("a");if(u&&!u.closest(".vp-raw")&&(u instanceof SVGElement||!u.download)){const{target:f}=u,{href:_,origin:g,pathname:y,hash:T,search:M}=new URL(u.href instanceof SVGAnimatedString?u.href.animVal:u.href,u.baseURI),K=window.location,m=y.match(/\.\w+$/);!r.ctrlKey&&!r.shiftKey&&!r.altKey&&!r.metaKey&&f!=="_blank"&&g===K.origin&&!(m&&m[0]!==".html")&&(r.preventDefault(),y===K.pathname&&M===K.search?T&&T!==K.hash&&(history.pushState(null,"",T),window.dispatchEvent(new Event("hashchange")),oi(u,T,u.classList.contains("header-anchor"))):o(_))}},{capture:!0}),window.addEventListener("popstate",r=>{l(location.href,r.state&&r.state.scrollPosition||0)}),window.addEventListener("hashchange",r=>{r.preventDefault()})),s}function Ec(){const e=Ke(yl);if(!e)throw new Error("useRouter() is called without provider.");return e}function vt(){return Ec().route}function oi(e,t,n=!1){let s=null;try{s=e.classList.contains("header-anchor")?e:document.querySelector(decodeURIComponent(t))}catch(o){console.warn(o)}if(s){let o=dt.value.scrollOffset;typeof o=="string"&&(o=document.querySelector(o).getBoundingClientRect().bottom+24);const i=parseInt(window.getComputedStyle(s).paddingTop,10),l=window.scrollY+s.getBoundingClientRect().top-o+i;!n||Math.abs(l-window.scrollY)>window.innerHeight?window.scrollTo(0,l):window.scrollTo({left:0,top:l,behavior:"smooth"})}}const Mc=R({name:"VitePressContent",props:{onContentUpdated:Function},setup(e){const t=vt();return eo(()=>{var n;(n=e.onContentUpdated)==null||n.call(e)}),()=>Dn("div",{style:{position:"relative"}},[t.component?Dn(t.component):null])}}),ue=ml;var ii;const kl=typeof window<"u",Ac=e=>typeof e=="string",Ic=()=>{};kl&&((ii=window==null?void 0:window.navigator)!=null&&ii.userAgent)&&/iP(ad|hone|od)/.test(window.navigator.userAgent);function xl(e){return typeof e=="function"?e():p(e)}function Nc(e){return e}function wl(e){return bi()?(tr(e),!0):!1}function Bc(e){return typeof e=="function"?z(e):le(e)}function Oc(e,t=!0){ns()?Oe(e):t?e():Zs(e)}function Fc(e){var t;const n=xl(e);return(t=n==null?void 0:n.$el)!=null?t:n}const lo=kl?window:void 0;function Hc(...e){let t,n,s,o;if(Ac(e[0])||Array.isArray(e[0])?([n,s,o]=e,t=lo):[t,n,s,o]=e,!t)return Ic;Array.isArray(n)||(n=[n]),Array.isArray(s)||(s=[s]);const i=[],l=()=>{i.forEach(f=>f()),i.length=0},r=(f,_,g,y)=>(f.addEventListener(_,g,y),()=>f.removeEventListener(_,g,y)),a=Je(()=>[Fc(t),xl(o)],([f,_])=>{l(),f&&i.push(...n.flatMap(g=>s.map(y=>r(f,g,y,_))))},{immediate:!0,flush:"post"}),u=()=>{a(),l()};return wl(u),u}function Rc(e,t=!1){const n=le(),s=()=>n.value=!!e();return s(),Oc(s,t),n}function Ns(e,t={}){const{window:n=lo}=t,s=Rc(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let o;const i=le(!1),l=()=>{o&&("removeEventListener"in o?o.removeEventListener("change",r):o.removeListener(r))},r=()=>{s.value&&(l(),o=n.matchMedia(Bc(e).value),i.value=o.matches,"addEventListener"in o?o.addEventListener("change",r):o.addListener(r))};return Et(r),wl(()=>l()),i}const li=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},ri="__vueuse_ssr_handlers__";li[ri]=li[ri]||{};var ai;(function(e){e.UP="UP",e.RIGHT="RIGHT",e.DOWN="DOWN",e.LEFT="LEFT",e.NONE="NONE"})(ai||(ai={}));var Dc=Object.defineProperty,ci=Object.getOwnPropertySymbols,Gc=Object.prototype.hasOwnProperty,Uc=Object.prototype.propertyIsEnumerable,ui=(e,t,n)=>t in e?Dc(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,jc=(e,t)=>{for(var n in t||(t={}))Gc.call(t,n)&&ui(e,n,t[n]);if(ci)for(var n of ci(t))Uc.call(t,n)&&ui(e,n,t[n]);return e};const zc={easeInSine:[.12,0,.39,0],easeOutSine:[.61,1,.88,1],easeInOutSine:[.37,0,.63,1],easeInQuad:[.11,0,.5,0],easeOutQuad:[.5,1,.89,1],easeInOutQuad:[.45,0,.55,1],easeInCubic:[.32,0,.67,0],easeOutCubic:[.33,1,.68,1],easeInOutCubic:[.65,0,.35,1],easeInQuart:[.5,0,.75,0],easeOutQuart:[.25,1,.5,1],easeInOutQuart:[.76,0,.24,1],easeInQuint:[.64,0,.78,0],easeOutQuint:[.22,1,.36,1],easeInOutQuint:[.83,0,.17,1],easeInExpo:[.7,0,.84,0],easeOutExpo:[.16,1,.3,1],easeInOutExpo:[.87,0,.13,1],easeInCirc:[.55,0,1,.45],easeOutCirc:[0,.55,.45,1],easeInOutCirc:[.85,0,.15,1],easeInBack:[.36,0,.66,-.56],easeOutBack:[.34,1.56,.64,1],easeInOutBack:[.68,-.6,.32,1.6]};jc({linear:Nc},zc);function Kc({window:e=lo}={}){if(!e)return{x:le(0),y:le(0)};const t=le(e.scrollX),n=le(e.scrollY);return Hc(e,"scroll",()=>{t.value=e.scrollX,n.value=e.scrollY},{capture:!1,passive:!0}),{x:t,y:n}}function qc(e,t){let n,s=!1;return()=>{n&&clearTimeout(n),s?n=setTimeout(e,t):(e(),s=!0,setTimeout(()=>{s=!1},t))}}function Bs(e){return/^\//.test(e)?e:`/${e}`}function gn(e){if(pl(e))return e.replace(yc,"");const{site:t}=ue(),{pathname:n,search:s,hash:o}=new URL(e,"http://example.com"),i=n.endsWith("/")||n.endsWith(".html")?e:e.replace(/(?:(^\.+)\/)?.*$/,`$1${n.replace(/(\.md)?$/,t.value.cleanUrls?"":".html")}${s}${o}`);return _n(i)}function $l(e,t){if(Array.isArray(e))return e;if(e==null)return[];t=Bs(t);const n=Object.keys(e).sort((s,o)=>o.split("/").length-s.split("/").length).find(s=>t.startsWith(Bs(s)));return n?e[n]:[]}function Wc(e){const t=[];let n=0;for(const s in e){const o=e[s];if(o.items){n=t.push(o);continue}t[n]||t.push({items:[]}),t[n].items.push(o)}return t}function Qc(e){const t=[];function n(s){for(const o of s)o.text&&o.link&&t.push({text:o.text,link:o.link}),o.items&&n(o.items)}return n(e),t}function Os(e,t){return Array.isArray(t)?t.some(n=>Os(e,n)):At(e,t.link)?!0:t.items?Os(e,t.items):!1}function it(){const e=vt(),{theme:t,frontmatter:n}=ue(),s=Ns("(min-width: 960px)"),o=le(!1),i=z(()=>{const y=t.value.sidebar,T=e.data.relativePath;return y?$l(y,T):[]}),l=z(()=>n.value.sidebar!==!1&&i.value.length>0&&n.value.layout!=="home"),r=z(()=>n.value.layout==="home"?!1:n.value.aside!=null?!!n.value.aside:t.value.aside!==!1),a=z(()=>l.value&&s.value),u=z(()=>l.value?Wc(i.value):[]);function f(){o.value=!0}function _(){o.value=!1}function g(){o.value?_():f()}return{isOpen:o,sidebar:i,sidebarGroups:u,hasSidebar:l,hasAside:r,isSidebarEnabled:a,open:f,close:_,toggle:g}}function Yc(e,t){let n;Et(()=>{n=e.value?document.activeElement:void 0}),Oe(()=>{window.addEventListener("keyup",s)}),gt(()=>{window.removeEventListener("keyup",s)});function s(o){o.key==="Escape"&&e.value&&(t(),n==null||n.focus())}}function Jc(e){const{page:t}=ue(),n=le(!1),s=z(()=>e.value.collapsed!=null),o=z(()=>!!e.value.link),i=z(()=>At(t.value.relativePath,e.value.link)),l=z(()=>i.value?!0:e.value.items?Os(t.value.relativePath,e.value.items):!1),r=z(()=>!!(e.value.items&&e.value.items.length));Et(()=>{n.value=!!(s.value&&e.value.collapsed)}),Et(()=>{(i.value||l.value)&&(n.value=!1)});function a(){s.value&&(n.value=!n.value)}return{collapsed:n,collapsible:s,isLink:o,isActiveLink:i,hasActiveLink:l,hasChildren:r,toggle:a}}const Xc=R({__name:"VPSkipLink",setup(e){const t=vt(),n=le();Je(()=>t.path,()=>n.value.focus());function s({target:o}){const i=document.querySelector(o.hash);if(i){const l=()=>{i.removeAttribute("tabindex"),i.removeEventListener("blur",l)};i.setAttribute("tabindex","-1"),i.addEventListener("blur",l),i.focus(),window.scrollTo(0,0)}}return(o,i)=>(h(),b(Z,null,[k("span",{ref_key:"backToTop",ref:n,tabindex:"-1"},null,512),k("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:s}," Skip to content ")],64))}});const Zc=H(Xc,[["__scopeId","data-v-0c14bf17"]]),eu={key:0,class:"VPBackdrop"},tu=R({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(e){return(t,n)=>(h(),q(ss,{name:"fade"},{default:I(()=>[e.show?(h(),b("div",eu)):D("",!0)]),_:1}))}});const nu=H(tu,[["__scopeId","data-v-f156ed5b"]]);function su(){const e=le(!1);function t(){e.value=!0,window.addEventListener("resize",o)}function n(){e.value=!1,window.removeEventListener("resize",o)}function s(){e.value?n():t()}function o(){window.outerWidth>=768&&n()}const i=vt();return Je(()=>i.path,n),{isScreenOpen:e,openScreen:t,closeScreen:n,toggleScreen:s}}function yn({removeCurrent:e=!0,correspondingLink:t=!1}={}){const{site:n,localeIndex:s,page:o,theme:i}=ue(),l=z(()=>{var a,u;return{label:(a=n.value.locales[s.value])==null?void 0:a.label,link:((u=n.value.locales[s.value])==null?void 0:u.link)||(s.value==="root"?"/":`/${s.value}/`)}});return{localeLinks:z(()=>Object.entries(n.value.locales).flatMap(([a,u])=>e&&l.value.label===u.label?[]:{text:u.label,link:ou(u.link||(a==="root"?"/":`/${a}/`),i.value.i18nRouting!==!1&&t,o.value.relativePath.slice(l.value.link.length-1),!n.value.cleanUrls)})),currentLang:l}}function ou(e,t,n,s){return t?e.replace(/\/$/,"")+Bs(n.replace(/(^|\/)?index.md$/,"$1").replace(/\.md$/,s?".html":"")):e}const iu=["src","alt"],lu={inheritAttrs:!1},ru=R({...lu,__name:"VPImage",props:{image:null,alt:null},setup(e){return(t,n)=>{const s=Mt("VPImage",!0);return e.image?(h(),b(Z,{key:0},[typeof e.image=="string"||"src"in e.image?(h(),b("img",An({key:0,class:"VPImage"},typeof e.image=="string"?t.$attrs:{...e.image,...t.$attrs},{src:p(_n)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,iu)):(h(),b(Z,{key:1},[V(s,An({class:"dark",image:e.image.dark,alt:e.image.alt},t.$attrs),null,16,["image","alt"]),V(s,An({class:"light",image:e.image.light,alt:e.image.alt},t.$attrs),null,16,["image","alt"])],64))],64)):D("",!0)}}});const ro=H(ru,[["__scopeId","data-v-2ecb366c"]]),au=["href"],cu=R({__name:"VPNavBarTitle",setup(e){const{site:t,theme:n}=ue(),{hasSidebar:s}=it(),{currentLang:o}=yn();return(i,l)=>(h(),b("div",{class:ge(["VPNavBarTitle",{"has-sidebar":p(s)}])},[k("a",{class:"title",href:p(gn)(p(o).link)},[S(i.$slots,"nav-bar-title-before",{},void 0,!0),p(n).logo?(h(),q(ro,{key:0,class:"logo",image:p(n).logo},null,8,["image"])):D("",!0),p(n).siteTitle?(h(),b(Z,{key:1},[Se(ce(p(n).siteTitle),1)],64)):p(n).siteTitle===void 0?(h(),b(Z,{key:2},[Se(ce(p(t).title),1)],64)):D("",!0),S(i.$slots,"nav-bar-title-after",{},void 0,!0)],8,au)],2))}});const uu=H(cu,[["__scopeId","data-v-fb6ffc33"]]);const du={key:0,class:"VPNavBarSearch"},fu={type:"button",class:"DocSearch DocSearch-Button","aria-label":"Search"},hu={class:"DocSearch-Button-Container"},pu=k("svg",{class:"DocSearch-Search-Icon",width:"20",height:"20",viewBox:"0 0 20 20"},[k("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none","fill-rule":"evenodd","stroke-linecap":"round","stroke-linejoin":"round"})],-1),_u={class:"DocSearch-Button-Placeholder"},gu=k("span",{class:"DocSearch-Button-Keys"},[k("kbd",{class:"DocSearch-Button-Key"}),k("kbd",{class:"DocSearch-Button-Key"},"K")],-1),vu=R({__name:"VPNavBarSearch",setup(e){nc(f=>({"2475c8e4":i.value}));const t=Wr(()=>dl(()=>import("./chunks/VPAlgoliaSearchBox.ae96a2f4.js"),[])),{theme:n,localeIndex:s}=ue(),o=le(!1),i=le("'Meta'"),l=z(()=>{var f,_,g,y,T,M,K,m;return((T=(y=(g=(_=(f=n.value.algolia)==null?void 0:f.locales)==null?void 0:_[s.value])==null?void 0:g.translations)==null?void 0:y.button)==null?void 0:T.buttonText)||((m=(K=(M=n.value.algolia)==null?void 0:M.translations)==null?void 0:K.button)==null?void 0:m.buttonText)||"Search"}),r=()=>{const f="VPAlgoliaPreconnect";(window.requestIdleCallback||setTimeout)(()=>{const g=document.createElement("link");g.id=f,g.rel="preconnect",g.href=`https://${n.value.algolia.appId}-dsn.algolia.net`,g.crossOrigin="",document.head.appendChild(g)})};Oe(()=>{if(!n.value.algolia)return;r(),i.value=/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)?"'⌘'":"'Ctrl'";const f=g=>{g.key==="k"&&(g.ctrlKey||g.metaKey)&&(g.preventDefault(),a(),_())},_=()=>{window.removeEventListener("keydown",f)};window.addEventListener("keydown",f),gt(_)});function a(){o.value||(o.value=!0,setTimeout(u,16))}function u(){const f=new Event("keydown");f.key="k",f.metaKey=!0,window.dispatchEvent(f),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||u()},16)}return(f,_)=>p(n).algolia?(h(),b("div",du,[o.value?(h(),q(p(t),{key:0,algolia:p(n).algolia},null,8,["algolia"])):(h(),b("div",{key:1,id:"docsearch",onClick:a},[k("button",fu,[k("span",hu,[pu,k("span",_u,ce(p(l)),1)]),gu])]))])):D("",!0)}});const mu={},bu={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",height:"24px",viewBox:"0 0 24 24",width:"24px"},yu=k("path",{d:"M0 0h24v24H0V0z",fill:"none"},null,-1),ku=k("path",{d:"M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5H9z"},null,-1),xu=[yu,ku];function wu(e,t){return h(),b("svg",bu,xu)}const $u=H(mu,[["render",wu]]),Cu=R({__name:"VPLink",props:{tag:null,href:null,noIcon:{type:Boolean},target:null,rel:null},setup(e){const t=e,n=z(()=>t.tag??t.href?"a":"span"),s=z(()=>t.href&&os.test(t.href));return(o,i)=>(h(),q(hn(p(n)),{class:ge(["VPLink",{link:e.href}]),href:e.href?p(gn)(e.href):void 0,target:e.target||(p(s)?"_blank":void 0),rel:e.rel||(p(s)?"noreferrer":void 0)},{default:I(()=>[S(o.$slots,"default",{},void 0,!0),p(s)&&!e.noIcon?(h(),q($u,{key:0,class:"icon"})):D("",!0)]),_:3},8,["class","href","target","rel"]))}});const mt=H(Cu,[["__scopeId","data-v-b9be72d4"]]),Pu=R({__name:"VPNavBarMenuLink",props:{item:null},setup(e){const{page:t}=ue();return(n,s)=>(h(),q(mt,{class:ge({VPNavBarMenuLink:!0,active:p(At)(p(t).relativePath,e.item.activeMatch||e.item.link,!!e.item.activeMatch)}),href:e.item.link,target:e.item.target,rel:e.item.rel},{default:I(()=>[Se(ce(e.item.text),1)]),_:1},8,["class","href","target","rel"]))}});const Lu=H(Pu,[["__scopeId","data-v-eaade15b"]]),ao=le();let Cl=!1,bs=0;function Su(e){const t=le(!1);if($e){!Cl&&Tu(),bs++;const n=Je(ao,s=>{var o,i,l;s===e.el.value||(o=e.el.value)!=null&&o.contains(s)?(t.value=!0,(i=e.onFocus)==null||i.call(e)):(t.value=!1,(l=e.onBlur)==null||l.call(e))});gt(()=>{n(),bs--,bs||Vu()})}return Qs(t)}function Tu(){document.addEventListener("focusin",Pl),Cl=!0,ao.value=document.activeElement}function Vu(){document.removeEventListener("focusin",Pl)}function Pl(){ao.value=document.activeElement}const Eu={},Mu={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Au=k("path",{d:"M12,16c-0.3,0-0.5-0.1-0.7-0.3l-6-6c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l5.3,5.3l5.3-5.3c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-6,6C12.5,15.9,12.3,16,12,16z"},null,-1),Iu=[Au];function Nu(e,t){return h(),b("svg",Mu,Iu)}const Ll=H(Eu,[["render",Nu]]),Bu={},Ou={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Fu=k("circle",{cx:"12",cy:"12",r:"2"},null,-1),Hu=k("circle",{cx:"19",cy:"12",r:"2"},null,-1),Ru=k("circle",{cx:"5",cy:"12",r:"2"},null,-1),Du=[Fu,Hu,Ru];function Gu(e,t){return h(),b("svg",Ou,Du)}const Uu=H(Bu,[["render",Gu]]),ju={class:"VPMenuLink"},zu=R({__name:"VPMenuLink",props:{item:null},setup(e){const{page:t}=ue();return(n,s)=>(h(),b("div",ju,[V(mt,{class:ge({active:p(At)(p(t).relativePath,e.item.activeMatch||e.item.link,!!e.item.activeMatch)}),href:e.item.link,target:e.item.target,rel:e.item.rel},{default:I(()=>[Se(ce(e.item.text),1)]),_:1},8,["class","href","target","rel"])]))}});const is=H(zu,[["__scopeId","data-v-c8305630"]]),Ku={class:"VPMenuGroup"},qu={key:0,class:"title"},Wu=R({__name:"VPMenuGroup",props:{text:null,items:null},setup(e){return(t,n)=>(h(),b("div",Ku,[e.text?(h(),b("p",qu,ce(e.text),1)):D("",!0),(h(!0),b(Z,null,Ve(e.items,s=>(h(),b(Z,null,["link"in s?(h(),q(is,{key:0,item:s},null,8,["item"])):D("",!0)],64))),256))]))}});const Qu=H(Wu,[["__scopeId","data-v-4ed46b20"]]),Yu={class:"VPMenu"},Ju={key:0,class:"items"},Xu=R({__name:"VPMenu",props:{items:null},setup(e){return(t,n)=>(h(),b("div",Yu,[e.items?(h(),b("div",Ju,[(h(!0),b(Z,null,Ve(e.items,s=>(h(),b(Z,{key:s.text},["link"in s?(h(),q(is,{key:0,item:s},null,8,["item"])):(h(),q(Qu,{key:1,text:s.text,items:s.items},null,8,["text","items"]))],64))),128))])):D("",!0),S(t.$slots,"default",{},void 0,!0)]))}});const Zu=H(Xu,[["__scopeId","data-v-ad9b1221"]]),ed=["aria-expanded","aria-label"],td={key:0,class:"text"},nd={class:"menu"},sd=R({__name:"VPFlyout",props:{icon:null,button:null,label:null,items:null},setup(e){const t=le(!1),n=le();Su({el:n,onBlur:s});function s(){t.value=!1}return(o,i)=>(h(),b("div",{class:"VPFlyout",ref_key:"el",ref:n,onMouseenter:i[1]||(i[1]=l=>t.value=!0),onMouseleave:i[2]||(i[2]=l=>t.value=!1)},[k("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":t.value,"aria-label":e.label,onClick:i[0]||(i[0]=l=>t.value=!t.value)},[e.button||e.icon?(h(),b("span",td,[e.icon?(h(),q(hn(e.icon),{key:0,class:"option-icon"})):D("",!0),Se(" "+ce(e.button)+" ",1),V(Ll,{class:"text-icon"})])):(h(),q(Uu,{key:1,class:"icon"}))],8,ed),k("div",nd,[V(Zu,{items:e.items},{default:I(()=>[S(o.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}});const co=H(sd,[["__scopeId","data-v-5ade3574"]]),od=R({__name:"VPNavBarMenuGroup",props:{item:null},setup(e){const{page:t}=ue();return(n,s)=>(h(),q(co,{class:ge({VPNavBarMenuGroup:!0,active:p(At)(p(t).relativePath,e.item.activeMatch,!!e.item.activeMatch)}),button:e.item.text,items:e.item.items},null,8,["class","button","items"]))}}),id=e=>(Ze("data-v-f7e0d92f"),e=e(),et(),e),ld={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},rd=id(()=>k("span",{id:"main-nav-aria-label",class:"visually-hidden"},"Main Navigation",-1)),ad=R({__name:"VPNavBarMenu",setup(e){const{theme:t}=ue();return(n,s)=>p(t).nav?(h(),b("nav",ld,[rd,(h(!0),b(Z,null,Ve(p(t).nav,o=>(h(),b(Z,{key:o.text},["link"in o?(h(),q(Lu,{key:0,item:o},null,8,["item"])):(h(),q(od,{key:1,item:o},null,8,["item"]))],64))),128))])):D("",!0)}});const cd=H(ad,[["__scopeId","data-v-f7e0d92f"]]),ud={},dd={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},fd=k("path",{d:"M0 0h24v24H0z",fill:"none"},null,-1),hd=k("path",{d:" M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z ",class:"css-c4d79v"},null,-1),pd=[fd,hd];function _d(e,t){return h(),b("svg",dd,pd)}const Sl=H(ud,[["render",_d]]),gd={class:"items"},vd={class:"title"},md=R({__name:"VPNavBarTranslations",setup(e){const{localeLinks:t,currentLang:n}=yn({correspondingLink:!0});return(s,o)=>p(t).length&&p(n).label?(h(),q(co,{key:0,class:"VPNavBarTranslations",icon:Sl},{default:I(()=>[k("div",gd,[k("p",vd,ce(p(n).label),1),(h(!0),b(Z,null,Ve(p(t),i=>(h(),q(is,{key:i.link,item:i},null,8,["item"]))),128))])]),_:1})):D("",!0)}});const bd=H(md,[["__scopeId","data-v-d8bbd8f6"]]);const yd={},kd={class:"VPSwitch",type:"button",role:"switch"},xd={class:"check"},wd={key:0,class:"icon"};function $d(e,t){return h(),b("button",kd,[k("span",xd,[e.$slots.default?(h(),b("span",wd,[S(e.$slots,"default",{},void 0,!0)])):D("",!0)])])}const Cd=H(yd,[["render",$d],["__scopeId","data-v-f4e143c6"]]),Pd={},Ld={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Sd=Ca('',9),Td=[Sd];function Vd(e,t){return h(),b("svg",Ld,Td)}const Ed=H(Pd,[["render",Vd]]),Md={},Ad={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Id=k("path",{d:"M12.1,22c-0.3,0-0.6,0-0.9,0c-5.5-0.5-9.5-5.4-9-10.9c0.4-4.8,4.2-8.6,9-9c0.4,0,0.8,0.2,1,0.5c0.2,0.3,0.2,0.8-0.1,1.1c-2,2.7-1.4,6.4,1.3,8.4c2.1,1.6,5,1.6,7.1,0c0.3-0.2,0.7-0.3,1.1-0.1c0.3,0.2,0.5,0.6,0.5,1c-0.2,2.7-1.5,5.1-3.6,6.8C16.6,21.2,14.4,22,12.1,22zM9.3,4.4c-2.9,1-5,3.6-5.2,6.8c-0.4,4.4,2.8,8.3,7.2,8.7c2.1,0.2,4.2-0.4,5.8-1.8c1.1-0.9,1.9-2.1,2.4-3.4c-2.5,0.9-5.3,0.5-7.5-1.1C9.2,11.4,8.1,7.7,9.3,4.4z"},null,-1),Nd=[Id];function Bd(e,t){return h(),b("svg",Ad,Nd)}const Od=H(Md,[["render",Bd]]),Fd=R({__name:"VPSwitchAppearance",setup(e){const{site:t,isDark:n}=ue(),s=le(!1),o=typeof localStorage<"u"?i():()=>{};Oe(()=>{s.value=document.documentElement.classList.contains("dark")});function i(){const l=window.matchMedia("(prefers-color-scheme: dark)"),r=document.documentElement.classList;let a=localStorage.getItem(ei),u=t.value.appearance==="dark"&&a==null||(a==="auto"||a==null?l.matches:a==="dark");l.onchange=g=>{a==="auto"&&_(u=g.matches)};function f(){_(u=!u),a=u?l.matches?"auto":"dark":l.matches?"light":"auto",localStorage.setItem(ei,a)}function _(g){const y=document.createElement("style");y.type="text/css",y.appendChild(document.createTextNode(`:not(.VPSwitchAppearance):not(.VPSwitchAppearance *) {
   -webkit-transition: none !important;
   -moz-transition: none !important;
   -o-transition: none !important;
diff --git a/assets/chunks/VPAlgoliaSearchBox.1b11cc16.js b/assets/chunks/VPAlgoliaSearchBox.ae96a2f4.js
similarity index 99%
rename from assets/chunks/VPAlgoliaSearchBox.1b11cc16.js
rename to assets/chunks/VPAlgoliaSearchBox.ae96a2f4.js
index 4c5fbc11..65fed4a1 100644
--- a/assets/chunks/VPAlgoliaSearchBox.1b11cc16.js
+++ b/assets/chunks/VPAlgoliaSearchBox.ae96a2f4.js
@@ -1,4 +1,4 @@
-import{f as Pr,u as Ir,g as kr,h as Dr,i as Cr,w as Ar,o as xr,c as Nr}from"../app.7354b8c5.js";/*! @docsearch/js 3.3.3 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */function Ct(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function P(e){for(var t=1;t=0||(i[l]=c[l]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Ve(e,t){return function(n){if(Array.isArray(n))return n}(e)||function(n,r){var o=n==null?null:typeof Symbol<"u"&&n[Symbol.iterator]||n["@@iterator"];if(o!=null){var a,c,u=[],l=!0,s=!1;try{for(o=o.call(n);!(l=(a=o.next()).done)&&(u.push(a.value),!r||u.length!==r);l=!0);}catch(i){s=!0,c=i}finally{try{l||o.return==null||o.return()}finally{if(s)throw c}}return u}}(e,t)||Mn(e,t)||function(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
+import{f as Pr,u as Ir,g as kr,h as Dr,i as Cr,w as Ar,o as xr,c as Nr}from"../app.4a806fb4.js";/*! @docsearch/js 3.3.3 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */function Ct(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function P(e){for(var t=1;t=0||(i[l]=c[l]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Ve(e,t){return function(n){if(Array.isArray(n))return n}(e)||function(n,r){var o=n==null?null:typeof Symbol<"u"&&n[Symbol.iterator]||n["@@iterator"];if(o!=null){var a,c,u=[],l=!0,s=!1;try{for(o=o.call(n);!(l=(a=o.next()).done)&&(u.push(a.value),!r||u.length!==r);l=!0);}catch(i){s=!0,c=i}finally{try{l||o.return==null||o.return()}finally{if(s)throw c}}return u}}(e,t)||Mn(e,t)||function(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
 In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function We(e){return function(t){if(Array.isArray(t))return ft(t)}(e)||function(t){if(typeof Symbol<"u"&&t[Symbol.iterator]!=null||t["@@iterator"]!=null)return Array.from(t)}(e)||Mn(e)||function(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
 In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function Mn(e,t){if(e){if(typeof e=="string")return ft(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set"?Array.from(e):n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ft(e,t):void 0}}function ft(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n3)for(n=[n],a=3;a0?Se(p.type,p.props,p.key,null,p.__v):p)!=null){if(p.__=n,p.__b=n.__b+1,(d=y[i])===null||d&&p.key==d.key&&p.type===d.type)y[i]=void 0;else for(m=0;m3)for(n=[n],a=3;a=n.__.length&&n.__.push({}),n.__[e]}function Zn(e){return ue=1,Yn(Xn,e)}function Yn(e,t,n){var r=ke(le++,2);return r.t=e,r.__c||(r.__=[n?n(t):Xn(void 0,t),function(o){var a=r.t(r.__[0],o);r.__[0]!==a&&(r.__=[a,r.__[1]],r.__c.setState({}))}],r.__c=T),r.__}function Gn(e,t){var n=ke(le++,3);!w.__s&&jt(n.__H,t)&&(n.__=e,n.__H=t,T.__H.__h.push(n))}function Ft(e,t){var n=ke(le++,4);!w.__s&&jt(n.__H,t)&&(n.__=e,n.__H=t,T.__h.push(n))}function rt(e,t){var n=ke(le++,7);return jt(n.__H,t)&&(n.__=e(),n.__H=t,n.__h=e),n.__}function Ur(){mt.forEach(function(e){if(e.__P)try{e.__H.__h.forEach(He),e.__H.__h.forEach(dt),e.__H.__h=[]}catch(t){e.__H.__h=[],w.__e(t,e.__v)}}),mt=[]}w.__b=function(e){T=null,Lt&&Lt(e)},w.__r=function(e){qt&&qt(e),le=0;var t=(T=e.__c).__H;t&&(t.__h.forEach(He),t.__h.forEach(dt),t.__h=[])},w.diffed=function(e){Mt&&Mt(e);var t=e.__c;t&&t.__H&&t.__H.__h.length&&(mt.push(t)!==1&&Tt===w.requestAnimationFrame||((Tt=w.requestAnimationFrame)||function(n){var r,o=function(){clearTimeout(a),Bt&&cancelAnimationFrame(r),setTimeout(n)},a=setTimeout(o,100);Bt&&(r=requestAnimationFrame(o))})(Ur)),T=void 0},w.__c=function(e,t){t.some(function(n){try{n.__h.forEach(He),n.__h=n.__h.filter(function(r){return!r.__||dt(r)})}catch(r){t.some(function(o){o.__h&&(o.__h=[])}),t=[],w.__e(r,n.__v)}}),Ht&&Ht(e,t)},w.unmount=function(e){Ut&&Ut(e);var t=e.__c;if(t&&t.__H)try{t.__H.__.forEach(He)}catch(n){w.__e(n,t.__v)}};var Bt=typeof requestAnimationFrame=="function";function He(e){var t=T;typeof e.__c=="function"&&e.__c(),T=t}function dt(e){var t=T;e.__c=e.__(),T=t}function jt(e,t){return!e||e.length!==t.length||t.some(function(n,r){return n!==e[r]})}function Xn(e,t){return typeof t=="function"?t(e):t}function er(e,t){for(var n in t)e[n]=t[n];return e}function ht(e,t){for(var n in e)if(n!=="__source"&&!(n in t))return!0;for(var r in t)if(r!=="__source"&&e[r]!==t[r])return!0;return!1}function vt(e){this.props=e}(vt.prototype=new W).isPureReactComponent=!0,vt.prototype.shouldComponentUpdate=function(e,t){return ht(this.props,e)||ht(this.state,t)};var Vt=w.__b;w.__b=function(e){e.type&&e.type.__f&&e.ref&&(e.props.ref=e.ref,e.ref=null),Vt&&Vt(e)};var Fr=typeof Symbol<"u"&&Symbol.for&&Symbol.for("react.forward_ref")||3911,Wt=function(e,t){return e==null?null:J(J(e).map(t))},Br={map:Wt,forEach:Wt,count:function(e){return e?J(e).length:0},only:function(e){var t=J(e);if(t.length!==1)throw"Children.only";return t[0]},toArray:J},Vr=w.__e;function Ue(){this.__u=0,this.t=null,this.__b=null}function tr(e){var t=e.__.__c;return t&&t.__e&&t.__e(e)}function ge(){this.u=null,this.o=null}w.__e=function(e,t,n){if(e.then){for(var r,o=t;o=o.__;)if((r=o.__c)&&r.__c)return t.__e==null&&(t.__e=n.__e,t.__k=n.__k),r.__c(e,t)}Vr(e,t,n)},(Ue.prototype=new W).__c=function(e,t){var n=t.__c,r=this;r.t==null&&(r.t=[]),r.t.push(n);var o=tr(r.__v),a=!1,c=function(){a||(a=!0,n.componentWillUnmount=n.__c,o?o(u):u())};n.__c=n.componentWillUnmount,n.componentWillUnmount=function(){c(),n.__c&&n.__c()};var u=function(){if(!--r.__u){if(r.state.__e){var s=r.state.__e;r.__v.__k[0]=function m(d,p,v){return d&&(d.__v=null,d.__k=d.__k&&d.__k.map(function(h){return m(h,p,v)}),d.__c&&d.__c.__P===p&&(d.__e&&v.insertBefore(d.__e,d.__d),d.__c.__e=!0,d.__c.__P=v)),d}(s,s.__c.__P,s.__c.__O)}var i;for(r.setState({__e:r.__b=null});i=r.t.pop();)i.forceUpdate()}},l=t.__h===!0;r.__u++||l||r.setState({__e:r.__b=r.__v.__k[0]}),e.then(c,c)},Ue.prototype.componentWillUnmount=function(){this.t=[]},Ue.prototype.render=function(e,t){if(this.__b){if(this.__v.__k){var n=document.createElement("div"),r=this.__v.__k[0].__c;this.__v.__k[0]=function a(c,u,l){return c&&(c.__c&&c.__c.__H&&(c.__c.__H.__.forEach(function(s){typeof s.__c=="function"&&s.__c()}),c.__c.__H=null),(c=er({},c)).__c!=null&&(c.__c.__P===l&&(c.__c.__P=u),c.__c=null),c.__k=c.__k&&c.__k.map(function(s){return a(s,u,l)})),c}(this.__b,n,r.__O=r.__P)}this.__b=null}var o=t.__e&&V(Z,null,e.fallback);return o&&(o.__h=null),[V(Z,null,t.__e?null:e.children),o]};var Kt=function(e,t,n){if(++n[1]===n[0]&&e.o.delete(t),e.props.revealOrder&&(e.props.revealOrder[0]!=="t"||!e.o.size))for(n=e.u;n;){for(;n.length>3;)n.pop()();if(n[1]>>1,1),t.i.removeChild(r)}}),Pe(V(Wr,{context:t.context},e.__v),t.l)):t.l&&t.componentWillUnmount()}function nr(e,t){return V(Kr,{__v:e,i:t})}(ge.prototype=new W).__e=function(e){var t=this,n=tr(t.__v),r=t.o.get(e);return r[0]++,function(o){var a=function(){t.props.revealOrder?(r.push(o),Kt(t,e,r)):o()};n?n(a):a()}},ge.prototype.render=function(e){this.u=null,this.o=new Map;var t=J(e.children);e.revealOrder&&e.revealOrder[0]==="b"&&t.reverse();for(var n=t.length;n--;)this.o.set(t[n],this.u=[1,0,this.u]);return e.children},ge.prototype.componentDidUpdate=ge.prototype.componentDidMount=function(){var e=this;this.o.forEach(function(t,n){Kt(e,n,t)})};var rr=typeof Symbol<"u"&&Symbol.for&&Symbol.for("react.element")||60103,zr=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|fill|flood|font|glyph(?!R)|horiz|marker(?!H|W|U)|overline|paint|stop|strikethrough|stroke|text(?!L)|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,Jr=function(e){return(typeof Symbol<"u"&&Ee(Symbol())=="symbol"?/fil|che|rad/i:/fil|che|ra/i).test(e)};function or(e,t,n){return t.__k==null&&(t.textContent=""),Pe(e,t),typeof n=="function"&&n(),e?e.__c:null}W.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach(function(e){Object.defineProperty(W.prototype,e,{configurable:!0,get:function(){return this["UNSAFE_"+e]},set:function(t){Object.defineProperty(this,e,{configurable:!0,writable:!0,value:t})}})});var zt=w.event;function $r(){}function Qr(){return this.cancelBubble}function Zr(){return this.defaultPrevented}w.event=function(e){return zt&&(e=zt(e)),e.persist=$r,e.isPropagationStopped=Qr,e.isDefaultPrevented=Zr,e.nativeEvent=e};var ar,Jt={configurable:!0,get:function(){return this.class}},$t=w.vnode;w.vnode=function(e){var t=e.type,n=e.props,r=n;if(typeof t=="string"){for(var o in r={},n){var a=n[o];o==="value"&&"defaultValue"in n&&a==null||(o==="defaultValue"&&"value"in n&&n.value==null?o="value":o==="download"&&a===!0?a="":/ondoubleclick/i.test(o)?o="ondblclick":/^onchange(textarea|input)/i.test(o+t)&&!Jr(n.type)?o="oninput":/^on(Ani|Tra|Tou|BeforeInp)/.test(o)?o=o.toLowerCase():zr.test(o)?o=o.replace(/[A-Z0-9]/,"-$&").toLowerCase():a===null&&(a=void 0),r[o]=a)}t=="select"&&r.multiple&&Array.isArray(r.value)&&(r.value=J(n.children).forEach(function(c){c.props.selected=r.value.indexOf(c.props.value)!=-1})),t=="select"&&r.defaultValue!=null&&(r.value=J(n.children).forEach(function(c){c.props.selected=r.multiple?r.defaultValue.indexOf(c.props.value)!=-1:r.defaultValue==c.props.value})),e.props=r}t&&n.class!=n.className&&(Jt.enumerable="className"in n,n.className!=null&&(r.class=n.className),Object.defineProperty(r,"className",Jt)),e.$$typeof=rr,$t&&$t(e)};var Qt=w.__r;w.__r=function(e){Qt&&Qt(e),ar=e.__c};var Yr={ReactCurrentDispatcher:{current:{readContext:function(e){return ar.__n[e.__c].props.value}}}};(typeof performance>"u"?"undefined":Ee(performance))=="object"&&typeof performance.now=="function"&&performance.now.bind(performance);function Zt(e){return!!e&&e.$$typeof===rr}var f={useState:Zn,useReducer:Yn,useEffect:Gn,useLayoutEffect:Ft,useRef:function(e){return ue=5,rt(function(){return{current:e}},[])},useImperativeHandle:function(e,t,n){ue=6,Ft(function(){typeof e=="function"?e(t()):e&&(e.current=t())},n==null?n:n.concat(e))},useMemo:rt,useCallback:function(e,t){return ue=8,rt(function(){return e},t)},useContext:function(e){var t=T.context[e.__c],n=ke(le++,9);return n.__c=e,t?(n.__==null&&(n.__=!0,t.sub(T)),t.props.value):e.__},useDebugValue:function(e,t){w.useDebugValue&&w.useDebugValue(t?t(e):e)},version:"16.8.0",Children:Br,render:or,hydrate:function(e,t,n){return Qn(e,t),typeof n=="function"&&n(),e?e.__c:null},unmountComponentAtNode:function(e){return!!e.__k&&(Pe(null,e),!0)},createPortal:nr,createElement:V,createContext:function(e,t){var n={__c:t="__cC"+Un++,__:e,Consumer:function(r,o){return r.children(o)},Provider:function(r){var o,a;return this.getChildContext||(o=[],(a={})[t]=this,this.getChildContext=function(){return a},this.shouldComponentUpdate=function(c){this.props.value!==c.value&&o.some(pt)},this.sub=function(c){o.push(c);var u=c.componentWillUnmount;c.componentWillUnmount=function(){o.splice(o.indexOf(c),1),u&&u.call(c)}}),r.children}};return n.Provider.__=n.Consumer.contextType=n},createFactory:function(e){return V.bind(null,e)},cloneElement:function(e){return Zt(e)?Hr.apply(null,arguments):e},createRef:function(){return{current:null}},Fragment:Z,isValidElement:Zt,findDOMNode:function(e){return e&&(e.base||e.nodeType===1&&e)||null},Component:W,PureComponent:vt,memo:function(e,t){function n(o){var a=this.props.ref,c=a==o.ref;return!c&&a&&(a.call?a(null):a.current=null),t?!t(this.props,o)||!c:ht(this.props,o)}function r(o){return this.shouldComponentUpdate=n,V(e,o)}return r.displayName="Memo("+(e.displayName||e.name)+")",r.prototype.isReactComponent=!0,r.__f=!0,r},forwardRef:function(e){function t(n,r){var o=er({},n);return delete o.ref,e(o,(r=n.ref||r)&&(Ee(r)!="object"||"current"in r)?r:null)}return t.$$typeof=Fr,t.render=t,t.prototype.isReactComponent=t.__f=!0,t.displayName="ForwardRef("+(e.displayName||e.name)+")",t},unstable_batchedUpdates:function(e,t){return e(t)},StrictMode:Z,Suspense:Ue,SuspenseList:ge,lazy:function(e){var t,n,r;function o(a){if(t||(t=e()).then(function(c){n=c.default||c},function(c){r=c}),r)throw r;if(!n)throw t;return V(n,a)}return o.displayName="Lazy",o.__f=!0,o},__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:Yr};function Gr(){return f.createElement("svg",{width:"15",height:"15",className:"DocSearch-Control-Key-Icon"},f.createElement("path",{d:"M4.505 4.496h2M5.505 5.496v5M8.216 4.496l.055 5.993M10 7.5c.333.333.5.667.5 1v2M12.326 4.5v5.996M8.384 4.496c1.674 0 2.116 0 2.116 1.5s-.442 1.5-2.116 1.5M3.205 9.303c-.09.448-.277 1.21-1.241 1.203C1 10.5.5 9.513.5 8V7c0-1.57.5-2.5 1.464-2.494.964.006 1.134.598 1.24 1.342M12.553 10.5h1.953",strokeWidth:"1.2",stroke:"currentColor",fill:"none",strokeLinecap:"square"}))}function cr(){return f.createElement("svg",{width:"20",height:"20",className:"DocSearch-Search-Icon",viewBox:"0 0 20 20"},f.createElement("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}var Xr=["translations"];function yt(){return yt=Object.assign||function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(i[l]=c[l]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var no=f.forwardRef(function(e,t){var n=e.translations,r=n===void 0?{}:n,o=to(e,Xr),a=r.buttonText,c=a===void 0?"Search":a,u=r.buttonAriaLabel,l=u===void 0?"Search":u,s=eo(Zn(null),2),i=s[0],m=s[1];return Gn(function(){typeof navigator<"u"&&(/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)?m("⌘"):m("Ctrl"))},[]),f.createElement("button",yt({type:"button",className:"DocSearch DocSearch-Button","aria-label":l},o,{ref:t}),f.createElement("span",{className:"DocSearch-Button-Container"},f.createElement(cr,null),f.createElement("span",{className:"DocSearch-Button-Placeholder"},c)),f.createElement("span",{className:"DocSearch-Button-Keys"},i!==null&&f.createElement(f.Fragment,null,f.createElement("kbd",{className:"DocSearch-Button-Key"},i==="Ctrl"?f.createElement(Gr,null):i),f.createElement("kbd",{className:"DocSearch-Button-Key"},"K"))))});function Ie(e){return e.reduce(function(t,n){return t.concat(n)},[])}var ro=0;function _t(e){return e.collections.length===0?0:e.collections.reduce(function(t,n){return t+n.items.length},0)}var ir=function(){},oo=[{segment:"autocomplete-core",version:"1.7.4"}];function Fe(e,t){var n=t;return{then:function(r,o){return Fe(e.then(xe(r,n,e),xe(o,n,e)),n)},catch:function(r){return Fe(e.catch(xe(r,n,e)),n)},finally:function(r){return r&&n.onCancelList.push(r),Fe(e.finally(xe(r&&function(){return n.onCancelList=[],r()},n,e)),n)},cancel:function(){n.isCanceled=!0;var r=n.onCancelList;n.onCancelList=[],r.forEach(function(o){o()})},isCanceled:function(){return n.isCanceled===!0}}}function Gt(e){return Fe(e,{isCanceled:!1,onCancelList:[]})}function xe(e,t,n){return e?function(r){return t.isCanceled?r:e(r)}:n}function Xt(e,t,n,r){if(!n)return null;if(e<0&&(t===null||r!==null&&t===0))return n+e;var o=(t===null?-1:t)+e;return o<=-1||o>=n?r===null?null:0:o}function en(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function ao(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function co(e,t){var n=[];return Promise.resolve(e(t)).then(function(r){return Promise.all(r.filter(function(o){return!!o}).map(function(o){if(o.sourceId,n.includes(o.sourceId))throw new Error("[Autocomplete] The `sourceId` ".concat(JSON.stringify(o.sourceId)," is not unique."));n.push(o.sourceId);var a=function(c){for(var u=1;uBooks 

E-book

',3),i=[s];function n(_,d,c,l,h,k){return t(),o("div",null,i)}const p=e(r,[["render",n]]);export{f as __pageData,p as default}; +import{_ as e,c as o,o as t,e as a}from"./app.4a806fb4.js";const f=JSON.parse('{"title":"Books","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"E-book","slug":"e-book","link":"#e-book","children":[]}],"relativePath":"favorites/Books/index.md"}'),r={name:"favorites/Books/index.md"},s=a('

Books

E-book

',3),i=[s];function n(_,d,c,l,h,k){return t(),o("div",null,i)}const p=e(r,[["render",n]]);export{f as __pageData,p as default}; diff --git a/assets/favorites_Books_index.md.2ca1ac14.lean.js b/assets/favorites_Books_index.md.a8f285fc.lean.js similarity index 85% rename from assets/favorites_Books_index.md.2ca1ac14.lean.js rename to assets/favorites_Books_index.md.a8f285fc.lean.js index 58748999..334fc8fe 100644 --- a/assets/favorites_Books_index.md.2ca1ac14.lean.js +++ b/assets/favorites_Books_index.md.a8f285fc.lean.js @@ -1 +1 @@ -import{_ as e,c as o,o as t,e as a}from"./app.7354b8c5.js";const f=JSON.parse('{"title":"Books","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"E-book","slug":"e-book","link":"#e-book","children":[]}],"relativePath":"favorites/Books/index.md"}'),r={name:"favorites/Books/index.md"},s=a("",3),i=[s];function n(_,d,c,l,h,k){return t(),o("div",null,i)}const p=e(r,[["render",n]]);export{f as __pageData,p as default}; +import{_ as e,c as o,o as t,e as a}from"./app.4a806fb4.js";const f=JSON.parse('{"title":"Books","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"E-book","slug":"e-book","link":"#e-book","children":[]}],"relativePath":"favorites/Books/index.md"}'),r={name:"favorites/Books/index.md"},s=a("",3),i=[s];function n(_,d,c,l,h,k){return t(),o("div",null,i)}const p=e(r,[["render",n]]);export{f as __pageData,p as default}; diff --git a/assets/favorites_Browser_index.md.b1f00a99.js b/assets/favorites_Browser_index.md.49af41a6.js similarity index 93% rename from assets/favorites_Browser_index.md.b1f00a99.js rename to assets/favorites_Browser_index.md.49af41a6.js index d250cec1..d8def4f1 100644 --- a/assets/favorites_Browser_index.md.b1f00a99.js +++ b/assets/favorites_Browser_index.md.49af41a6.js @@ -1 +1 @@ -import{_ as r,c as t,o as a,a as e,b as s}from"./app.7354b8c5.js";const u=JSON.parse('{"title":"Browser相关","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/Browser/index.md"}'),o={name:"favorites/Browser/index.md"},n=e("h1",{id:"browser相关",tabindex:"-1"},[s("Browser相关 "),e("a",{class:"header-anchor",href:"#browser相关","aria-hidden":"true"},"#")],-1),c=e("ul",null,[e("li",null,[e("a",{href:"https://learn.scriptcat.org",target:"_blank",rel:"noreferrer"},"油猴开发指南")]),e("li",null,[e("a",{href:"https://mp.weixin.qq.com/s?__biz=MzIyMjg2ODExMA==&mid=2247485484&idx=1&sn=bbec1d0d3dcaa3bc1b875c35b6c05ad2&scene=21#wechat_redirect",target:"_blank",rel:"noreferrer"},"实用油猴脚本推荐,让你的谷歌浏览器更强大(公众号【苏生不惑】)")])],-1),d=[n,c];function i(l,_,h,p,f,b){return a(),t("div",null,d)}const x=r(o,[["render",i]]);export{u as __pageData,x as default}; +import{_ as r,c as t,o as a,a as e,b as s}from"./app.4a806fb4.js";const u=JSON.parse('{"title":"Browser相关","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/Browser/index.md"}'),o={name:"favorites/Browser/index.md"},n=e("h1",{id:"browser相关",tabindex:"-1"},[s("Browser相关 "),e("a",{class:"header-anchor",href:"#browser相关","aria-hidden":"true"},"#")],-1),c=e("ul",null,[e("li",null,[e("a",{href:"https://learn.scriptcat.org",target:"_blank",rel:"noreferrer"},"油猴开发指南")]),e("li",null,[e("a",{href:"https://mp.weixin.qq.com/s?__biz=MzIyMjg2ODExMA==&mid=2247485484&idx=1&sn=bbec1d0d3dcaa3bc1b875c35b6c05ad2&scene=21#wechat_redirect",target:"_blank",rel:"noreferrer"},"实用油猴脚本推荐,让你的谷歌浏览器更强大(公众号【苏生不惑】)")])],-1),d=[n,c];function i(l,_,h,p,f,b){return a(),t("div",null,d)}const x=r(o,[["render",i]]);export{u as __pageData,x as default}; diff --git a/assets/favorites_Browser_index.md.b1f00a99.lean.js b/assets/favorites_Browser_index.md.49af41a6.lean.js similarity index 93% rename from assets/favorites_Browser_index.md.b1f00a99.lean.js rename to assets/favorites_Browser_index.md.49af41a6.lean.js index d250cec1..d8def4f1 100644 --- a/assets/favorites_Browser_index.md.b1f00a99.lean.js +++ b/assets/favorites_Browser_index.md.49af41a6.lean.js @@ -1 +1 @@ -import{_ as r,c as t,o as a,a as e,b as s}from"./app.7354b8c5.js";const u=JSON.parse('{"title":"Browser相关","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/Browser/index.md"}'),o={name:"favorites/Browser/index.md"},n=e("h1",{id:"browser相关",tabindex:"-1"},[s("Browser相关 "),e("a",{class:"header-anchor",href:"#browser相关","aria-hidden":"true"},"#")],-1),c=e("ul",null,[e("li",null,[e("a",{href:"https://learn.scriptcat.org",target:"_blank",rel:"noreferrer"},"油猴开发指南")]),e("li",null,[e("a",{href:"https://mp.weixin.qq.com/s?__biz=MzIyMjg2ODExMA==&mid=2247485484&idx=1&sn=bbec1d0d3dcaa3bc1b875c35b6c05ad2&scene=21#wechat_redirect",target:"_blank",rel:"noreferrer"},"实用油猴脚本推荐,让你的谷歌浏览器更强大(公众号【苏生不惑】)")])],-1),d=[n,c];function i(l,_,h,p,f,b){return a(),t("div",null,d)}const x=r(o,[["render",i]]);export{u as __pageData,x as default}; +import{_ as r,c as t,o as a,a as e,b as s}from"./app.4a806fb4.js";const u=JSON.parse('{"title":"Browser相关","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/Browser/index.md"}'),o={name:"favorites/Browser/index.md"},n=e("h1",{id:"browser相关",tabindex:"-1"},[s("Browser相关 "),e("a",{class:"header-anchor",href:"#browser相关","aria-hidden":"true"},"#")],-1),c=e("ul",null,[e("li",null,[e("a",{href:"https://learn.scriptcat.org",target:"_blank",rel:"noreferrer"},"油猴开发指南")]),e("li",null,[e("a",{href:"https://mp.weixin.qq.com/s?__biz=MzIyMjg2ODExMA==&mid=2247485484&idx=1&sn=bbec1d0d3dcaa3bc1b875c35b6c05ad2&scene=21#wechat_redirect",target:"_blank",rel:"noreferrer"},"实用油猴脚本推荐,让你的谷歌浏览器更强大(公众号【苏生不惑】)")])],-1),d=[n,c];function i(l,_,h,p,f,b){return a(),t("div",null,d)}const x=r(o,[["render",i]]);export{u as __pageData,x as default}; diff --git a/assets/favorites_CSS_index.md.512ce1d4.js b/assets/favorites_CSS_index.md.435c75d9.js similarity index 97% rename from assets/favorites_CSS_index.md.512ce1d4.js rename to assets/favorites_CSS_index.md.435c75d9.js index 045cfc83..6e288f9b 100644 --- a/assets/favorites_CSS_index.md.512ce1d4.js +++ b/assets/favorites_CSS_index.md.435c75d9.js @@ -1 +1 @@ -import{_ as e,c as r,o as a,e as t}from"./app.7354b8c5.js";const S=JSON.parse('{"title":"CSS","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"CSS相关","slug":"css相关","link":"#css相关","children":[]},{"level":2,"title":"SCSS相关","slug":"scss相关","link":"#scss相关","children":[]}],"relativePath":"favorites/CSS/index.md"}'),s={name:"favorites/CSS/index.md"},i=t('

CSS

CSS相关

SCSS相关

',5),l=[i];function n(o,c,h,f,d,_){return a(),r("div",null,l)}const u=e(s,[["render",n]]);export{S as __pageData,u as default}; +import{_ as e,c as r,o as a,e as t}from"./app.4a806fb4.js";const S=JSON.parse('{"title":"CSS","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"CSS相关","slug":"css相关","link":"#css相关","children":[]},{"level":2,"title":"SCSS相关","slug":"scss相关","link":"#scss相关","children":[]}],"relativePath":"favorites/CSS/index.md"}'),s={name:"favorites/CSS/index.md"},i=t('

CSS

CSS相关

SCSS相关

',5),l=[i];function n(o,c,h,f,d,_){return a(),r("div",null,l)}const u=e(s,[["render",n]]);export{S as __pageData,u as default}; diff --git a/assets/favorites_CSS_index.md.512ce1d4.lean.js b/assets/favorites_CSS_index.md.435c75d9.lean.js similarity index 88% rename from assets/favorites_CSS_index.md.512ce1d4.lean.js rename to assets/favorites_CSS_index.md.435c75d9.lean.js index ec0fe0a5..aeee7791 100644 --- a/assets/favorites_CSS_index.md.512ce1d4.lean.js +++ b/assets/favorites_CSS_index.md.435c75d9.lean.js @@ -1 +1 @@ -import{_ as e,c as r,o as a,e as t}from"./app.7354b8c5.js";const S=JSON.parse('{"title":"CSS","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"CSS相关","slug":"css相关","link":"#css相关","children":[]},{"level":2,"title":"SCSS相关","slug":"scss相关","link":"#scss相关","children":[]}],"relativePath":"favorites/CSS/index.md"}'),s={name:"favorites/CSS/index.md"},i=t("",5),l=[i];function n(o,c,h,f,d,_){return a(),r("div",null,l)}const u=e(s,[["render",n]]);export{S as __pageData,u as default}; +import{_ as e,c as r,o as a,e as t}from"./app.4a806fb4.js";const S=JSON.parse('{"title":"CSS","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"CSS相关","slug":"css相关","link":"#css相关","children":[]},{"level":2,"title":"SCSS相关","slug":"scss相关","link":"#scss相关","children":[]}],"relativePath":"favorites/CSS/index.md"}'),s={name:"favorites/CSS/index.md"},i=t("",5),l=[i];function n(o,c,h,f,d,_){return a(),r("div",null,l)}const u=e(s,[["render",n]]);export{S as __pageData,u as default}; diff --git a/assets/favorites_Canvas_index.md.46427179.js b/assets/favorites_Canvas_index.md.6af808eb.js similarity index 91% rename from assets/favorites_Canvas_index.md.46427179.js rename to assets/favorites_Canvas_index.md.6af808eb.js index 7a485daf..3348e5b5 100644 --- a/assets/favorites_Canvas_index.md.46427179.js +++ b/assets/favorites_Canvas_index.md.6af808eb.js @@ -1 +1 @@ -import{_ as e,c as t,o as n,a,b as r}from"./app.7354b8c5.js";const m=JSON.parse('{"title":"Canvas相关","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/Canvas/index.md"}'),s={name:"favorites/Canvas/index.md"},o=a("h1",{id:"canvas相关",tabindex:"-1"},[r("Canvas相关 "),a("a",{class:"header-anchor",href:"#canvas相关","aria-hidden":"true"},"#")],-1),c=a("ul",null,[a("li",null,[a("a",{href:"https://www.canvasapi.cn/",target:"_blank",rel:"noreferrer"},"Canvas API中文文档")]),a("li",null,[a("a",{href:"https://juejin.cn/post/7014765000916992036",target:"_blank",rel:"noreferrer"},"Canvas 模糊问题解析和解决")])],-1),i=[o,c];function d(l,_,h,p,f,v){return n(),t("div",null,i)}const x=e(s,[["render",d]]);export{m as __pageData,x as default}; +import{_ as e,c as t,o as n,a,b as r}from"./app.4a806fb4.js";const m=JSON.parse('{"title":"Canvas相关","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/Canvas/index.md"}'),s={name:"favorites/Canvas/index.md"},o=a("h1",{id:"canvas相关",tabindex:"-1"},[r("Canvas相关 "),a("a",{class:"header-anchor",href:"#canvas相关","aria-hidden":"true"},"#")],-1),c=a("ul",null,[a("li",null,[a("a",{href:"https://www.canvasapi.cn/",target:"_blank",rel:"noreferrer"},"Canvas API中文文档")]),a("li",null,[a("a",{href:"https://juejin.cn/post/7014765000916992036",target:"_blank",rel:"noreferrer"},"Canvas 模糊问题解析和解决")])],-1),i=[o,c];function d(l,_,h,p,f,v){return n(),t("div",null,i)}const x=e(s,[["render",d]]);export{m as __pageData,x as default}; diff --git a/assets/favorites_Canvas_index.md.46427179.lean.js b/assets/favorites_Canvas_index.md.6af808eb.lean.js similarity index 91% rename from assets/favorites_Canvas_index.md.46427179.lean.js rename to assets/favorites_Canvas_index.md.6af808eb.lean.js index 7a485daf..3348e5b5 100644 --- a/assets/favorites_Canvas_index.md.46427179.lean.js +++ b/assets/favorites_Canvas_index.md.6af808eb.lean.js @@ -1 +1 @@ -import{_ as e,c as t,o as n,a,b as r}from"./app.7354b8c5.js";const m=JSON.parse('{"title":"Canvas相关","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/Canvas/index.md"}'),s={name:"favorites/Canvas/index.md"},o=a("h1",{id:"canvas相关",tabindex:"-1"},[r("Canvas相关 "),a("a",{class:"header-anchor",href:"#canvas相关","aria-hidden":"true"},"#")],-1),c=a("ul",null,[a("li",null,[a("a",{href:"https://www.canvasapi.cn/",target:"_blank",rel:"noreferrer"},"Canvas API中文文档")]),a("li",null,[a("a",{href:"https://juejin.cn/post/7014765000916992036",target:"_blank",rel:"noreferrer"},"Canvas 模糊问题解析和解决")])],-1),i=[o,c];function d(l,_,h,p,f,v){return n(),t("div",null,i)}const x=e(s,[["render",d]]);export{m as __pageData,x as default}; +import{_ as e,c as t,o as n,a,b as r}from"./app.4a806fb4.js";const m=JSON.parse('{"title":"Canvas相关","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/Canvas/index.md"}'),s={name:"favorites/Canvas/index.md"},o=a("h1",{id:"canvas相关",tabindex:"-1"},[r("Canvas相关 "),a("a",{class:"header-anchor",href:"#canvas相关","aria-hidden":"true"},"#")],-1),c=a("ul",null,[a("li",null,[a("a",{href:"https://www.canvasapi.cn/",target:"_blank",rel:"noreferrer"},"Canvas API中文文档")]),a("li",null,[a("a",{href:"https://juejin.cn/post/7014765000916992036",target:"_blank",rel:"noreferrer"},"Canvas 模糊问题解析和解决")])],-1),i=[o,c];function d(l,_,h,p,f,v){return n(),t("div",null,i)}const x=e(s,[["render",d]]);export{m as __pageData,x as default}; diff --git a/assets/favorites_Docker_index.md.a5eb5870.js b/assets/favorites_Docker_index.md.26697292.js similarity index 92% rename from assets/favorites_Docker_index.md.a5eb5870.js rename to assets/favorites_Docker_index.md.26697292.js index 1cb614b4..e4d17eb8 100644 --- a/assets/favorites_Docker_index.md.a5eb5870.js +++ b/assets/favorites_Docker_index.md.26697292.js @@ -1 +1 @@ -import{_ as r,c as t,o,a as e,b as a}from"./app.7354b8c5.js";const m=JSON.parse('{"title":"Docker","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/Docker/index.md"}'),c={name:"favorites/Docker/index.md"},n=e("h1",{id:"docker",tabindex:"-1"},[a("Docker "),e("a",{class:"header-anchor",href:"#docker","aria-hidden":"true"},"#")],-1),s=e("ul",null,[e("li",null,[e("a",{href:"https://docker.easydoc.net/doc/81170005/cCewZWoN/lTKfePfP",target:"_blank",rel:"noreferrer"},"一小时快速上手Docker")]),e("li",null,[e("a",{href:"https://yeasy.gitbook.io/docker_practice",target:"_blank",rel:"noreferrer"},"Docker — 从入门到实践")])],-1),d=[n,s];function i(l,_,f,h,k,p){return o(),t("div",null,d)}const x=r(c,[["render",i]]);export{m as __pageData,x as default}; +import{_ as r,c as t,o,a as e,b as a}from"./app.4a806fb4.js";const m=JSON.parse('{"title":"Docker","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/Docker/index.md"}'),c={name:"favorites/Docker/index.md"},n=e("h1",{id:"docker",tabindex:"-1"},[a("Docker "),e("a",{class:"header-anchor",href:"#docker","aria-hidden":"true"},"#")],-1),s=e("ul",null,[e("li",null,[e("a",{href:"https://docker.easydoc.net/doc/81170005/cCewZWoN/lTKfePfP",target:"_blank",rel:"noreferrer"},"一小时快速上手Docker")]),e("li",null,[e("a",{href:"https://yeasy.gitbook.io/docker_practice",target:"_blank",rel:"noreferrer"},"Docker — 从入门到实践")])],-1),d=[n,s];function i(l,_,f,h,k,p){return o(),t("div",null,d)}const x=r(c,[["render",i]]);export{m as __pageData,x as default}; diff --git a/assets/favorites_Docker_index.md.a5eb5870.lean.js b/assets/favorites_Docker_index.md.26697292.lean.js similarity index 92% rename from assets/favorites_Docker_index.md.a5eb5870.lean.js rename to assets/favorites_Docker_index.md.26697292.lean.js index 1cb614b4..e4d17eb8 100644 --- a/assets/favorites_Docker_index.md.a5eb5870.lean.js +++ b/assets/favorites_Docker_index.md.26697292.lean.js @@ -1 +1 @@ -import{_ as r,c as t,o,a as e,b as a}from"./app.7354b8c5.js";const m=JSON.parse('{"title":"Docker","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/Docker/index.md"}'),c={name:"favorites/Docker/index.md"},n=e("h1",{id:"docker",tabindex:"-1"},[a("Docker "),e("a",{class:"header-anchor",href:"#docker","aria-hidden":"true"},"#")],-1),s=e("ul",null,[e("li",null,[e("a",{href:"https://docker.easydoc.net/doc/81170005/cCewZWoN/lTKfePfP",target:"_blank",rel:"noreferrer"},"一小时快速上手Docker")]),e("li",null,[e("a",{href:"https://yeasy.gitbook.io/docker_practice",target:"_blank",rel:"noreferrer"},"Docker — 从入门到实践")])],-1),d=[n,s];function i(l,_,f,h,k,p){return o(),t("div",null,d)}const x=r(c,[["render",i]]);export{m as __pageData,x as default}; +import{_ as r,c as t,o,a as e,b as a}from"./app.4a806fb4.js";const m=JSON.parse('{"title":"Docker","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/Docker/index.md"}'),c={name:"favorites/Docker/index.md"},n=e("h1",{id:"docker",tabindex:"-1"},[a("Docker "),e("a",{class:"header-anchor",href:"#docker","aria-hidden":"true"},"#")],-1),s=e("ul",null,[e("li",null,[e("a",{href:"https://docker.easydoc.net/doc/81170005/cCewZWoN/lTKfePfP",target:"_blank",rel:"noreferrer"},"一小时快速上手Docker")]),e("li",null,[e("a",{href:"https://yeasy.gitbook.io/docker_practice",target:"_blank",rel:"noreferrer"},"Docker — 从入门到实践")])],-1),d=[n,s];function i(l,_,f,h,k,p){return o(),t("div",null,d)}const x=r(c,[["render",i]]);export{m as __pageData,x as default}; diff --git a/assets/favorites_Git_index.md.ecef71c4.js b/assets/favorites_Git_index.md.1da721df.js similarity index 95% rename from assets/favorites_Git_index.md.ecef71c4.js rename to assets/favorites_Git_index.md.1da721df.js index 1cfe1a9c..b86445ac 100644 --- a/assets/favorites_Git_index.md.ecef71c4.js +++ b/assets/favorites_Git_index.md.1da721df.js @@ -1 +1 @@ -import{_ as e,c as t,o as r,e as a}from"./app.7354b8c5.js";const g=JSON.parse('{"title":"Git","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/Git/index.md"}'),i={name:"favorites/Git/index.md"},n=a('

Git

',2),o=[n];function l(s,_,c,h,f,p){return r(),t("div",null,o)}const m=e(i,[["render",l]]);export{g as __pageData,m as default}; +import{_ as e,c as t,o as r,e as a}from"./app.4a806fb4.js";const g=JSON.parse('{"title":"Git","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/Git/index.md"}'),i={name:"favorites/Git/index.md"},n=a('

Git

',2),o=[n];function l(s,_,c,h,f,p){return r(),t("div",null,o)}const m=e(i,[["render",l]]);export{g as __pageData,m as default}; diff --git a/assets/favorites_Git_index.md.ecef71c4.lean.js b/assets/favorites_Git_index.md.1da721df.lean.js similarity index 82% rename from assets/favorites_Git_index.md.ecef71c4.lean.js rename to assets/favorites_Git_index.md.1da721df.lean.js index f4965e58..7bec3fdb 100644 --- a/assets/favorites_Git_index.md.ecef71c4.lean.js +++ b/assets/favorites_Git_index.md.1da721df.lean.js @@ -1 +1 @@ -import{_ as e,c as t,o as r,e as a}from"./app.7354b8c5.js";const g=JSON.parse('{"title":"Git","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/Git/index.md"}'),i={name:"favorites/Git/index.md"},n=a("",2),o=[n];function l(s,_,c,h,f,p){return r(),t("div",null,o)}const m=e(i,[["render",l]]);export{g as __pageData,m as default}; +import{_ as e,c as t,o as r,e as a}from"./app.4a806fb4.js";const g=JSON.parse('{"title":"Git","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/Git/index.md"}'),i={name:"favorites/Git/index.md"},n=a("",2),o=[n];function l(s,_,c,h,f,p){return r(),t("div",null,o)}const m=e(i,[["render",l]]);export{g as __pageData,m as default}; diff --git a/assets/favorites_Golang_index.md.349984a5.js b/assets/favorites_Golang_index.md.9b49e96d.js similarity index 96% rename from assets/favorites_Golang_index.md.349984a5.js rename to assets/favorites_Golang_index.md.9b49e96d.js index 93dd3f2d..940ec8f6 100644 --- a/assets/favorites_Golang_index.md.349984a5.js +++ b/assets/favorites_Golang_index.md.9b49e96d.js @@ -1 +1 @@ -import{_ as e,c as a,o as r,e as l}from"./app.7354b8c5.js";const u=JSON.parse('{"title":"Golang","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"教程类","slug":"教程类","link":"#教程类","children":[]},{"level":2,"title":"Blog","slug":"blog","link":"#blog","children":[]},{"level":2,"title":"问题处理","slug":"问题处理","link":"#问题处理","children":[]}],"relativePath":"favorites/Golang/index.md"}'),t={name:"favorites/Golang/index.md"},o=l('

Golang

教程类

Blog

问题处理

',7),n=[o];function i(h,s,d,c,g,_){return r(),a("div",null,n)}const f=e(t,[["render",i]]);export{u as __pageData,f as default}; +import{_ as e,c as a,o as r,e as l}from"./app.4a806fb4.js";const u=JSON.parse('{"title":"Golang","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"教程类","slug":"教程类","link":"#教程类","children":[]},{"level":2,"title":"Blog","slug":"blog","link":"#blog","children":[]},{"level":2,"title":"问题处理","slug":"问题处理","link":"#问题处理","children":[]}],"relativePath":"favorites/Golang/index.md"}'),t={name:"favorites/Golang/index.md"},o=l('

Golang

教程类

Blog

问题处理

',7),n=[o];function i(h,s,d,c,g,_){return r(),a("div",null,n)}const f=e(t,[["render",i]]);export{u as __pageData,f as default}; diff --git a/assets/favorites_Golang_index.md.349984a5.lean.js b/assets/favorites_Golang_index.md.9b49e96d.lean.js similarity index 89% rename from assets/favorites_Golang_index.md.349984a5.lean.js rename to assets/favorites_Golang_index.md.9b49e96d.lean.js index b286a204..b583b8ca 100644 --- a/assets/favorites_Golang_index.md.349984a5.lean.js +++ b/assets/favorites_Golang_index.md.9b49e96d.lean.js @@ -1 +1 @@ -import{_ as e,c as a,o as r,e as l}from"./app.7354b8c5.js";const u=JSON.parse('{"title":"Golang","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"教程类","slug":"教程类","link":"#教程类","children":[]},{"level":2,"title":"Blog","slug":"blog","link":"#blog","children":[]},{"level":2,"title":"问题处理","slug":"问题处理","link":"#问题处理","children":[]}],"relativePath":"favorites/Golang/index.md"}'),t={name:"favorites/Golang/index.md"},o=l("",7),n=[o];function i(h,s,d,c,g,_){return r(),a("div",null,n)}const f=e(t,[["render",i]]);export{u as __pageData,f as default}; +import{_ as e,c as a,o as r,e as l}from"./app.4a806fb4.js";const u=JSON.parse('{"title":"Golang","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"教程类","slug":"教程类","link":"#教程类","children":[]},{"level":2,"title":"Blog","slug":"blog","link":"#blog","children":[]},{"level":2,"title":"问题处理","slug":"问题处理","link":"#问题处理","children":[]}],"relativePath":"favorites/Golang/index.md"}'),t={name:"favorites/Golang/index.md"},o=l("",7),n=[o];function i(h,s,d,c,g,_){return r(),a("div",null,n)}const f=e(t,[["render",i]]);export{u as __pageData,f as default}; diff --git a/assets/favorites_IDE_index.md.5f54bd13.js b/assets/favorites_IDE_index.md.544087e7.js similarity index 89% rename from assets/favorites_IDE_index.md.5f54bd13.js rename to assets/favorites_IDE_index.md.544087e7.js index 1d0fb6b4..6a41f4c9 100644 --- a/assets/favorites_IDE_index.md.5f54bd13.js +++ b/assets/favorites_IDE_index.md.544087e7.js @@ -1 +1 @@ -import{_ as t,c as a,o as r,a as e,b as o}from"./app.7354b8c5.js";const m=JSON.parse('{"title":"IDE","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/IDE/index.md"}'),s={name:"favorites/IDE/index.md"},n=e("h1",{id:"ide",tabindex:"-1"},[o("IDE "),e("a",{class:"header-anchor",href:"#ide","aria-hidden":"true"},"#")],-1),i=e("ul",null,[e("li",null,[e("a",{href:"https://www.exception.site/",target:"_blank",rel:"noreferrer"},"exception.site")])],-1),c=[n,i];function d(l,_,p,h,f,u){return r(),a("div",null,c)}const D=t(s,[["render",d]]);export{m as __pageData,D as default}; +import{_ as t,c as a,o as r,a as e,b as o}from"./app.4a806fb4.js";const m=JSON.parse('{"title":"IDE","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/IDE/index.md"}'),s={name:"favorites/IDE/index.md"},n=e("h1",{id:"ide",tabindex:"-1"},[o("IDE "),e("a",{class:"header-anchor",href:"#ide","aria-hidden":"true"},"#")],-1),i=e("ul",null,[e("li",null,[e("a",{href:"https://www.exception.site/",target:"_blank",rel:"noreferrer"},"exception.site")])],-1),c=[n,i];function d(l,_,p,h,f,u){return r(),a("div",null,c)}const D=t(s,[["render",d]]);export{m as __pageData,D as default}; diff --git a/assets/favorites_IDE_index.md.5f54bd13.lean.js b/assets/favorites_IDE_index.md.544087e7.lean.js similarity index 89% rename from assets/favorites_IDE_index.md.5f54bd13.lean.js rename to assets/favorites_IDE_index.md.544087e7.lean.js index 1d0fb6b4..6a41f4c9 100644 --- a/assets/favorites_IDE_index.md.5f54bd13.lean.js +++ b/assets/favorites_IDE_index.md.544087e7.lean.js @@ -1 +1 @@ -import{_ as t,c as a,o as r,a as e,b as o}from"./app.7354b8c5.js";const m=JSON.parse('{"title":"IDE","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/IDE/index.md"}'),s={name:"favorites/IDE/index.md"},n=e("h1",{id:"ide",tabindex:"-1"},[o("IDE "),e("a",{class:"header-anchor",href:"#ide","aria-hidden":"true"},"#")],-1),i=e("ul",null,[e("li",null,[e("a",{href:"https://www.exception.site/",target:"_blank",rel:"noreferrer"},"exception.site")])],-1),c=[n,i];function d(l,_,p,h,f,u){return r(),a("div",null,c)}const D=t(s,[["render",d]]);export{m as __pageData,D as default}; +import{_ as t,c as a,o as r,a as e,b as o}from"./app.4a806fb4.js";const m=JSON.parse('{"title":"IDE","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/IDE/index.md"}'),s={name:"favorites/IDE/index.md"},n=e("h1",{id:"ide",tabindex:"-1"},[o("IDE "),e("a",{class:"header-anchor",href:"#ide","aria-hidden":"true"},"#")],-1),i=e("ul",null,[e("li",null,[e("a",{href:"https://www.exception.site/",target:"_blank",rel:"noreferrer"},"exception.site")])],-1),c=[n,i];function d(l,_,p,h,f,u){return r(),a("div",null,c)}const D=t(s,[["render",d]]);export{m as __pageData,D as default}; diff --git a/assets/favorites_JavasSript_index.md.78b014a2.js b/assets/favorites_JavasSript_index.md.4b194472.js similarity index 87% rename from assets/favorites_JavasSript_index.md.78b014a2.js rename to assets/favorites_JavasSript_index.md.4b194472.js index cd3c36bf..47546566 100644 --- a/assets/favorites_JavasSript_index.md.78b014a2.js +++ b/assets/favorites_JavasSript_index.md.4b194472.js @@ -1 +1 @@ -import{_ as e,c as t,o as r,a,b as s}from"./app.7354b8c5.js";const m=JSON.parse('{"title":"JavaScript","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/JavasSript/index.md"}'),o={name:"favorites/JavasSript/index.md"},c=a("h1",{id:"javascript",tabindex:"-1"},[s("JavaScript "),a("a",{class:"header-anchor",href:"#javascript","aria-hidden":"true"},"#")],-1),i=[c];function n(d,p,_,f,h,l){return r(),t("div",null,i)}const x=e(o,[["render",n]]);export{m as __pageData,x as default}; +import{_ as e,c as t,o as r,a,b as s}from"./app.4a806fb4.js";const m=JSON.parse('{"title":"JavaScript","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/JavasSript/index.md"}'),o={name:"favorites/JavasSript/index.md"},c=a("h1",{id:"javascript",tabindex:"-1"},[s("JavaScript "),a("a",{class:"header-anchor",href:"#javascript","aria-hidden":"true"},"#")],-1),i=[c];function n(d,p,_,f,h,l){return r(),t("div",null,i)}const x=e(o,[["render",n]]);export{m as __pageData,x as default}; diff --git a/assets/favorites_JavasSript_index.md.78b014a2.lean.js b/assets/favorites_JavasSript_index.md.4b194472.lean.js similarity index 87% rename from assets/favorites_JavasSript_index.md.78b014a2.lean.js rename to assets/favorites_JavasSript_index.md.4b194472.lean.js index cd3c36bf..47546566 100644 --- a/assets/favorites_JavasSript_index.md.78b014a2.lean.js +++ b/assets/favorites_JavasSript_index.md.4b194472.lean.js @@ -1 +1 @@ -import{_ as e,c as t,o as r,a,b as s}from"./app.7354b8c5.js";const m=JSON.parse('{"title":"JavaScript","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/JavasSript/index.md"}'),o={name:"favorites/JavasSript/index.md"},c=a("h1",{id:"javascript",tabindex:"-1"},[s("JavaScript "),a("a",{class:"header-anchor",href:"#javascript","aria-hidden":"true"},"#")],-1),i=[c];function n(d,p,_,f,h,l){return r(),t("div",null,i)}const x=e(o,[["render",n]]);export{m as __pageData,x as default}; +import{_ as e,c as t,o as r,a,b as s}from"./app.4a806fb4.js";const m=JSON.parse('{"title":"JavaScript","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/JavasSript/index.md"}'),o={name:"favorites/JavasSript/index.md"},c=a("h1",{id:"javascript",tabindex:"-1"},[s("JavaScript "),a("a",{class:"header-anchor",href:"#javascript","aria-hidden":"true"},"#")],-1),i=[c];function n(d,p,_,f,h,l){return r(),t("div",null,i)}const x=e(o,[["render",n]]);export{m as __pageData,x as default}; diff --git a/assets/favorites_Linux_index.md.392dcbff.js b/assets/favorites_Linux_index.md.9f5adffa.js similarity index 91% rename from assets/favorites_Linux_index.md.392dcbff.js rename to assets/favorites_Linux_index.md.9f5adffa.js index 8d7f9059..17f034eb 100644 --- a/assets/favorites_Linux_index.md.392dcbff.js +++ b/assets/favorites_Linux_index.md.9f5adffa.js @@ -1 +1 @@ -import{_ as t,c as a,o as n,a as e,b as r}from"./app.7354b8c5.js";const m=JSON.parse('{"title":"Linux","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/Linux/index.md"}'),l={name:"favorites/Linux/index.md"},o=e("h1",{id:"linux",tabindex:"-1"},[r("Linux "),e("a",{class:"header-anchor",href:"#linux","aria-hidden":"true"},"#")],-1),i=e("ul",null,[e("li",null,[e("p",null,[e("a",{href:"https://github.com/jaywcjlove/linux-command",target:"_blank",rel:"noreferrer"},"Linux命令大全搜索工具")])]),e("li",null,[e("p",null,[e("a",{href:"https://explainshell.com/",target:"_blank",rel:"noreferrer"},"explainshell")])])],-1),s=[o,i];function c(d,u,_,h,x,p){return n(),a("div",null,s)}const b=t(l,[["render",c]]);export{m as __pageData,b as default}; +import{_ as t,c as a,o as n,a as e,b as r}from"./app.4a806fb4.js";const m=JSON.parse('{"title":"Linux","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/Linux/index.md"}'),l={name:"favorites/Linux/index.md"},o=e("h1",{id:"linux",tabindex:"-1"},[r("Linux "),e("a",{class:"header-anchor",href:"#linux","aria-hidden":"true"},"#")],-1),i=e("ul",null,[e("li",null,[e("p",null,[e("a",{href:"https://github.com/jaywcjlove/linux-command",target:"_blank",rel:"noreferrer"},"Linux命令大全搜索工具")])]),e("li",null,[e("p",null,[e("a",{href:"https://explainshell.com/",target:"_blank",rel:"noreferrer"},"explainshell")])])],-1),s=[o,i];function c(d,u,_,h,x,p){return n(),a("div",null,s)}const b=t(l,[["render",c]]);export{m as __pageData,b as default}; diff --git a/assets/favorites_Linux_index.md.392dcbff.lean.js b/assets/favorites_Linux_index.md.9f5adffa.lean.js similarity index 91% rename from assets/favorites_Linux_index.md.392dcbff.lean.js rename to assets/favorites_Linux_index.md.9f5adffa.lean.js index 8d7f9059..17f034eb 100644 --- a/assets/favorites_Linux_index.md.392dcbff.lean.js +++ b/assets/favorites_Linux_index.md.9f5adffa.lean.js @@ -1 +1 @@ -import{_ as t,c as a,o as n,a as e,b as r}from"./app.7354b8c5.js";const m=JSON.parse('{"title":"Linux","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/Linux/index.md"}'),l={name:"favorites/Linux/index.md"},o=e("h1",{id:"linux",tabindex:"-1"},[r("Linux "),e("a",{class:"header-anchor",href:"#linux","aria-hidden":"true"},"#")],-1),i=e("ul",null,[e("li",null,[e("p",null,[e("a",{href:"https://github.com/jaywcjlove/linux-command",target:"_blank",rel:"noreferrer"},"Linux命令大全搜索工具")])]),e("li",null,[e("p",null,[e("a",{href:"https://explainshell.com/",target:"_blank",rel:"noreferrer"},"explainshell")])])],-1),s=[o,i];function c(d,u,_,h,x,p){return n(),a("div",null,s)}const b=t(l,[["render",c]]);export{m as __pageData,b as default}; +import{_ as t,c as a,o as n,a as e,b as r}from"./app.4a806fb4.js";const m=JSON.parse('{"title":"Linux","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/Linux/index.md"}'),l={name:"favorites/Linux/index.md"},o=e("h1",{id:"linux",tabindex:"-1"},[r("Linux "),e("a",{class:"header-anchor",href:"#linux","aria-hidden":"true"},"#")],-1),i=e("ul",null,[e("li",null,[e("p",null,[e("a",{href:"https://github.com/jaywcjlove/linux-command",target:"_blank",rel:"noreferrer"},"Linux命令大全搜索工具")])]),e("li",null,[e("p",null,[e("a",{href:"https://explainshell.com/",target:"_blank",rel:"noreferrer"},"explainshell")])])],-1),s=[o,i];function c(d,u,_,h,x,p){return n(),a("div",null,s)}const b=t(l,[["render",c]]);export{m as __pageData,b as default}; diff --git a/assets/favorites_Mac_index.md.7a6f29b7.js b/assets/favorites_Mac_index.md.c2173cbc.js similarity index 92% rename from assets/favorites_Mac_index.md.7a6f29b7.js rename to assets/favorites_Mac_index.md.c2173cbc.js index bd3b3a3f..795fbbd9 100644 --- a/assets/favorites_Mac_index.md.7a6f29b7.js +++ b/assets/favorites_Mac_index.md.c2173cbc.js @@ -1 +1 @@ -import{_ as e,c as a,o as t,e as r}from"./app.7354b8c5.js";const p=JSON.parse('{"title":"Mac","description":"","frontmatter":{},"headers":[],"relativePath":"favorites/Mac/index.md"}'),c={name:"favorites/Mac/index.md"},i=r('

Mac

',2),n=[i];function o(s,_,l,d,h,f){return t(),a("div",null,n)}const u=e(c,[["render",o]]);export{p as __pageData,u as default}; +import{_ as e,c as a,o as t,e as r}from"./app.4a806fb4.js";const p=JSON.parse('{"title":"Mac","description":"","frontmatter":{},"headers":[],"relativePath":"favorites/Mac/index.md"}'),c={name:"favorites/Mac/index.md"},i=r('

Mac

',2),n=[i];function o(s,_,l,d,h,f){return t(),a("div",null,n)}const u=e(c,[["render",o]]);export{p as __pageData,u as default}; diff --git a/assets/favorites_Mac_index.md.7a6f29b7.lean.js b/assets/favorites_Mac_index.md.c2173cbc.lean.js similarity index 81% rename from assets/favorites_Mac_index.md.7a6f29b7.lean.js rename to assets/favorites_Mac_index.md.c2173cbc.lean.js index ff534819..70277510 100644 --- a/assets/favorites_Mac_index.md.7a6f29b7.lean.js +++ b/assets/favorites_Mac_index.md.c2173cbc.lean.js @@ -1 +1 @@ -import{_ as e,c as a,o as t,e as r}from"./app.7354b8c5.js";const p=JSON.parse('{"title":"Mac","description":"","frontmatter":{},"headers":[],"relativePath":"favorites/Mac/index.md"}'),c={name:"favorites/Mac/index.md"},i=r("",2),n=[i];function o(s,_,l,d,h,f){return t(),a("div",null,n)}const u=e(c,[["render",o]]);export{p as __pageData,u as default}; +import{_ as e,c as a,o as t,e as r}from"./app.4a806fb4.js";const p=JSON.parse('{"title":"Mac","description":"","frontmatter":{},"headers":[],"relativePath":"favorites/Mac/index.md"}'),c={name:"favorites/Mac/index.md"},i=r("",2),n=[i];function o(s,_,l,d,h,f){return t(),a("div",null,n)}const u=e(c,[["render",o]]);export{p as __pageData,u as default}; diff --git a/assets/favorites_Mobile_index.md.7d3acc99.js b/assets/favorites_Mobile_index.md.2efd4270.js similarity index 95% rename from assets/favorites_Mobile_index.md.7d3acc99.js rename to assets/favorites_Mobile_index.md.2efd4270.js index eb17bce7..c2d85f19 100644 --- a/assets/favorites_Mobile_index.md.7d3acc99.js +++ b/assets/favorites_Mobile_index.md.2efd4270.js @@ -1 +1 @@ -import{_ as e,c as r,o as t,e as a}from"./app.7354b8c5.js";const u=JSON.parse('{"title":"Mobile Side","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/Mobile/index.md"}'),i={name:"favorites/Mobile/index.md"},o=a('

Mobile Side

',2),l=[o];function n(s,h,_,c,d,p){return t(),r("div",null,l)}const b=e(i,[["render",n]]);export{u as __pageData,b as default}; +import{_ as e,c as r,o as t,e as a}from"./app.4a806fb4.js";const u=JSON.parse('{"title":"Mobile Side","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/Mobile/index.md"}'),i={name:"favorites/Mobile/index.md"},o=a('

Mobile Side

',2),l=[o];function n(s,h,_,c,d,p){return t(),r("div",null,l)}const b=e(i,[["render",n]]);export{u as __pageData,b as default}; diff --git a/assets/favorites_Mobile_index.md.7d3acc99.lean.js b/assets/favorites_Mobile_index.md.2efd4270.lean.js similarity index 83% rename from assets/favorites_Mobile_index.md.7d3acc99.lean.js rename to assets/favorites_Mobile_index.md.2efd4270.lean.js index 80341d7c..d40fe818 100644 --- a/assets/favorites_Mobile_index.md.7d3acc99.lean.js +++ b/assets/favorites_Mobile_index.md.2efd4270.lean.js @@ -1 +1 @@ -import{_ as e,c as r,o as t,e as a}from"./app.7354b8c5.js";const u=JSON.parse('{"title":"Mobile Side","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/Mobile/index.md"}'),i={name:"favorites/Mobile/index.md"},o=a("",2),l=[o];function n(s,h,_,c,d,p){return t(),r("div",null,l)}const b=e(i,[["render",n]]);export{u as __pageData,b as default}; +import{_ as e,c as r,o as t,e as a}from"./app.4a806fb4.js";const u=JSON.parse('{"title":"Mobile Side","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/Mobile/index.md"}'),i={name:"favorites/Mobile/index.md"},o=a("",2),l=[o];function n(s,h,_,c,d,p){return t(),r("div",null,l)}const b=e(i,[["render",n]]);export{u as __pageData,b as default}; diff --git a/assets/favorites_Nginx_index.md.0d0ac958.js b/assets/favorites_Nginx_index.md.3291d3a9.js similarity index 93% rename from assets/favorites_Nginx_index.md.0d0ac958.js rename to assets/favorites_Nginx_index.md.3291d3a9.js index 210056a8..a0aa2a63 100644 --- a/assets/favorites_Nginx_index.md.0d0ac958.js +++ b/assets/favorites_Nginx_index.md.3291d3a9.js @@ -1 +1 @@ -import{_ as e,c as t,o as n,e as r}from"./app.7354b8c5.js";const f=JSON.parse('{"title":"Nginx","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/Nginx/index.md"}'),a={name:"favorites/Nginx/index.md"},i=r('

Nginx

',2),o=[i];function s(_,l,c,d,h,x){return n(),t("div",null,o)}const p=e(a,[["render",s]]);export{f as __pageData,p as default}; +import{_ as e,c as t,o as n,e as r}from"./app.4a806fb4.js";const f=JSON.parse('{"title":"Nginx","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/Nginx/index.md"}'),a={name:"favorites/Nginx/index.md"},i=r('

Nginx

',2),o=[i];function s(_,l,c,d,h,x){return n(),t("div",null,o)}const p=e(a,[["render",s]]);export{f as __pageData,p as default}; diff --git a/assets/favorites_Nginx_index.md.0d0ac958.lean.js b/assets/favorites_Nginx_index.md.3291d3a9.lean.js similarity index 82% rename from assets/favorites_Nginx_index.md.0d0ac958.lean.js rename to assets/favorites_Nginx_index.md.3291d3a9.lean.js index 27003e72..c14044ac 100644 --- a/assets/favorites_Nginx_index.md.0d0ac958.lean.js +++ b/assets/favorites_Nginx_index.md.3291d3a9.lean.js @@ -1 +1 @@ -import{_ as e,c as t,o as n,e as r}from"./app.7354b8c5.js";const f=JSON.parse('{"title":"Nginx","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/Nginx/index.md"}'),a={name:"favorites/Nginx/index.md"},i=r("",2),o=[i];function s(_,l,c,d,h,x){return n(),t("div",null,o)}const p=e(a,[["render",s]]);export{f as __pageData,p as default}; +import{_ as e,c as t,o as n,e as r}from"./app.4a806fb4.js";const f=JSON.parse('{"title":"Nginx","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/Nginx/index.md"}'),a={name:"favorites/Nginx/index.md"},i=r("",2),o=[i];function s(_,l,c,d,h,x){return n(),t("div",null,o)}const p=e(a,[["render",s]]);export{f as __pageData,p as default}; diff --git a/assets/favorites_ProblemSolving_index.md.207eebb7.js b/assets/favorites_ProblemSolving_index.md.31d052cf.js similarity index 92% rename from assets/favorites_ProblemSolving_index.md.207eebb7.js rename to assets/favorites_ProblemSolving_index.md.31d052cf.js index b22e193a..df896cdd 100644 --- a/assets/favorites_ProblemSolving_index.md.207eebb7.js +++ b/assets/favorites_ProblemSolving_index.md.31d052cf.js @@ -1 +1 @@ -import{_ as e,c as a,o as r,e as t}from"./app.7354b8c5.js";const m=JSON.parse('{"title":"Problem Solving","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"PDF","slug":"pdf","link":"#pdf","children":[]}],"relativePath":"favorites/ProblemSolving/index.md"}'),o={name:"favorites/ProblemSolving/index.md"},n=t('

Problem Solving

PDF

',3),i=[n];function l(d,s,_,c,h,p){return r(),a("div",null,i)}const u=e(o,[["render",l]]);export{m as __pageData,u as default}; +import{_ as e,c as a,o as r,e as t}from"./app.4a806fb4.js";const m=JSON.parse('{"title":"Problem Solving","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"PDF","slug":"pdf","link":"#pdf","children":[]}],"relativePath":"favorites/ProblemSolving/index.md"}'),o={name:"favorites/ProblemSolving/index.md"},n=t('

Problem Solving

PDF

',3),i=[n];function l(d,s,_,c,h,p){return r(),a("div",null,i)}const u=e(o,[["render",l]]);export{m as __pageData,u as default}; diff --git a/assets/favorites_ProblemSolving_index.md.207eebb7.lean.js b/assets/favorites_ProblemSolving_index.md.31d052cf.lean.js similarity index 86% rename from assets/favorites_ProblemSolving_index.md.207eebb7.lean.js rename to assets/favorites_ProblemSolving_index.md.31d052cf.lean.js index 2d9e2c2b..b5a4653d 100644 --- a/assets/favorites_ProblemSolving_index.md.207eebb7.lean.js +++ b/assets/favorites_ProblemSolving_index.md.31d052cf.lean.js @@ -1 +1 @@ -import{_ as e,c as a,o as r,e as t}from"./app.7354b8c5.js";const m=JSON.parse('{"title":"Problem Solving","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"PDF","slug":"pdf","link":"#pdf","children":[]}],"relativePath":"favorites/ProblemSolving/index.md"}'),o={name:"favorites/ProblemSolving/index.md"},n=t("",3),i=[n];function l(d,s,_,c,h,p){return r(),a("div",null,i)}const u=e(o,[["render",l]]);export{m as __pageData,u as default}; +import{_ as e,c as a,o as r,e as t}from"./app.4a806fb4.js";const m=JSON.parse('{"title":"Problem Solving","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"PDF","slug":"pdf","link":"#pdf","children":[]}],"relativePath":"favorites/ProblemSolving/index.md"}'),o={name:"favorites/ProblemSolving/index.md"},n=t("",3),i=[n];function l(d,s,_,c,h,p){return r(),a("div",null,i)}const u=e(o,[["render",l]]);export{m as __pageData,u as default}; diff --git a/assets/favorites_React_index.md.aebf8954.js b/assets/favorites_React_index.md.b931891e.js similarity index 90% rename from assets/favorites_React_index.md.aebf8954.js rename to assets/favorites_React_index.md.b931891e.js index 170b036f..8229a1bf 100644 --- a/assets/favorites_React_index.md.aebf8954.js +++ b/assets/favorites_React_index.md.b931891e.js @@ -1 +1 @@ -import{_ as t,c as a,o as r,a as e,b as o}from"./app.7354b8c5.js";const x=JSON.parse('{"title":"React","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/React/index.md"}'),c={name:"favorites/React/index.md"},n=e("h1",{id:"react",tabindex:"-1"},[o("React "),e("a",{class:"header-anchor",href:"#react","aria-hidden":"true"},"#")],-1),s=e("ul",null,[e("li",null,[e("a",{href:"https://www.framer.com/motion/",target:"_blank",rel:"noreferrer"},"A production-ready motion library for React")])],-1),i=[n,s];function d(l,_,f,h,p,m){return r(),a("div",null,i)}const R=t(c,[["render",d]]);export{x as __pageData,R as default}; +import{_ as t,c as a,o as r,a as e,b as o}from"./app.4a806fb4.js";const x=JSON.parse('{"title":"React","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/React/index.md"}'),c={name:"favorites/React/index.md"},n=e("h1",{id:"react",tabindex:"-1"},[o("React "),e("a",{class:"header-anchor",href:"#react","aria-hidden":"true"},"#")],-1),s=e("ul",null,[e("li",null,[e("a",{href:"https://www.framer.com/motion/",target:"_blank",rel:"noreferrer"},"A production-ready motion library for React")])],-1),i=[n,s];function d(l,_,f,h,p,m){return r(),a("div",null,i)}const R=t(c,[["render",d]]);export{x as __pageData,R as default}; diff --git a/assets/favorites_React_index.md.aebf8954.lean.js b/assets/favorites_React_index.md.b931891e.lean.js similarity index 90% rename from assets/favorites_React_index.md.aebf8954.lean.js rename to assets/favorites_React_index.md.b931891e.lean.js index 170b036f..8229a1bf 100644 --- a/assets/favorites_React_index.md.aebf8954.lean.js +++ b/assets/favorites_React_index.md.b931891e.lean.js @@ -1 +1 @@ -import{_ as t,c as a,o as r,a as e,b as o}from"./app.7354b8c5.js";const x=JSON.parse('{"title":"React","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/React/index.md"}'),c={name:"favorites/React/index.md"},n=e("h1",{id:"react",tabindex:"-1"},[o("React "),e("a",{class:"header-anchor",href:"#react","aria-hidden":"true"},"#")],-1),s=e("ul",null,[e("li",null,[e("a",{href:"https://www.framer.com/motion/",target:"_blank",rel:"noreferrer"},"A production-ready motion library for React")])],-1),i=[n,s];function d(l,_,f,h,p,m){return r(),a("div",null,i)}const R=t(c,[["render",d]]);export{x as __pageData,R as default}; +import{_ as t,c as a,o as r,a as e,b as o}from"./app.4a806fb4.js";const x=JSON.parse('{"title":"React","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/React/index.md"}'),c={name:"favorites/React/index.md"},n=e("h1",{id:"react",tabindex:"-1"},[o("React "),e("a",{class:"header-anchor",href:"#react","aria-hidden":"true"},"#")],-1),s=e("ul",null,[e("li",null,[e("a",{href:"https://www.framer.com/motion/",target:"_blank",rel:"noreferrer"},"A production-ready motion library for React")])],-1),i=[n,s];function d(l,_,f,h,p,m){return r(),a("div",null,i)}const R=t(c,[["render",d]]);export{x as __pageData,R as default}; diff --git a/assets/favorites_Typescript_index.md.a5d46b22.js b/assets/favorites_Typescript_index.md.c3245407.js similarity index 88% rename from assets/favorites_Typescript_index.md.a5d46b22.js rename to assets/favorites_Typescript_index.md.c3245407.js index 4ee37151..6691a606 100644 --- a/assets/favorites_Typescript_index.md.a5d46b22.js +++ b/assets/favorites_Typescript_index.md.c3245407.js @@ -1 +1 @@ -import{_ as t,c as a,o as s,a as e,b as r}from"./app.7354b8c5.js";const x=JSON.parse('{"title":"Typescript","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/Typescript/index.md"}'),o={name:"favorites/Typescript/index.md"},c=e("h1",{id:"typescript",tabindex:"-1"},[r("Typescript "),e("a",{class:"header-anchor",href:"#typescript","aria-hidden":"true"},"#")],-1),i=e("ul",null,[e("li")],-1),n=[c,i];function d(p,_,l,h,f,u){return s(),a("div",null,n)}const y=t(o,[["render",d]]);export{x as __pageData,y as default}; +import{_ as t,c as a,o as s,a as e,b as r}from"./app.4a806fb4.js";const x=JSON.parse('{"title":"Typescript","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/Typescript/index.md"}'),o={name:"favorites/Typescript/index.md"},c=e("h1",{id:"typescript",tabindex:"-1"},[r("Typescript "),e("a",{class:"header-anchor",href:"#typescript","aria-hidden":"true"},"#")],-1),i=e("ul",null,[e("li")],-1),n=[c,i];function d(p,_,l,h,f,u){return s(),a("div",null,n)}const y=t(o,[["render",d]]);export{x as __pageData,y as default}; diff --git a/assets/favorites_Typescript_index.md.a5d46b22.lean.js b/assets/favorites_Typescript_index.md.c3245407.lean.js similarity index 88% rename from assets/favorites_Typescript_index.md.a5d46b22.lean.js rename to assets/favorites_Typescript_index.md.c3245407.lean.js index 4ee37151..6691a606 100644 --- a/assets/favorites_Typescript_index.md.a5d46b22.lean.js +++ b/assets/favorites_Typescript_index.md.c3245407.lean.js @@ -1 +1 @@ -import{_ as t,c as a,o as s,a as e,b as r}from"./app.7354b8c5.js";const x=JSON.parse('{"title":"Typescript","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/Typescript/index.md"}'),o={name:"favorites/Typescript/index.md"},c=e("h1",{id:"typescript",tabindex:"-1"},[r("Typescript "),e("a",{class:"header-anchor",href:"#typescript","aria-hidden":"true"},"#")],-1),i=e("ul",null,[e("li")],-1),n=[c,i];function d(p,_,l,h,f,u){return s(),a("div",null,n)}const y=t(o,[["render",d]]);export{x as __pageData,y as default}; +import{_ as t,c as a,o as s,a as e,b as r}from"./app.4a806fb4.js";const x=JSON.parse('{"title":"Typescript","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/Typescript/index.md"}'),o={name:"favorites/Typescript/index.md"},c=e("h1",{id:"typescript",tabindex:"-1"},[r("Typescript "),e("a",{class:"header-anchor",href:"#typescript","aria-hidden":"true"},"#")],-1),i=e("ul",null,[e("li")],-1),n=[c,i];function d(p,_,l,h,f,u){return s(),a("div",null,n)}const y=t(o,[["render",d]]);export{x as __pageData,y as default}; diff --git "a/assets/favorites_UI\350\256\276\350\256\241\347\201\265\346\204\237_index.md.e1b0abe1.js" "b/assets/favorites_UI\350\256\276\350\256\241\347\201\265\346\204\237_index.md.54b71597.js" similarity index 90% rename from "assets/favorites_UI\350\256\276\350\256\241\347\201\265\346\204\237_index.md.e1b0abe1.js" rename to "assets/favorites_UI\350\256\276\350\256\241\347\201\265\346\204\237_index.md.54b71597.js" index 2e25863e..999ffeb7 100644 --- "a/assets/favorites_UI\350\256\276\350\256\241\347\201\265\346\204\237_index.md.e1b0abe1.js" +++ "b/assets/favorites_UI\350\256\276\350\256\241\347\201\265\346\204\237_index.md.54b71597.js" @@ -1 +1 @@ -import{_ as t,c as a,o,a as e,b as r}from"./app.7354b8c5.js";const x=JSON.parse('{"title":"UI设计灵感","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/UI设计灵感/index.md"}'),s={name:"favorites/UI设计灵感/index.md"},n=e("h1",{id:"ui设计灵感",tabindex:"-1"},[r("UI设计灵感 "),e("a",{class:"header-anchor",href:"#ui设计灵感","aria-hidden":"true"},"#")],-1),i=e("ul",null,[e("li",null,[e("a",{href:"https://uinotes.com/",target:"_blank",rel:"noreferrer"},"uinotes")])],-1),c=[n,i];function d(l,_,u,h,f,p){return o(),a("div",null,c)}const v=t(s,[["render",d]]);export{x as __pageData,v as default}; +import{_ as t,c as a,o,a as e,b as r}from"./app.4a806fb4.js";const x=JSON.parse('{"title":"UI设计灵感","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/UI设计灵感/index.md"}'),s={name:"favorites/UI设计灵感/index.md"},n=e("h1",{id:"ui设计灵感",tabindex:"-1"},[r("UI设计灵感 "),e("a",{class:"header-anchor",href:"#ui设计灵感","aria-hidden":"true"},"#")],-1),i=e("ul",null,[e("li",null,[e("a",{href:"https://uinotes.com/",target:"_blank",rel:"noreferrer"},"uinotes")])],-1),c=[n,i];function d(l,_,u,h,f,p){return o(),a("div",null,c)}const v=t(s,[["render",d]]);export{x as __pageData,v as default}; diff --git "a/assets/favorites_UI\350\256\276\350\256\241\347\201\265\346\204\237_index.md.e1b0abe1.lean.js" "b/assets/favorites_UI\350\256\276\350\256\241\347\201\265\346\204\237_index.md.54b71597.lean.js" similarity index 90% rename from "assets/favorites_UI\350\256\276\350\256\241\347\201\265\346\204\237_index.md.e1b0abe1.lean.js" rename to "assets/favorites_UI\350\256\276\350\256\241\347\201\265\346\204\237_index.md.54b71597.lean.js" index 2e25863e..999ffeb7 100644 --- "a/assets/favorites_UI\350\256\276\350\256\241\347\201\265\346\204\237_index.md.e1b0abe1.lean.js" +++ "b/assets/favorites_UI\350\256\276\350\256\241\347\201\265\346\204\237_index.md.54b71597.lean.js" @@ -1 +1 @@ -import{_ as t,c as a,o,a as e,b as r}from"./app.7354b8c5.js";const x=JSON.parse('{"title":"UI设计灵感","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/UI设计灵感/index.md"}'),s={name:"favorites/UI设计灵感/index.md"},n=e("h1",{id:"ui设计灵感",tabindex:"-1"},[r("UI设计灵感 "),e("a",{class:"header-anchor",href:"#ui设计灵感","aria-hidden":"true"},"#")],-1),i=e("ul",null,[e("li",null,[e("a",{href:"https://uinotes.com/",target:"_blank",rel:"noreferrer"},"uinotes")])],-1),c=[n,i];function d(l,_,u,h,f,p){return o(),a("div",null,c)}const v=t(s,[["render",d]]);export{x as __pageData,v as default}; +import{_ as t,c as a,o,a as e,b as r}from"./app.4a806fb4.js";const x=JSON.parse('{"title":"UI设计灵感","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/UI设计灵感/index.md"}'),s={name:"favorites/UI设计灵感/index.md"},n=e("h1",{id:"ui设计灵感",tabindex:"-1"},[r("UI设计灵感 "),e("a",{class:"header-anchor",href:"#ui设计灵感","aria-hidden":"true"},"#")],-1),i=e("ul",null,[e("li",null,[e("a",{href:"https://uinotes.com/",target:"_blank",rel:"noreferrer"},"uinotes")])],-1),c=[n,i];function d(l,_,u,h,f,p){return o(),a("div",null,c)}const v=t(s,[["render",d]]);export{x as __pageData,v as default}; diff --git a/assets/favorites_Vue_index.md.b7b9c892.js b/assets/favorites_Vue_index.md.5c09f787.js similarity index 86% rename from assets/favorites_Vue_index.md.b7b9c892.js rename to assets/favorites_Vue_index.md.5c09f787.js index bc0f885c..63e8f1ac 100644 --- a/assets/favorites_Vue_index.md.b7b9c892.js +++ b/assets/favorites_Vue_index.md.5c09f787.js @@ -1 +1 @@ -import{_ as t,c as a,o,a as e,b as r}from"./app.7354b8c5.js";const m=JSON.parse('{"title":"Vue","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/Vue/index.md"}'),s={name:"favorites/Vue/index.md"},n=e("h1",{id:"vue",tabindex:"-1"},[r("Vue "),e("a",{class:"header-anchor",href:"#vue","aria-hidden":"true"},"#")],-1),c=[n];function d(i,_,u,p,f,h){return o(),a("div",null,c)}const x=t(s,[["render",d]]);export{m as __pageData,x as default}; +import{_ as t,c as a,o,a as e,b as r}from"./app.4a806fb4.js";const m=JSON.parse('{"title":"Vue","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/Vue/index.md"}'),s={name:"favorites/Vue/index.md"},n=e("h1",{id:"vue",tabindex:"-1"},[r("Vue "),e("a",{class:"header-anchor",href:"#vue","aria-hidden":"true"},"#")],-1),c=[n];function d(i,_,u,p,f,h){return o(),a("div",null,c)}const x=t(s,[["render",d]]);export{m as __pageData,x as default}; diff --git a/assets/favorites_Vue_index.md.b7b9c892.lean.js b/assets/favorites_Vue_index.md.5c09f787.lean.js similarity index 86% rename from assets/favorites_Vue_index.md.b7b9c892.lean.js rename to assets/favorites_Vue_index.md.5c09f787.lean.js index bc0f885c..63e8f1ac 100644 --- a/assets/favorites_Vue_index.md.b7b9c892.lean.js +++ b/assets/favorites_Vue_index.md.5c09f787.lean.js @@ -1 +1 @@ -import{_ as t,c as a,o,a as e,b as r}from"./app.7354b8c5.js";const m=JSON.parse('{"title":"Vue","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/Vue/index.md"}'),s={name:"favorites/Vue/index.md"},n=e("h1",{id:"vue",tabindex:"-1"},[r("Vue "),e("a",{class:"header-anchor",href:"#vue","aria-hidden":"true"},"#")],-1),c=[n];function d(i,_,u,p,f,h){return o(),a("div",null,c)}const x=t(s,[["render",d]]);export{m as __pageData,x as default}; +import{_ as t,c as a,o,a as e,b as r}from"./app.4a806fb4.js";const m=JSON.parse('{"title":"Vue","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/Vue/index.md"}'),s={name:"favorites/Vue/index.md"},n=e("h1",{id:"vue",tabindex:"-1"},[r("Vue "),e("a",{class:"header-anchor",href:"#vue","aria-hidden":"true"},"#")],-1),c=[n];function d(i,_,u,p,f,h){return o(),a("div",null,c)}const x=t(s,[["render",d]]);export{m as __pageData,x as default}; diff --git "a/assets/favorites_\345\205\266\344\273\226_index.md.76a64e72.js" "b/assets/favorites_\345\205\266\344\273\226_index.md.bf268dfb.js" similarity index 97% rename from "assets/favorites_\345\205\266\344\273\226_index.md.76a64e72.js" rename to "assets/favorites_\345\205\266\344\273\226_index.md.bf268dfb.js" index 6dde8406..a8b56b9d 100644 --- "a/assets/favorites_\345\205\266\344\273\226_index.md.76a64e72.js" +++ "b/assets/favorites_\345\205\266\344\273\226_index.md.bf268dfb.js" @@ -1 +1 @@ -import{_ as e,c as r,o as t,e as a}from"./app.7354b8c5.js";const _=JSON.parse('{"title":"其他","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"tools","slug":"tools","link":"#tools","children":[]},{"level":2,"title":"fonts","slug":"fonts","link":"#fonts","children":[]},{"level":2,"title":"Internet Related","slug":"internet-related","link":"#internet-related","children":[]},{"level":2,"title":"Resource","slug":"resource","link":"#resource","children":[]}],"relativePath":"favorites/其他/index.md"}'),l={name:"favorites/其他/index.md"},n=a('

其他

tools

fonts

Resource

',9),o=[n];function i(s,h,d,c,f,p){return t(),r("div",null,o)}const g=e(l,[["render",i]]);export{_ as __pageData,g as default}; +import{_ as e,c as r,o as t,e as a}from"./app.4a806fb4.js";const _=JSON.parse('{"title":"其他","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"tools","slug":"tools","link":"#tools","children":[]},{"level":2,"title":"fonts","slug":"fonts","link":"#fonts","children":[]},{"level":2,"title":"Internet Related","slug":"internet-related","link":"#internet-related","children":[]},{"level":2,"title":"Resource","slug":"resource","link":"#resource","children":[]}],"relativePath":"favorites/其他/index.md"}'),l={name:"favorites/其他/index.md"},n=a('

其他

tools

fonts

Resource

',9),o=[n];function i(s,h,d,c,f,p){return t(),r("div",null,o)}const g=e(l,[["render",i]]);export{_ as __pageData,g as default}; diff --git "a/assets/favorites_\345\205\266\344\273\226_index.md.76a64e72.lean.js" "b/assets/favorites_\345\205\266\344\273\226_index.md.bf268dfb.lean.js" similarity index 90% rename from "assets/favorites_\345\205\266\344\273\226_index.md.76a64e72.lean.js" rename to "assets/favorites_\345\205\266\344\273\226_index.md.bf268dfb.lean.js" index b3ef0031..652eba02 100644 --- "a/assets/favorites_\345\205\266\344\273\226_index.md.76a64e72.lean.js" +++ "b/assets/favorites_\345\205\266\344\273\226_index.md.bf268dfb.lean.js" @@ -1 +1 @@ -import{_ as e,c as r,o as t,e as a}from"./app.7354b8c5.js";const _=JSON.parse('{"title":"其他","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"tools","slug":"tools","link":"#tools","children":[]},{"level":2,"title":"fonts","slug":"fonts","link":"#fonts","children":[]},{"level":2,"title":"Internet Related","slug":"internet-related","link":"#internet-related","children":[]},{"level":2,"title":"Resource","slug":"resource","link":"#resource","children":[]}],"relativePath":"favorites/其他/index.md"}'),l={name:"favorites/其他/index.md"},n=a("",9),o=[n];function i(s,h,d,c,f,p){return t(),r("div",null,o)}const g=e(l,[["render",i]]);export{_ as __pageData,g as default}; +import{_ as e,c as r,o as t,e as a}from"./app.4a806fb4.js";const _=JSON.parse('{"title":"其他","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"tools","slug":"tools","link":"#tools","children":[]},{"level":2,"title":"fonts","slug":"fonts","link":"#fonts","children":[]},{"level":2,"title":"Internet Related","slug":"internet-related","link":"#internet-related","children":[]},{"level":2,"title":"Resource","slug":"resource","link":"#resource","children":[]}],"relativePath":"favorites/其他/index.md"}'),l={name:"favorites/其他/index.md"},n=a("",9),o=[n];function i(s,h,d,c,f,p){return t(),r("div",null,o)}const g=e(l,[["render",i]]);export{_ as __pageData,g as default}; diff --git "a/assets/favorites_\347\256\227\346\263\225_index.md.d24390a6.js" "b/assets/favorites_\347\256\227\346\263\225_index.md.c7607dd6.js" similarity index 92% rename from "assets/favorites_\347\256\227\346\263\225_index.md.d24390a6.js" rename to "assets/favorites_\347\256\227\346\263\225_index.md.c7607dd6.js" index ce4955f8..b17e0dd8 100644 --- "a/assets/favorites_\347\256\227\346\263\225_index.md.d24390a6.js" +++ "b/assets/favorites_\347\256\227\346\263\225_index.md.c7607dd6.js" @@ -1 +1 @@ -import{_ as t,c as r,o as a,a as e,b as o}from"./app.7354b8c5.js";const x=JSON.parse('{"title":"算法","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/算法/index.md"}'),n={name:"favorites/算法/index.md"},s=e("h1",{id:"算法",tabindex:"-1"},[o("算法 "),e("a",{class:"header-anchor",href:"#算法","aria-hidden":"true"},"#")],-1),l=e("ul",null,[e("li",null,[e("p",null,[e("a",{href:"https://github.com/krahets/hello-algo",target:"_blank",rel:"noreferrer"},"动画图解、一键运行的数据结构与算法教程")])]),e("li",null,[e("p",null,[e("a",{href:"https://programmercarl.com/",target:"_blank",rel:"noreferrer"},"代码随想录")])])],-1),c=[s,l];function i(d,_,h,p,f,u){return a(),r("div",null,c)}const g=t(n,[["render",i]]);export{x as __pageData,g as default}; +import{_ as t,c as r,o as a,a as e,b as o}from"./app.4a806fb4.js";const x=JSON.parse('{"title":"算法","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/算法/index.md"}'),n={name:"favorites/算法/index.md"},s=e("h1",{id:"算法",tabindex:"-1"},[o("算法 "),e("a",{class:"header-anchor",href:"#算法","aria-hidden":"true"},"#")],-1),l=e("ul",null,[e("li",null,[e("p",null,[e("a",{href:"https://github.com/krahets/hello-algo",target:"_blank",rel:"noreferrer"},"动画图解、一键运行的数据结构与算法教程")])]),e("li",null,[e("p",null,[e("a",{href:"https://programmercarl.com/",target:"_blank",rel:"noreferrer"},"代码随想录")])])],-1),c=[s,l];function i(d,_,h,p,f,u){return a(),r("div",null,c)}const g=t(n,[["render",i]]);export{x as __pageData,g as default}; diff --git "a/assets/favorites_\347\256\227\346\263\225_index.md.d24390a6.lean.js" "b/assets/favorites_\347\256\227\346\263\225_index.md.c7607dd6.lean.js" similarity index 92% rename from "assets/favorites_\347\256\227\346\263\225_index.md.d24390a6.lean.js" rename to "assets/favorites_\347\256\227\346\263\225_index.md.c7607dd6.lean.js" index ce4955f8..b17e0dd8 100644 --- "a/assets/favorites_\347\256\227\346\263\225_index.md.d24390a6.lean.js" +++ "b/assets/favorites_\347\256\227\346\263\225_index.md.c7607dd6.lean.js" @@ -1 +1 @@ -import{_ as t,c as r,o as a,a as e,b as o}from"./app.7354b8c5.js";const x=JSON.parse('{"title":"算法","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/算法/index.md"}'),n={name:"favorites/算法/index.md"},s=e("h1",{id:"算法",tabindex:"-1"},[o("算法 "),e("a",{class:"header-anchor",href:"#算法","aria-hidden":"true"},"#")],-1),l=e("ul",null,[e("li",null,[e("p",null,[e("a",{href:"https://github.com/krahets/hello-algo",target:"_blank",rel:"noreferrer"},"动画图解、一键运行的数据结构与算法教程")])]),e("li",null,[e("p",null,[e("a",{href:"https://programmercarl.com/",target:"_blank",rel:"noreferrer"},"代码随想录")])])],-1),c=[s,l];function i(d,_,h,p,f,u){return a(),r("div",null,c)}const g=t(n,[["render",i]]);export{x as __pageData,g as default}; +import{_ as t,c as r,o as a,a as e,b as o}from"./app.4a806fb4.js";const x=JSON.parse('{"title":"算法","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"favorites/算法/index.md"}'),n={name:"favorites/算法/index.md"},s=e("h1",{id:"算法",tabindex:"-1"},[o("算法 "),e("a",{class:"header-anchor",href:"#算法","aria-hidden":"true"},"#")],-1),l=e("ul",null,[e("li",null,[e("p",null,[e("a",{href:"https://github.com/krahets/hello-algo",target:"_blank",rel:"noreferrer"},"动画图解、一键运行的数据结构与算法教程")])]),e("li",null,[e("p",null,[e("a",{href:"https://programmercarl.com/",target:"_blank",rel:"noreferrer"},"代码随想录")])])],-1),c=[s,l];function i(d,_,h,p,f,u){return a(),r("div",null,c)}const g=t(n,[["render",i]]);export{x as __pageData,g as default}; diff --git "a/assets/hand-notes_CSS_CSS\345\256\236\347\216\260\346\226\207\345\255\227\346\270\220\345\217\230.md.64d22e67.js" "b/assets/hand-notes_CSS_CSS\345\256\236\347\216\260\346\226\207\345\255\227\346\270\220\345\217\230.md.641219fe.js" similarity index 98% rename from "assets/hand-notes_CSS_CSS\345\256\236\347\216\260\346\226\207\345\255\227\346\270\220\345\217\230.md.64d22e67.js" rename to "assets/hand-notes_CSS_CSS\345\256\236\347\216\260\346\226\207\345\255\227\346\270\220\345\217\230.md.641219fe.js" index d8271e6b..3fca68c7 100644 --- "a/assets/hand-notes_CSS_CSS\345\256\236\347\216\260\346\226\207\345\255\227\346\270\220\345\217\230.md.64d22e67.js" +++ "b/assets/hand-notes_CSS_CSS\345\256\236\347\216\260\346\226\207\345\255\227\346\270\220\345\217\230.md.641219fe.js" @@ -1,4 +1,4 @@ -import{_ as s,c as a,o as e,e as n}from"./app.7354b8c5.js";const F=JSON.parse('{"title":"CSS实现文字渐变","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"代码展示","slug":"代码展示","link":"#代码展示","children":[]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[{"level":3,"title":"效果预览","slug":"效果预览","link":"#效果预览","children":[]},{"level":3,"title":"查看代码","slug":"查看代码","link":"#查看代码","children":[]}]}],"relativePath":"hand-notes/CSS/CSS实现文字渐变.md"}'),l={name:"hand-notes/CSS/CSS实现文字渐变.md"},o=n(`

CSS实现文字渐变

代码展示

  • 关于linear-gradient更多用法详见这里
  • 关于background-clip更多用法详见这里
css
.gradient-text {
+import{_ as s,c as a,o as e,e as n}from"./app.4a806fb4.js";const F=JSON.parse('{"title":"CSS实现文字渐变","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"代码展示","slug":"代码展示","link":"#代码展示","children":[]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[{"level":3,"title":"效果预览","slug":"效果预览","link":"#效果预览","children":[]},{"level":3,"title":"查看代码","slug":"查看代码","link":"#查看代码","children":[]}]}],"relativePath":"hand-notes/CSS/CSS实现文字渐变.md"}'),l={name:"hand-notes/CSS/CSS实现文字渐变.md"},o=n(`

CSS实现文字渐变

代码展示

  • 关于linear-gradient更多用法详见这里
  • 关于background-clip更多用法详见这里
css
.gradient-text {
   background: linear-gradient(to right, blue 20%, red 50%, #FFFFFF);
   width: max-content;
   color: transparent;
diff --git "a/assets/hand-notes_CSS_CSS\345\256\236\347\216\260\346\226\207\345\255\227\346\270\220\345\217\230.md.64d22e67.lean.js" "b/assets/hand-notes_CSS_CSS\345\256\236\347\216\260\346\226\207\345\255\227\346\270\220\345\217\230.md.641219fe.lean.js"
similarity index 91%
rename from "assets/hand-notes_CSS_CSS\345\256\236\347\216\260\346\226\207\345\255\227\346\270\220\345\217\230.md.64d22e67.lean.js"
rename to "assets/hand-notes_CSS_CSS\345\256\236\347\216\260\346\226\207\345\255\227\346\270\220\345\217\230.md.641219fe.lean.js"
index 78526788..dcde700e 100644
--- "a/assets/hand-notes_CSS_CSS\345\256\236\347\216\260\346\226\207\345\255\227\346\270\220\345\217\230.md.64d22e67.lean.js"
+++ "b/assets/hand-notes_CSS_CSS\345\256\236\347\216\260\346\226\207\345\255\227\346\270\220\345\217\230.md.641219fe.lean.js"
@@ -1 +1 @@
-import{_ as s,c as a,o as e,e as n}from"./app.7354b8c5.js";const F=JSON.parse('{"title":"CSS实现文字渐变","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"代码展示","slug":"代码展示","link":"#代码展示","children":[]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[{"level":3,"title":"效果预览","slug":"效果预览","link":"#效果预览","children":[]},{"level":3,"title":"查看代码","slug":"查看代码","link":"#查看代码","children":[]}]}],"relativePath":"hand-notes/CSS/CSS实现文字渐变.md"}'),l={name:"hand-notes/CSS/CSS实现文字渐变.md"},o=n("",9),t=[o];function r(p,c,i,d,C,D){return e(),a("div",null,t)}const y=s(l,[["render",r]]);export{F as __pageData,y as default};
+import{_ as s,c as a,o as e,e as n}from"./app.4a806fb4.js";const F=JSON.parse('{"title":"CSS实现文字渐变","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"代码展示","slug":"代码展示","link":"#代码展示","children":[]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[{"level":3,"title":"效果预览","slug":"效果预览","link":"#效果预览","children":[]},{"level":3,"title":"查看代码","slug":"查看代码","link":"#查看代码","children":[]}]}],"relativePath":"hand-notes/CSS/CSS实现文字渐变.md"}'),l={name:"hand-notes/CSS/CSS实现文字渐变.md"},o=n("",9),t=[o];function r(p,c,i,d,C,D){return e(),a("div",null,t)}const y=s(l,[["render",r]]);export{F as __pageData,y as default};
diff --git "a/assets/hand-notes_CSS_CSS\345\256\236\347\216\260\347\252\201\345\207\272\344\270\215\345\220\214\351\242\234\350\211\262\347\232\204\345\234\206\350\247\222.md.060cbe39.js" "b/assets/hand-notes_CSS_CSS\345\256\236\347\216\260\347\252\201\345\207\272\344\270\215\345\220\214\351\242\234\350\211\262\347\232\204\345\234\206\350\247\222.md.cfbe08e2.js"
similarity index 99%
rename from "assets/hand-notes_CSS_CSS\345\256\236\347\216\260\347\252\201\345\207\272\344\270\215\345\220\214\351\242\234\350\211\262\347\232\204\345\234\206\350\247\222.md.060cbe39.js"
rename to "assets/hand-notes_CSS_CSS\345\256\236\347\216\260\347\252\201\345\207\272\344\270\215\345\220\214\351\242\234\350\211\262\347\232\204\345\234\206\350\247\222.md.cfbe08e2.js"
index 6302fc44..4450cd2c 100644
--- "a/assets/hand-notes_CSS_CSS\345\256\236\347\216\260\347\252\201\345\207\272\344\270\215\345\220\214\351\242\234\350\211\262\347\232\204\345\234\206\350\247\222.md.060cbe39.js"
+++ "b/assets/hand-notes_CSS_CSS\345\256\236\347\216\260\347\252\201\345\207\272\344\270\215\345\220\214\351\242\234\350\211\262\347\232\204\345\234\206\350\247\222.md.cfbe08e2.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const A=JSON.parse('{"title":"CSS实现突出不同颜色的圆角","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"代码展示","slug":"代码展示","link":"#代码展示","children":[]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[{"level":3,"title":"效果预览","slug":"效果预览","link":"#效果预览","children":[]},{"level":3,"title":"查看代码","slug":"查看代码","link":"#查看代码","children":[]}]}],"relativePath":"hand-notes/CSS/CSS实现突出不同颜色的圆角.md"}'),p={name:"hand-notes/CSS/CSS实现突出不同颜色的圆角.md"},o=l(`

CSS实现突出不同颜色的圆角

代码展示

html

html
<!DOCTYPE html>
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const A=JSON.parse('{"title":"CSS实现突出不同颜色的圆角","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"代码展示","slug":"代码展示","link":"#代码展示","children":[]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[{"level":3,"title":"效果预览","slug":"效果预览","link":"#效果预览","children":[]},{"level":3,"title":"查看代码","slug":"查看代码","link":"#查看代码","children":[]}]}],"relativePath":"hand-notes/CSS/CSS实现突出不同颜色的圆角.md"}'),p={name:"hand-notes/CSS/CSS实现突出不同颜色的圆角.md"},o=l(`

CSS实现突出不同颜色的圆角

代码展示

html

html
<!DOCTYPE html>
 <html lang="en">
 <head>
   <meta charset="UTF-8">
diff --git "a/assets/hand-notes_CSS_CSS\345\256\236\347\216\260\347\252\201\345\207\272\344\270\215\345\220\214\351\242\234\350\211\262\347\232\204\345\234\206\350\247\222.md.060cbe39.lean.js" "b/assets/hand-notes_CSS_CSS\345\256\236\347\216\260\347\252\201\345\207\272\344\270\215\345\220\214\351\242\234\350\211\262\347\232\204\345\234\206\350\247\222.md.cfbe08e2.lean.js"
similarity index 92%
rename from "assets/hand-notes_CSS_CSS\345\256\236\347\216\260\347\252\201\345\207\272\344\270\215\345\220\214\351\242\234\350\211\262\347\232\204\345\234\206\350\247\222.md.060cbe39.lean.js"
rename to "assets/hand-notes_CSS_CSS\345\256\236\347\216\260\347\252\201\345\207\272\344\270\215\345\220\214\351\242\234\350\211\262\347\232\204\345\234\206\350\247\222.md.cfbe08e2.lean.js"
index 2e0f121e..1d7ac655 100644
--- "a/assets/hand-notes_CSS_CSS\345\256\236\347\216\260\347\252\201\345\207\272\344\270\215\345\220\214\351\242\234\350\211\262\347\232\204\345\234\206\350\247\222.md.060cbe39.lean.js"
+++ "b/assets/hand-notes_CSS_CSS\345\256\236\347\216\260\347\252\201\345\207\272\344\270\215\345\220\214\351\242\234\350\211\262\347\232\204\345\234\206\350\247\222.md.cfbe08e2.lean.js"
@@ -1 +1 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const A=JSON.parse('{"title":"CSS实现突出不同颜色的圆角","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"代码展示","slug":"代码展示","link":"#代码展示","children":[]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[{"level":3,"title":"效果预览","slug":"效果预览","link":"#效果预览","children":[]},{"level":3,"title":"查看代码","slug":"查看代码","link":"#查看代码","children":[]}]}],"relativePath":"hand-notes/CSS/CSS实现突出不同颜色的圆角.md"}'),p={name:"hand-notes/CSS/CSS实现突出不同颜色的圆角.md"},o=l("",11),e=[o];function t(c,r,D,F,y,C){return n(),a("div",null,e)}const d=s(p,[["render",t]]);export{A as __pageData,d as default};
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const A=JSON.parse('{"title":"CSS实现突出不同颜色的圆角","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"代码展示","slug":"代码展示","link":"#代码展示","children":[]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[{"level":3,"title":"效果预览","slug":"效果预览","link":"#效果预览","children":[]},{"level":3,"title":"查看代码","slug":"查看代码","link":"#查看代码","children":[]}]}],"relativePath":"hand-notes/CSS/CSS实现突出不同颜色的圆角.md"}'),p={name:"hand-notes/CSS/CSS实现突出不同颜色的圆角.md"},o=l("",11),e=[o];function t(c,r,D,F,y,C){return n(),a("div",null,e)}const d=s(p,[["render",t]]);export{A as __pageData,d as default};
diff --git "a/assets/hand-notes_CSS_CSS\345\256\236\347\216\260\347\261\273\344\274\274\345\276\256\344\277\241\345\244\264\345\203\217\346\225\210\346\236\234.md.256cc0b5.js" "b/assets/hand-notes_CSS_CSS\345\256\236\347\216\260\347\261\273\344\274\274\345\276\256\344\277\241\345\244\264\345\203\217\346\225\210\346\236\234.md.dcf074cc.js"
similarity index 99%
rename from "assets/hand-notes_CSS_CSS\345\256\236\347\216\260\347\261\273\344\274\274\345\276\256\344\277\241\345\244\264\345\203\217\346\225\210\346\236\234.md.256cc0b5.js"
rename to "assets/hand-notes_CSS_CSS\345\256\236\347\216\260\347\261\273\344\274\274\345\276\256\344\277\241\345\244\264\345\203\217\346\225\210\346\236\234.md.dcf074cc.js"
index 25947d19..535f7d2d 100644
--- "a/assets/hand-notes_CSS_CSS\345\256\236\347\216\260\347\261\273\344\274\274\345\276\256\344\277\241\345\244\264\345\203\217\346\225\210\346\236\234.md.256cc0b5.js"
+++ "b/assets/hand-notes_CSS_CSS\345\256\236\347\216\260\347\261\273\344\274\274\345\276\256\344\277\241\345\244\264\345\203\217\346\225\210\346\236\234.md.dcf074cc.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const p="/static-blog/image/css/wechat_avatar.gif",d=JSON.parse('{"title":"CSS实现类似微信头像效果","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"用到的知识点","slug":"用到的知识点","link":"#用到的知识点","children":[{"level":3,"title":":only-child","slug":"only-child","link":"#only-child","children":[]},{"level":3,"title":":first-child","slug":"first-child","link":"#first-child","children":[]},{"level":3,"title":"~一般兄弟组合器","slug":"一般兄弟组合器","link":"#一般兄弟组合器","children":[]}]},{"level":2,"title":"代码实现","slug":"代码实现","link":"#代码实现","children":[]},{"level":2,"title":"效果预览","slug":"效果预览","link":"#效果预览","children":[]}],"relativePath":"hand-notes/CSS/CSS实现类似微信头像效果.md"}'),o={name:"hand-notes/CSS/CSS实现类似微信头像效果.md"},e=l(`

CSS实现类似微信头像效果

工作中可能会遇到实现类似于微信群聊头像自适应的效果,可以借助flex来实现

用到的知识点

:only-child

  • :only-child伪类表示没有任何兄弟元素的元素

  • 该伪类与:first-child:last-child:nth-child(1):nth-last-child(1)相同,但是:only-child权重小

:first-child

  • :first-child伪类表示一组兄弟元素中的第一个元素

一般兄弟组合器

语法: A ~ B

例如:p ~ span 表示同一父元素下,p元素后面的所有span元素

TIP

  • .avatar-img:first-child:nth-last-child(2) 表示该元素既是第一个元素,也是倒数第二个元素,表明当前总共有2个类名为.avatar-img的元素

代码实现

html

html
<!doctype html>
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const p="/static-blog/image/css/wechat_avatar.gif",d=JSON.parse('{"title":"CSS实现类似微信头像效果","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"用到的知识点","slug":"用到的知识点","link":"#用到的知识点","children":[{"level":3,"title":":only-child","slug":"only-child","link":"#only-child","children":[]},{"level":3,"title":":first-child","slug":"first-child","link":"#first-child","children":[]},{"level":3,"title":"~一般兄弟组合器","slug":"一般兄弟组合器","link":"#一般兄弟组合器","children":[]}]},{"level":2,"title":"代码实现","slug":"代码实现","link":"#代码实现","children":[]},{"level":2,"title":"效果预览","slug":"效果预览","link":"#效果预览","children":[]}],"relativePath":"hand-notes/CSS/CSS实现类似微信头像效果.md"}'),o={name:"hand-notes/CSS/CSS实现类似微信头像效果.md"},e=l(`

CSS实现类似微信头像效果

工作中可能会遇到实现类似于微信群聊头像自适应的效果,可以借助flex来实现

用到的知识点

:only-child

  • :only-child伪类表示没有任何兄弟元素的元素

  • 该伪类与:first-child:last-child:nth-child(1):nth-last-child(1)相同,但是:only-child权重小

:first-child

  • :first-child伪类表示一组兄弟元素中的第一个元素

一般兄弟组合器

语法: A ~ B

例如:p ~ span 表示同一父元素下,p元素后面的所有span元素

TIP

  • .avatar-img:first-child:nth-last-child(2) 表示该元素既是第一个元素,也是倒数第二个元素,表明当前总共有2个类名为.avatar-img的元素

代码实现

html

html
<!doctype html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
diff --git "a/assets/hand-notes_CSS_CSS\345\256\236\347\216\260\347\261\273\344\274\274\345\276\256\344\277\241\345\244\264\345\203\217\346\225\210\346\236\234.md.256cc0b5.lean.js" "b/assets/hand-notes_CSS_CSS\345\256\236\347\216\260\347\261\273\344\274\274\345\276\256\344\277\241\345\244\264\345\203\217\346\225\210\346\236\234.md.dcf074cc.lean.js"
similarity index 94%
rename from "assets/hand-notes_CSS_CSS\345\256\236\347\216\260\347\261\273\344\274\274\345\276\256\344\277\241\345\244\264\345\203\217\346\225\210\346\236\234.md.256cc0b5.lean.js"
rename to "assets/hand-notes_CSS_CSS\345\256\236\347\216\260\347\261\273\344\274\274\345\276\256\344\277\241\345\244\264\345\203\217\346\225\210\346\236\234.md.dcf074cc.lean.js"
index edf8a53b..f24bd622 100644
--- "a/assets/hand-notes_CSS_CSS\345\256\236\347\216\260\347\261\273\344\274\274\345\276\256\344\277\241\345\244\264\345\203\217\346\225\210\346\236\234.md.256cc0b5.lean.js"
+++ "b/assets/hand-notes_CSS_CSS\345\256\236\347\216\260\347\261\273\344\274\274\345\276\256\344\277\241\345\244\264\345\203\217\346\225\210\346\236\234.md.dcf074cc.lean.js"
@@ -1 +1 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const p="/static-blog/image/css/wechat_avatar.gif",d=JSON.parse('{"title":"CSS实现类似微信头像效果","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"用到的知识点","slug":"用到的知识点","link":"#用到的知识点","children":[{"level":3,"title":":only-child","slug":"only-child","link":"#only-child","children":[]},{"level":3,"title":":first-child","slug":"first-child","link":"#first-child","children":[]},{"level":3,"title":"~一般兄弟组合器","slug":"一般兄弟组合器","link":"#一般兄弟组合器","children":[]}]},{"level":2,"title":"代码实现","slug":"代码实现","link":"#代码实现","children":[]},{"level":2,"title":"效果预览","slug":"效果预览","link":"#效果预览","children":[]}],"relativePath":"hand-notes/CSS/CSS实现类似微信头像效果.md"}'),o={name:"hand-notes/CSS/CSS实现类似微信头像效果.md"},e=l("",19),t=[e];function c(r,D,F,y,C,i){return n(),a("div",null,t)}const h=s(o,[["render",c]]);export{d as __pageData,h as default};
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const p="/static-blog/image/css/wechat_avatar.gif",d=JSON.parse('{"title":"CSS实现类似微信头像效果","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"用到的知识点","slug":"用到的知识点","link":"#用到的知识点","children":[{"level":3,"title":":only-child","slug":"only-child","link":"#only-child","children":[]},{"level":3,"title":":first-child","slug":"first-child","link":"#first-child","children":[]},{"level":3,"title":"~一般兄弟组合器","slug":"一般兄弟组合器","link":"#一般兄弟组合器","children":[]}]},{"level":2,"title":"代码实现","slug":"代码实现","link":"#代码实现","children":[]},{"level":2,"title":"效果预览","slug":"效果预览","link":"#效果预览","children":[]}],"relativePath":"hand-notes/CSS/CSS实现类似微信头像效果.md"}'),o={name:"hand-notes/CSS/CSS实现类似微信头像效果.md"},e=l("",19),t=[e];function c(r,D,F,y,C,i){return n(),a("div",null,t)}const h=s(o,[["render",c]]);export{d as __pageData,h as default};
diff --git "a/assets/hand-notes_CSS_CSS\346\250\241\346\213\237\346\225\260\345\255\227loading.md.928c88c1.js" "b/assets/hand-notes_CSS_CSS\346\250\241\346\213\237\346\225\260\345\255\227loading.md.30f2b579.js"
similarity index 99%
rename from "assets/hand-notes_CSS_CSS\346\250\241\346\213\237\346\225\260\345\255\227loading.md.928c88c1.js"
rename to "assets/hand-notes_CSS_CSS\346\250\241\346\213\237\346\225\260\345\255\227loading.md.30f2b579.js"
index d02d5987..41c50e78 100644
--- "a/assets/hand-notes_CSS_CSS\346\250\241\346\213\237\346\225\260\345\255\227loading.md.928c88c1.js"
+++ "b/assets/hand-notes_CSS_CSS\346\250\241\346\213\237\346\225\260\345\255\227loading.md.30f2b579.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const p="/static-blog/image/css/houdini-1.png",d=JSON.parse('{"title":"CSS模拟数字loading","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"实现方案","slug":"实现方案","link":"#实现方案","children":[]},{"level":2,"title":"CSS Houdini @proerty","slug":"css-houdini-proerty","link":"#css-houdini-proerty","children":[]},{"level":2,"title":"倒计时demo","slug":"倒计时demo","link":"#倒计时demo","children":[]},{"level":2,"title":"文字loading","slug":"文字loading","link":"#文字loading","children":[]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[{"level":3,"title":"兼容性","slug":"兼容性","link":"#兼容性","children":[]},{"level":3,"title":"效果预览","slug":"效果预览","link":"#效果预览","children":[]},{"level":3,"title":"相关代码","slug":"相关代码","link":"#相关代码","children":[]}]}],"relativePath":"hand-notes/CSS/CSS模拟数字loading.md"}'),o={name:"hand-notes/CSS/CSS模拟数字loading.md"},e=l(`

CSS模拟数字loading

实现方案

  • 使用css计数器展示进度数字

  • 使用CSS Houdini中的@property自定义css属性,并且可以在动画中修改该属性的值

CSS Houdini @proerty

@proerty可以让我们自定义一些CSS属性,然后在样式中使用,使用方法和displayfont-size等这些相同

TIP

  • 自定义属性的命名和CSS变量相似,要以--开头,比如@property --aaa {}

CSS Houdini中的@property语法如下:

css
@property --property-name {
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const p="/static-blog/image/css/houdini-1.png",d=JSON.parse('{"title":"CSS模拟数字loading","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"实现方案","slug":"实现方案","link":"#实现方案","children":[]},{"level":2,"title":"CSS Houdini @proerty","slug":"css-houdini-proerty","link":"#css-houdini-proerty","children":[]},{"level":2,"title":"倒计时demo","slug":"倒计时demo","link":"#倒计时demo","children":[]},{"level":2,"title":"文字loading","slug":"文字loading","link":"#文字loading","children":[]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[{"level":3,"title":"兼容性","slug":"兼容性","link":"#兼容性","children":[]},{"level":3,"title":"效果预览","slug":"效果预览","link":"#效果预览","children":[]},{"level":3,"title":"相关代码","slug":"相关代码","link":"#相关代码","children":[]}]}],"relativePath":"hand-notes/CSS/CSS模拟数字loading.md"}'),o={name:"hand-notes/CSS/CSS模拟数字loading.md"},e=l(`

CSS模拟数字loading

实现方案

  • 使用css计数器展示进度数字

  • 使用CSS Houdini中的@property自定义css属性,并且可以在动画中修改该属性的值

CSS Houdini @proerty

@proerty可以让我们自定义一些CSS属性,然后在样式中使用,使用方法和displayfont-size等这些相同

TIP

  • 自定义属性的命名和CSS变量相似,要以--开头,比如@property --aaa {}

CSS Houdini中的@property语法如下:

css
@property --property-name {
   syntax: "<color>";
   inherits: false;
   initial-value: #c0ffee;
diff --git "a/assets/hand-notes_CSS_CSS\346\250\241\346\213\237\346\225\260\345\255\227loading.md.928c88c1.lean.js" "b/assets/hand-notes_CSS_CSS\346\250\241\346\213\237\346\225\260\345\255\227loading.md.30f2b579.lean.js"
similarity index 94%
rename from "assets/hand-notes_CSS_CSS\346\250\241\346\213\237\346\225\260\345\255\227loading.md.928c88c1.lean.js"
rename to "assets/hand-notes_CSS_CSS\346\250\241\346\213\237\346\225\260\345\255\227loading.md.30f2b579.lean.js"
index dcca19cb..e6e59f7a 100644
--- "a/assets/hand-notes_CSS_CSS\346\250\241\346\213\237\346\225\260\345\255\227loading.md.928c88c1.lean.js"
+++ "b/assets/hand-notes_CSS_CSS\346\250\241\346\213\237\346\225\260\345\255\227loading.md.30f2b579.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const p="/static-blog/image/css/houdini-1.png",d=JSON.parse('{"title":"CSS模拟数字loading","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"实现方案","slug":"实现方案","link":"#实现方案","children":[]},{"level":2,"title":"CSS Houdini @proerty","slug":"css-houdini-proerty","link":"#css-houdini-proerty","children":[]},{"level":2,"title":"倒计时demo","slug":"倒计时demo","link":"#倒计时demo","children":[]},{"level":2,"title":"文字loading","slug":"文字loading","link":"#文字loading","children":[]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[{"level":3,"title":"兼容性","slug":"兼容性","link":"#兼容性","children":[]},{"level":3,"title":"效果预览","slug":"效果预览","link":"#效果预览","children":[]},{"level":3,"title":"相关代码","slug":"相关代码","link":"#相关代码","children":[]}]}],"relativePath":"hand-notes/CSS/CSS模拟数字loading.md"}'),o={name:"hand-notes/CSS/CSS模拟数字loading.md"},e=l("",28),t=[e];function c(r,D,F,y,i,C){return a(),n("div",null,t)}const u=s(o,[["render",c]]);export{d as __pageData,u as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const p="/static-blog/image/css/houdini-1.png",d=JSON.parse('{"title":"CSS模拟数字loading","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"实现方案","slug":"实现方案","link":"#实现方案","children":[]},{"level":2,"title":"CSS Houdini @proerty","slug":"css-houdini-proerty","link":"#css-houdini-proerty","children":[]},{"level":2,"title":"倒计时demo","slug":"倒计时demo","link":"#倒计时demo","children":[]},{"level":2,"title":"文字loading","slug":"文字loading","link":"#文字loading","children":[]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[{"level":3,"title":"兼容性","slug":"兼容性","link":"#兼容性","children":[]},{"level":3,"title":"效果预览","slug":"效果预览","link":"#效果预览","children":[]},{"level":3,"title":"相关代码","slug":"相关代码","link":"#相关代码","children":[]}]}],"relativePath":"hand-notes/CSS/CSS模拟数字loading.md"}'),o={name:"hand-notes/CSS/CSS模拟数字loading.md"},e=l("",28),t=[e];function c(r,D,F,y,i,C){return a(),n("div",null,t)}const u=s(o,[["render",c]]);export{d as __pageData,u as default};
diff --git "a/assets/hand-notes_CSS_CSS\350\256\241\346\225\260\345\231\250-counter.md.19b4b21f.js" "b/assets/hand-notes_CSS_CSS\350\256\241\346\225\260\345\231\250-counter.md.5edc732a.js"
similarity index 99%
rename from "assets/hand-notes_CSS_CSS\350\256\241\346\225\260\345\231\250-counter.md.19b4b21f.js"
rename to "assets/hand-notes_CSS_CSS\350\256\241\346\225\260\345\231\250-counter.md.5edc732a.js"
index 3b6e80a5..0c284448 100644
--- "a/assets/hand-notes_CSS_CSS\350\256\241\346\225\260\345\231\250-counter.md.19b4b21f.js"
+++ "b/assets/hand-notes_CSS_CSS\350\256\241\346\225\260\345\231\250-counter.md.5edc732a.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const o="/static-blog/image/css/counter-1.png",p="/static-blog/image/css/counter-2.png",e="/static-blog/image/css/counter-3.png",g=JSON.parse('{"title":"CSS计数器-counter","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"counter-reset","slug":"counter-reset","link":"#counter-reset","children":[]},{"level":2,"title":"counter-increment","slug":"counter-increment","link":"#counter-increment","children":[]},{"level":2,"title":"counter()/counters()","slug":"counter-counters","link":"#counter-counters","children":[{"level":3,"title":"counter","slug":"counter","link":"#counter","children":[]},{"level":3,"title":"counters","slug":"counters","link":"#counters","children":[]}]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[{"level":3,"title":"效果预览","slug":"效果预览","link":"#效果预览","children":[]},{"level":3,"title":"相关代码","slug":"相关代码","link":"#相关代码","children":[]}]}],"relativePath":"hand-notes/CSS/CSS计数器-counter.md"}'),t={name:"hand-notes/CSS/CSS计数器-counter.md"},c=l(`

CSS计数器-counter

CSS计数器一般和伪元素content属性一起使用,有几个关键的属性

counter-reset

为计数器命名,并设置计数器的初始值,如果没设置,初始值默认是0

counter-reset的值可以是负数,但是不支持小数(Chrome Version 118.0.5993.117 (Official Build) (arm64)),小数都会被处理为0

css
.counter-box {
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const o="/static-blog/image/css/counter-1.png",p="/static-blog/image/css/counter-2.png",e="/static-blog/image/css/counter-3.png",g=JSON.parse('{"title":"CSS计数器-counter","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"counter-reset","slug":"counter-reset","link":"#counter-reset","children":[]},{"level":2,"title":"counter-increment","slug":"counter-increment","link":"#counter-increment","children":[]},{"level":2,"title":"counter()/counters()","slug":"counter-counters","link":"#counter-counters","children":[{"level":3,"title":"counter","slug":"counter","link":"#counter","children":[]},{"level":3,"title":"counters","slug":"counters","link":"#counters","children":[]}]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[{"level":3,"title":"效果预览","slug":"效果预览","link":"#效果预览","children":[]},{"level":3,"title":"相关代码","slug":"相关代码","link":"#相关代码","children":[]}]}],"relativePath":"hand-notes/CSS/CSS计数器-counter.md"}'),t={name:"hand-notes/CSS/CSS计数器-counter.md"},c=l(`

CSS计数器-counter

CSS计数器一般和伪元素content属性一起使用,有几个关键的属性

counter-reset

为计数器命名,并设置计数器的初始值,如果没设置,初始值默认是0

counter-reset的值可以是负数,但是不支持小数(Chrome Version 118.0.5993.117 (Official Build) (arm64)),小数都会被处理为0

css
.counter-box {
     counter-reset: box-count; // 设置计数器名称为 box-count,为设置默认值,默认值为0
 }
 
diff --git "a/assets/hand-notes_CSS_CSS\350\256\241\346\225\260\345\231\250-counter.md.19b4b21f.lean.js" "b/assets/hand-notes_CSS_CSS\350\256\241\346\225\260\345\231\250-counter.md.5edc732a.lean.js"
similarity index 94%
rename from "assets/hand-notes_CSS_CSS\350\256\241\346\225\260\345\231\250-counter.md.19b4b21f.lean.js"
rename to "assets/hand-notes_CSS_CSS\350\256\241\346\225\260\345\231\250-counter.md.5edc732a.lean.js"
index 30250511..4af91747 100644
--- "a/assets/hand-notes_CSS_CSS\350\256\241\346\225\260\345\231\250-counter.md.19b4b21f.lean.js"
+++ "b/assets/hand-notes_CSS_CSS\350\256\241\346\225\260\345\231\250-counter.md.5edc732a.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const o="/static-blog/image/css/counter-1.png",p="/static-blog/image/css/counter-2.png",e="/static-blog/image/css/counter-3.png",g=JSON.parse('{"title":"CSS计数器-counter","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"counter-reset","slug":"counter-reset","link":"#counter-reset","children":[]},{"level":2,"title":"counter-increment","slug":"counter-increment","link":"#counter-increment","children":[]},{"level":2,"title":"counter()/counters()","slug":"counter-counters","link":"#counter-counters","children":[{"level":3,"title":"counter","slug":"counter","link":"#counter","children":[]},{"level":3,"title":"counters","slug":"counters","link":"#counters","children":[]}]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[{"level":3,"title":"效果预览","slug":"效果预览","link":"#效果预览","children":[]},{"level":3,"title":"相关代码","slug":"相关代码","link":"#相关代码","children":[]}]}],"relativePath":"hand-notes/CSS/CSS计数器-counter.md"}'),t={name:"hand-notes/CSS/CSS计数器-counter.md"},c=l("",45),r=[c];function D(F,y,i,C,A,u){return a(),n("div",null,r)}const h=s(t,[["render",D]]);export{g as __pageData,h as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const o="/static-blog/image/css/counter-1.png",p="/static-blog/image/css/counter-2.png",e="/static-blog/image/css/counter-3.png",g=JSON.parse('{"title":"CSS计数器-counter","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"counter-reset","slug":"counter-reset","link":"#counter-reset","children":[]},{"level":2,"title":"counter-increment","slug":"counter-increment","link":"#counter-increment","children":[]},{"level":2,"title":"counter()/counters()","slug":"counter-counters","link":"#counter-counters","children":[{"level":3,"title":"counter","slug":"counter","link":"#counter","children":[]},{"level":3,"title":"counters","slug":"counters","link":"#counters","children":[]}]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[{"level":3,"title":"效果预览","slug":"效果预览","link":"#效果预览","children":[]},{"level":3,"title":"相关代码","slug":"相关代码","link":"#相关代码","children":[]}]}],"relativePath":"hand-notes/CSS/CSS计数器-counter.md"}'),t={name:"hand-notes/CSS/CSS计数器-counter.md"},c=l("",45),r=[c];function D(F,y,i,C,A,u){return a(),n("div",null,r)}const h=s(t,[["render",D]]);export{g as __pageData,h as default};
diff --git "a/assets/hand-notes_CSS_\345\233\276\347\211\207\345\212\240\350\275\275\345\207\272\351\224\231\346\240\267\345\274\217\350\256\276\347\275\256.md.8af14403.js" "b/assets/hand-notes_CSS_\345\233\276\347\211\207\345\212\240\350\275\275\345\207\272\351\224\231\346\240\267\345\274\217\350\256\276\347\275\256.md.b622c02a.js"
similarity index 99%
rename from "assets/hand-notes_CSS_\345\233\276\347\211\207\345\212\240\350\275\275\345\207\272\351\224\231\346\240\267\345\274\217\350\256\276\347\275\256.md.8af14403.js"
rename to "assets/hand-notes_CSS_\345\233\276\347\211\207\345\212\240\350\275\275\345\207\272\351\224\231\346\240\267\345\274\217\350\256\276\347\275\256.md.b622c02a.js"
index 6a7c4f05..abbc2556 100644
--- "a/assets/hand-notes_CSS_\345\233\276\347\211\207\345\212\240\350\275\275\345\207\272\351\224\231\346\240\267\345\274\217\350\256\276\347\275\256.md.8af14403.js"
+++ "b/assets/hand-notes_CSS_\345\233\276\347\211\207\345\212\240\350\275\275\345\207\272\351\224\231\346\240\267\345\274\217\350\256\276\347\275\256.md.b622c02a.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"图片加载出错样式设置","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"代码展示","slug":"代码展示","link":"#代码展示","children":[]},{"level":2,"title":"效果预览","slug":"效果预览","link":"#效果预览","children":[]}],"relativePath":"hand-notes/CSS/图片加载出错样式设置.md"}'),p={name:"hand-notes/CSS/图片加载出错样式设置.md"},o=l(`

图片加载出错样式设置

TIP

冷知识:图片加载出错时,为img元素设置的伪元素::before/::after会生效,图片正常加载时,不会生效

代码展示

html代码

html
<!doctype html>
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"图片加载出错样式设置","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"代码展示","slug":"代码展示","link":"#代码展示","children":[]},{"level":2,"title":"效果预览","slug":"效果预览","link":"#效果预览","children":[]}],"relativePath":"hand-notes/CSS/图片加载出错样式设置.md"}'),p={name:"hand-notes/CSS/图片加载出错样式设置.md"},o=l(`

图片加载出错样式设置

TIP

冷知识:图片加载出错时,为img元素设置的伪元素::before/::after会生效,图片正常加载时,不会生效

代码展示

html代码

html
<!doctype html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
diff --git "a/assets/hand-notes_CSS_\345\233\276\347\211\207\345\212\240\350\275\275\345\207\272\351\224\231\346\240\267\345\274\217\350\256\276\347\275\256.md.8af14403.lean.js" "b/assets/hand-notes_CSS_\345\233\276\347\211\207\345\212\240\350\275\275\345\207\272\351\224\231\346\240\267\345\274\217\350\256\276\347\275\256.md.b622c02a.lean.js"
similarity index 89%
rename from "assets/hand-notes_CSS_\345\233\276\347\211\207\345\212\240\350\275\275\345\207\272\351\224\231\346\240\267\345\274\217\350\256\276\347\275\256.md.8af14403.lean.js"
rename to "assets/hand-notes_CSS_\345\233\276\347\211\207\345\212\240\350\275\275\345\207\272\351\224\231\346\240\267\345\274\217\350\256\276\347\275\256.md.b622c02a.lean.js"
index 996c43c0..80de521a 100644
--- "a/assets/hand-notes_CSS_\345\233\276\347\211\207\345\212\240\350\275\275\345\207\272\351\224\231\346\240\267\345\274\217\350\256\276\347\275\256.md.8af14403.lean.js"
+++ "b/assets/hand-notes_CSS_\345\233\276\347\211\207\345\212\240\350\275\275\345\207\272\351\224\231\346\240\267\345\274\217\350\256\276\347\275\256.md.b622c02a.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"图片加载出错样式设置","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"代码展示","slug":"代码展示","link":"#代码展示","children":[]},{"level":2,"title":"效果预览","slug":"效果预览","link":"#效果预览","children":[]}],"relativePath":"hand-notes/CSS/图片加载出错样式设置.md"}'),p={name:"hand-notes/CSS/图片加载出错样式设置.md"},o=l("",9),e=[o];function t(c,D,r,F,y,C){return a(),n("div",null,e)}const d=s(p,[["render",t]]);export{i as __pageData,d as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"图片加载出错样式设置","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"代码展示","slug":"代码展示","link":"#代码展示","children":[]},{"level":2,"title":"效果预览","slug":"效果预览","link":"#效果预览","children":[]}],"relativePath":"hand-notes/CSS/图片加载出错样式设置.md"}'),p={name:"hand-notes/CSS/图片加载出错样式设置.md"},o=l("",9),e=[o];function t(c,D,r,F,y,C){return a(),n("div",null,e)}const d=s(p,[["render",t]]);export{i as __pageData,d as default};
diff --git "a/assets/hand-notes_CSS_\345\256\236\347\216\260\351\253\230\345\272\246\350\277\207\346\270\241.md.66bf8c45.js" "b/assets/hand-notes_CSS_\345\256\236\347\216\260\351\253\230\345\272\246\350\277\207\346\270\241.md.eae928a7.js"
similarity index 99%
rename from "assets/hand-notes_CSS_\345\256\236\347\216\260\351\253\230\345\272\246\350\277\207\346\270\241.md.66bf8c45.js"
rename to "assets/hand-notes_CSS_\345\256\236\347\216\260\351\253\230\345\272\246\350\277\207\346\270\241.md.eae928a7.js"
index 0129d899..1d0c5af1 100644
--- "a/assets/hand-notes_CSS_\345\256\236\347\216\260\351\253\230\345\272\246\350\277\207\346\270\241.md.66bf8c45.js"
+++ "b/assets/hand-notes_CSS_\345\256\236\347\216\260\351\253\230\345\272\246\350\277\207\346\270\241.md.eae928a7.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const p="/static-blog/image/css/transition-height-1.gif",o="/static-blog/image/css/transition-height-2.gif",e="/static-blog/image/css/transition-height-3.gif",t="/static-blog/image/css/transition-height-4.gif",u=JSON.parse('{"title":"实现高度过渡","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"max-height","slug":"max-height","link":"#max-height","children":[]},{"level":2,"title":"scale","slug":"scale","link":"#scale","children":[]},{"level":2,"title":"grid","slug":"grid","link":"#grid","children":[]},{"level":2,"title":"使用js+css来实现","slug":"使用js-css来实现","link":"#使用js-css来实现","children":[]}],"relativePath":"hand-notes/CSS/实现高度过渡.md"}'),c={name:"hand-notes/CSS/实现高度过渡.md"},r=l(`

实现高度过渡

在工作中有时候会遇到点击实现Collapse折叠效果,而折叠的元素高度可能不固定的,使用height: 0height: auto的方法是行不通的,因为一个值从数字变为非数字是不能使用过渡效果的,要实现该效果可使用其他方法。

html
<div id="root">
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const p="/static-blog/image/css/transition-height-1.gif",o="/static-blog/image/css/transition-height-2.gif",e="/static-blog/image/css/transition-height-3.gif",t="/static-blog/image/css/transition-height-4.gif",u=JSON.parse('{"title":"实现高度过渡","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"max-height","slug":"max-height","link":"#max-height","children":[]},{"level":2,"title":"scale","slug":"scale","link":"#scale","children":[]},{"level":2,"title":"grid","slug":"grid","link":"#grid","children":[]},{"level":2,"title":"使用js+css来实现","slug":"使用js-css来实现","link":"#使用js-css来实现","children":[]}],"relativePath":"hand-notes/CSS/实现高度过渡.md"}'),c={name:"hand-notes/CSS/实现高度过渡.md"},r=l(`

实现高度过渡

在工作中有时候会遇到点击实现Collapse折叠效果,而折叠的元素高度可能不固定的,使用height: 0height: auto的方法是行不通的,因为一个值从数字变为非数字是不能使用过渡效果的,要实现该效果可使用其他方法。

html
<div id="root">
     <h1>元素高度过渡效果(通过max-height实现)</h1>
     <button class="btn">hover me</button>
     <div class="parent">
diff --git "a/assets/hand-notes_CSS_\345\256\236\347\216\260\351\253\230\345\272\246\350\277\207\346\270\241.md.66bf8c45.lean.js" "b/assets/hand-notes_CSS_\345\256\236\347\216\260\351\253\230\345\272\246\350\277\207\346\270\241.md.eae928a7.lean.js"
similarity index 93%
rename from "assets/hand-notes_CSS_\345\256\236\347\216\260\351\253\230\345\272\246\350\277\207\346\270\241.md.66bf8c45.lean.js"
rename to "assets/hand-notes_CSS_\345\256\236\347\216\260\351\253\230\345\272\246\350\277\207\346\270\241.md.eae928a7.lean.js"
index 15bfeea8..2fad4ffa 100644
--- "a/assets/hand-notes_CSS_\345\256\236\347\216\260\351\253\230\345\272\246\350\277\207\346\270\241.md.66bf8c45.lean.js"
+++ "b/assets/hand-notes_CSS_\345\256\236\347\216\260\351\253\230\345\272\246\350\277\207\346\270\241.md.eae928a7.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const p="/static-blog/image/css/transition-height-1.gif",o="/static-blog/image/css/transition-height-2.gif",e="/static-blog/image/css/transition-height-3.gif",t="/static-blog/image/css/transition-height-4.gif",u=JSON.parse('{"title":"实现高度过渡","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"max-height","slug":"max-height","link":"#max-height","children":[]},{"level":2,"title":"scale","slug":"scale","link":"#scale","children":[]},{"level":2,"title":"grid","slug":"grid","link":"#grid","children":[]},{"level":2,"title":"使用js+css来实现","slug":"使用js-css来实现","link":"#使用js-css来实现","children":[]}],"relativePath":"hand-notes/CSS/实现高度过渡.md"}'),c={name:"hand-notes/CSS/实现高度过渡.md"},r=l("",32),D=[r];function F(y,C,i,A,d,h){return a(),n("div",null,D)}const m=s(c,[["render",F]]);export{u as __pageData,m as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const p="/static-blog/image/css/transition-height-1.gif",o="/static-blog/image/css/transition-height-2.gif",e="/static-blog/image/css/transition-height-3.gif",t="/static-blog/image/css/transition-height-4.gif",u=JSON.parse('{"title":"实现高度过渡","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"max-height","slug":"max-height","link":"#max-height","children":[]},{"level":2,"title":"scale","slug":"scale","link":"#scale","children":[]},{"level":2,"title":"grid","slug":"grid","link":"#grid","children":[]},{"level":2,"title":"使用js+css来实现","slug":"使用js-css来实现","link":"#使用js-css来实现","children":[]}],"relativePath":"hand-notes/CSS/实现高度过渡.md"}'),c={name:"hand-notes/CSS/实现高度过渡.md"},r=l("",32),D=[r];function F(y,C,i,A,d,h){return a(),n("div",null,D)}const m=s(c,[["render",F]]);export{u as __pageData,m as default};
diff --git "a/assets/hand-notes_CSS_\350\231\232\347\272\277\350\276\271\346\241\206.md.b4a171ef.js" "b/assets/hand-notes_CSS_\350\231\232\347\272\277\350\276\271\346\241\206.md.a129fd01.js"
similarity index 98%
rename from "assets/hand-notes_CSS_\350\231\232\347\272\277\350\276\271\346\241\206.md.b4a171ef.js"
rename to "assets/hand-notes_CSS_\350\231\232\347\272\277\350\276\271\346\241\206.md.a129fd01.js"
index 70e9bc10..0d5074dc 100644
--- "a/assets/hand-notes_CSS_\350\231\232\347\272\277\350\276\271\346\241\206.md.b4a171ef.js"
+++ "b/assets/hand-notes_CSS_\350\231\232\347\272\277\350\276\271\346\241\206.md.a129fd01.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"虚线边框","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"代码实现","slug":"代码实现","link":"#代码实现","children":[]},{"level":2,"title":"效果预览","slug":"效果预览","link":"#效果预览","children":[]}],"relativePath":"hand-notes/CSS/虚线边框.md"}'),p={name:"hand-notes/CSS/虚线边框.md"},o=l(`

虚线边框

代码实现

代码如下:

css
.dashed-border {
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"虚线边框","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"代码实现","slug":"代码实现","link":"#代码实现","children":[]},{"level":2,"title":"效果预览","slug":"效果预览","link":"#效果预览","children":[]}],"relativePath":"hand-notes/CSS/虚线边框.md"}'),p={name:"hand-notes/CSS/虚线边框.md"},o=l(`

虚线边框

代码实现

代码如下:

css
.dashed-border {
     display: flex;
     align-items: center;
     justify-content: center;
diff --git "a/assets/hand-notes_CSS_\350\231\232\347\272\277\350\276\271\346\241\206.md.b4a171ef.lean.js" "b/assets/hand-notes_CSS_\350\231\232\347\272\277\350\276\271\346\241\206.md.a129fd01.lean.js"
similarity index 88%
rename from "assets/hand-notes_CSS_\350\231\232\347\272\277\350\276\271\346\241\206.md.b4a171ef.lean.js"
rename to "assets/hand-notes_CSS_\350\231\232\347\272\277\350\276\271\346\241\206.md.a129fd01.lean.js"
index 01416165..2038c205 100644
--- "a/assets/hand-notes_CSS_\350\231\232\347\272\277\350\276\271\346\241\206.md.b4a171ef.lean.js"
+++ "b/assets/hand-notes_CSS_\350\231\232\347\272\277\350\276\271\346\241\206.md.a129fd01.lean.js"
@@ -1 +1 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"虚线边框","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"代码实现","slug":"代码实现","link":"#代码实现","children":[]},{"level":2,"title":"效果预览","slug":"效果预览","link":"#效果预览","children":[]}],"relativePath":"hand-notes/CSS/虚线边框.md"}'),p={name:"hand-notes/CSS/虚线边框.md"},o=l("",6),e=[o];function t(r,c,C,D,F,y){return n(),a("div",null,e)}const d=s(p,[["render",t]]);export{i as __pageData,d as default};
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"虚线边框","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"代码实现","slug":"代码实现","link":"#代码实现","children":[]},{"level":2,"title":"效果预览","slug":"效果预览","link":"#效果预览","children":[]}],"relativePath":"hand-notes/CSS/虚线边框.md"}'),p={name:"hand-notes/CSS/虚线边框.md"},o=l("",6),e=[o];function t(r,c,C,D,F,y){return n(),a("div",null,e)}const d=s(p,[["render",t]]);export{i as __pageData,d as default};
diff --git "a/assets/hand-notes_Canvas_\347\273\230\345\210\266\345\233\276\347\211\207\344\270\215\346\270\205\346\231\260\351\227\256\351\242\230.md.2376cc2d.js" "b/assets/hand-notes_Canvas_\347\273\230\345\210\266\345\233\276\347\211\207\344\270\215\346\270\205\346\231\260\351\227\256\351\242\230.md.4042af7f.js"
similarity index 99%
rename from "assets/hand-notes_Canvas_\347\273\230\345\210\266\345\233\276\347\211\207\344\270\215\346\270\205\346\231\260\351\227\256\351\242\230.md.2376cc2d.js"
rename to "assets/hand-notes_Canvas_\347\273\230\345\210\266\345\233\276\347\211\207\344\270\215\346\270\205\346\231\260\351\227\256\351\242\230.md.4042af7f.js"
index 520bb012..b7f1fa04 100644
--- "a/assets/hand-notes_Canvas_\347\273\230\345\210\266\345\233\276\347\211\207\344\270\215\346\270\205\346\231\260\351\227\256\351\242\230.md.2376cc2d.js"
+++ "b/assets/hand-notes_Canvas_\347\273\230\345\210\266\345\233\276\347\211\207\344\270\215\346\270\205\346\231\260\351\227\256\351\242\230.md.4042af7f.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const F=JSON.parse('{"title":"绘制图片不清晰问题","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"问题原因和解决","slug":"问题原因和解决","link":"#问题原因和解决","children":[]},{"level":2,"title":"查看效果","slug":"查看效果","link":"#查看效果","children":[]}],"relativePath":"hand-notes/Canvas/绘制图片不清晰问题.md"}'),o={name:"hand-notes/Canvas/绘制图片不清晰问题.md"},p=l(`

绘制图片不清晰问题

问题原因和解决

canvas其实本质上也是一张图片,不管在canvas中绘制图片还是绘制其他图形,都是一样的道理

首先要明确,图片/canvas有以下两种尺寸

  • 原始尺寸

例如:这样设置

javascript
canvas.width = 600
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const F=JSON.parse('{"title":"绘制图片不清晰问题","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"问题原因和解决","slug":"问题原因和解决","link":"#问题原因和解决","children":[]},{"level":2,"title":"查看效果","slug":"查看效果","link":"#查看效果","children":[]}],"relativePath":"hand-notes/Canvas/绘制图片不清晰问题.md"}'),o={name:"hand-notes/Canvas/绘制图片不清晰问题.md"},p=l(`

绘制图片不清晰问题

问题原因和解决

canvas其实本质上也是一张图片,不管在canvas中绘制图片还是绘制其他图形,都是一样的道理

首先要明确,图片/canvas有以下两种尺寸

  • 原始尺寸

例如:这样设置

javascript
canvas.width = 600
 canvas.height = 600
 // 或者
 img.naturalWidth
diff --git "a/assets/hand-notes_Canvas_\347\273\230\345\210\266\345\233\276\347\211\207\344\270\215\346\270\205\346\231\260\351\227\256\351\242\230.md.2376cc2d.lean.js" "b/assets/hand-notes_Canvas_\347\273\230\345\210\266\345\233\276\347\211\207\344\270\215\346\270\205\346\231\260\351\227\256\351\242\230.md.4042af7f.lean.js"
similarity index 90%
rename from "assets/hand-notes_Canvas_\347\273\230\345\210\266\345\233\276\347\211\207\344\270\215\346\270\205\346\231\260\351\227\256\351\242\230.md.2376cc2d.lean.js"
rename to "assets/hand-notes_Canvas_\347\273\230\345\210\266\345\233\276\347\211\207\344\270\215\346\270\205\346\231\260\351\227\256\351\242\230.md.4042af7f.lean.js"
index 54378b31..f1e9625d 100644
--- "a/assets/hand-notes_Canvas_\347\273\230\345\210\266\345\233\276\347\211\207\344\270\215\346\270\205\346\231\260\351\227\256\351\242\230.md.2376cc2d.lean.js"
+++ "b/assets/hand-notes_Canvas_\347\273\230\345\210\266\345\233\276\347\211\207\344\270\215\346\270\205\346\231\260\351\227\256\351\242\230.md.4042af7f.lean.js"
@@ -1 +1 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const F=JSON.parse('{"title":"绘制图片不清晰问题","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"问题原因和解决","slug":"问题原因和解决","link":"#问题原因和解决","children":[]},{"level":2,"title":"查看效果","slug":"查看效果","link":"#查看效果","children":[]}],"relativePath":"hand-notes/Canvas/绘制图片不清晰问题.md"}'),o={name:"hand-notes/Canvas/绘制图片不清晰问题.md"},p=l("",21),e=[p];function c(t,r,D,C,y,i){return n(),a("div",null,e)}const d=s(o,[["render",c]]);export{F as __pageData,d as default};
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const F=JSON.parse('{"title":"绘制图片不清晰问题","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"问题原因和解决","slug":"问题原因和解决","link":"#问题原因和解决","children":[]},{"level":2,"title":"查看效果","slug":"查看效果","link":"#查看效果","children":[]}],"relativePath":"hand-notes/Canvas/绘制图片不清晰问题.md"}'),o={name:"hand-notes/Canvas/绘制图片不清晰问题.md"},p=l("",21),e=[p];function c(t,r,D,C,y,i){return n(),a("div",null,e)}const d=s(o,[["render",c]]);export{F as __pageData,d as default};
diff --git "a/assets/hand-notes_Charles_\344\277\256\346\224\271\350\257\267\346\261\202\346\210\226\345\223\215\345\272\224.md.024dd161.js" "b/assets/hand-notes_Charles_\344\277\256\346\224\271\350\257\267\346\261\202\346\210\226\345\223\215\345\272\224.md.708e7c67.js"
similarity index 98%
rename from "assets/hand-notes_Charles_\344\277\256\346\224\271\350\257\267\346\261\202\346\210\226\345\223\215\345\272\224.md.024dd161.js"
rename to "assets/hand-notes_Charles_\344\277\256\346\224\271\350\257\267\346\261\202\346\210\226\345\223\215\345\272\224.md.708e7c67.js"
index dbf7952d..570c9fc8 100644
--- "a/assets/hand-notes_Charles_\344\277\256\346\224\271\350\257\267\346\261\202\346\210\226\345\223\215\345\272\224.md.024dd161.js"
+++ "b/assets/hand-notes_Charles_\344\277\256\346\224\271\350\257\267\346\261\202\346\210\226\345\223\215\345\272\224.md.708e7c67.js"
@@ -1 +1 @@
-import{_ as e,c as i,o as t,e as o}from"./app.7354b8c5.js";const u=JSON.parse('{"title":"修改请求或响应","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"修改接口请求/响应数据","slug":"修改接口请求-响应数据","link":"#修改接口请求-响应数据","children":[]},{"level":2,"title":"修改响应文件内容","slug":"修改响应文件内容","link":"#修改响应文件内容","children":[]}],"relativePath":"hand-notes/Charles/修改请求或响应.md"}'),a={name:"hand-notes/Charles/修改请求或响应.md"},s=o('

修改请求或响应

修改接口请求/响应数据

  • 打开Charles,请求接口后,选中要修改的接口,右键,点击Breakpoints

breakpoints

  • 打开CharlesProxy => Breakpoint Settings

breakpoint-settings

  • 打开后展示如下,这里可以看到添加的要拦截的接口,想拦截哪个接口就双击哪个

open-breaking-settings

  • 双击后打开窗口如下

edit-breakpoint

TIP

  • 请求的query中如果有随机字符串最好去掉,不然不同的参数就不会拦截,也可以把query整体删掉

  • 如果要修改请求的数据,勾选Request

  • 如果要修改接口响应数据,勾选Response

  • APP/网页重新请求接口,这里演示的是修改Response

  • 响应数据返回后会自动锁定到如下图,等待修改Response,点击Edit Response

install

  • 修改完毕后,点击Excute即可

修改响应文件内容

  • 点击CharlesTools => Map Local

map-local

  • 勾选Enable Map Local,添加拦截的文件路径

map-local-settings

  • 填写文件路径Path,如/a/b.txt,然后选择本地替换文件路径

  • 其他HostPort等想限制也可以填写

mapping-edit

',21),c=[s];function l(n,d,r,p,g,h){return t(),i("div",null,c)}const _=e(a,[["render",l]]);export{u as __pageData,_ as default}; +import{_ as e,c as i,o as t,e as o}from"./app.4a806fb4.js";const u=JSON.parse('{"title":"修改请求或响应","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"修改接口请求/响应数据","slug":"修改接口请求-响应数据","link":"#修改接口请求-响应数据","children":[]},{"level":2,"title":"修改响应文件内容","slug":"修改响应文件内容","link":"#修改响应文件内容","children":[]}],"relativePath":"hand-notes/Charles/修改请求或响应.md"}'),a={name:"hand-notes/Charles/修改请求或响应.md"},s=o('

修改请求或响应

修改接口请求/响应数据

  • 打开Charles,请求接口后,选中要修改的接口,右键,点击Breakpoints

breakpoints

  • 打开CharlesProxy => Breakpoint Settings

breakpoint-settings

  • 打开后展示如下,这里可以看到添加的要拦截的接口,想拦截哪个接口就双击哪个

open-breaking-settings

  • 双击后打开窗口如下

edit-breakpoint

TIP

  • 请求的query中如果有随机字符串最好去掉,不然不同的参数就不会拦截,也可以把query整体删掉

  • 如果要修改请求的数据,勾选Request

  • 如果要修改接口响应数据,勾选Response

  • APP/网页重新请求接口,这里演示的是修改Response

  • 响应数据返回后会自动锁定到如下图,等待修改Response,点击Edit Response

install

  • 修改完毕后,点击Excute即可

修改响应文件内容

  • 点击CharlesTools => Map Local

map-local

  • 勾选Enable Map Local,添加拦截的文件路径

map-local-settings

  • 填写文件路径Path,如/a/b.txt,然后选择本地替换文件路径

  • 其他HostPort等想限制也可以填写

mapping-edit

',21),c=[s];function l(n,d,r,p,g,h){return t(),i("div",null,c)}const _=e(a,[["render",l]]);export{u as __pageData,_ as default}; diff --git "a/assets/hand-notes_Charles_\344\277\256\346\224\271\350\257\267\346\261\202\346\210\226\345\223\215\345\272\224.md.024dd161.lean.js" "b/assets/hand-notes_Charles_\344\277\256\346\224\271\350\257\267\346\261\202\346\210\226\345\223\215\345\272\224.md.708e7c67.lean.js" similarity index 90% rename from "assets/hand-notes_Charles_\344\277\256\346\224\271\350\257\267\346\261\202\346\210\226\345\223\215\345\272\224.md.024dd161.lean.js" rename to "assets/hand-notes_Charles_\344\277\256\346\224\271\350\257\267\346\261\202\346\210\226\345\223\215\345\272\224.md.708e7c67.lean.js" index 40dc4e53..6c4c156c 100644 --- "a/assets/hand-notes_Charles_\344\277\256\346\224\271\350\257\267\346\261\202\346\210\226\345\223\215\345\272\224.md.024dd161.lean.js" +++ "b/assets/hand-notes_Charles_\344\277\256\346\224\271\350\257\267\346\261\202\346\210\226\345\223\215\345\272\224.md.708e7c67.lean.js" @@ -1 +1 @@ -import{_ as e,c as i,o as t,e as o}from"./app.7354b8c5.js";const u=JSON.parse('{"title":"修改请求或响应","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"修改接口请求/响应数据","slug":"修改接口请求-响应数据","link":"#修改接口请求-响应数据","children":[]},{"level":2,"title":"修改响应文件内容","slug":"修改响应文件内容","link":"#修改响应文件内容","children":[]}],"relativePath":"hand-notes/Charles/修改请求或响应.md"}'),a={name:"hand-notes/Charles/修改请求或响应.md"},s=o("",21),c=[s];function l(n,d,r,p,g,h){return t(),i("div",null,c)}const _=e(a,[["render",l]]);export{u as __pageData,_ as default}; +import{_ as e,c as i,o as t,e as o}from"./app.4a806fb4.js";const u=JSON.parse('{"title":"修改请求或响应","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"修改接口请求/响应数据","slug":"修改接口请求-响应数据","link":"#修改接口请求-响应数据","children":[]},{"level":2,"title":"修改响应文件内容","slug":"修改响应文件内容","link":"#修改响应文件内容","children":[]}],"relativePath":"hand-notes/Charles/修改请求或响应.md"}'),a={name:"hand-notes/Charles/修改请求或响应.md"},s=o("",21),c=[s];function l(n,d,r,p,g,h){return t(),i("div",null,c)}const _=e(a,[["render",l]]);export{u as __pageData,_ as default}; diff --git "a/assets/hand-notes_Charles_\346\212\223\345\214\205\351\205\215\347\275\256.md.de550059.js" "b/assets/hand-notes_Charles_\346\212\223\345\214\205\351\205\215\347\275\256.md.735d347c.js" similarity index 99% rename from "assets/hand-notes_Charles_\346\212\223\345\214\205\351\205\215\347\275\256.md.de550059.js" rename to "assets/hand-notes_Charles_\346\212\223\345\214\205\351\205\215\347\275\256.md.735d347c.js" index fc45fd23..b1f55b73 100644 --- "a/assets/hand-notes_Charles_\346\212\223\345\214\205\351\205\215\347\275\256.md.de550059.js" +++ "b/assets/hand-notes_Charles_\346\212\223\345\214\205\351\205\215\347\275\256.md.735d347c.js" @@ -1 +1 @@ -import{_ as e,c as i,o as a,e as t}from"./app.7354b8c5.js";const u=JSON.parse('{"title":"Charles配置","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"电脑端操作","slug":"电脑端操作","link":"#电脑端操作","children":[{"level":3,"title":"安装证书","slug":"安装证书","link":"#安装证书","children":[]},{"level":3,"title":"查找证书","slug":"查找证书","link":"#查找证书","children":[]},{"level":3,"title":"信任证书","slug":"信任证书","link":"#信任证书","children":[]},{"level":3,"title":"设置支持HTTPS","slug":"设置支持https","link":"#设置支持https","children":[]},{"level":3,"title":"查看IP","slug":"查看ip","link":"#查看ip","children":[]}]},{"level":2,"title":"手机端设置","slug":"手机端设置","link":"#手机端设置","children":[{"level":3,"title":"IOS","slug":"ios","link":"#ios","children":[]},{"level":3,"title":"安卓","slug":"安卓","link":"#安卓","children":[]}]}],"relativePath":"hand-notes/Charles/抓包配置.md"}'),l={name:"hand-notes/Charles/抓包配置.md"},o=t('

Charles配置

电脑端操作

安装证书

  • 打开Charles,选择Help => SSL Proxying => Install Charles Root Certificate,安装完成后,会启动钥匙串访问

install

查找证书

  • 钥匙串访问程序中,找到刚才的证书Charles Proxy CA

install

信任证书

  • 选中该证书,右键 => 显示简介 => 信任 => 在使用此证书时选项中选择始终信任

install

install

TIP

上述操作完成后,关闭窗口,此时会提示输入电脑密码,按照提示输入即可

设置支持HTTPS

HTTPS

HTTPS

HTTPS

查看IP

  • 使用Charles查看电脑IP

local-ip

local-ip

手机端设置

WARNING

保证手机和电脑连接同一个WIFI

IOS


进入WIFI设置

  • 进入设置 => 无线局域网,找到当前手机链接的wifi,点击后面的info icon进入wifi详情

wifi-info

设置代理IP

  • WIFI详情滑动到最下面,找到HTTP Proxy

http-proxy

  • 进入,选择手动(Manual),设置Serverport

    • Server就是刚才查看的本机IP

    • port一直都是8888

configure-proxy

下载证书

  • 打开Safari浏览器,访问:chls.pro/ssl,此时电脑上会有连接提示,点击allow允许,然后在手机端下载证书

  • 电脑端展示

connect-from

  • 手机端下载确认

download

信任证书

  • 证书下载完成后,点击设置 => 通用 => VPN和设备管理,找到刚才的证书,并下载

device-manage

  • 点击下载

install-profile

  • 完成上述步骤就可以进行抓包了

安卓

  • 设置手机wifi代理和IOS的操作基本一样,设置完wifi代理后进行下一步

  • 本人使用的小米6自带的浏览器是下载不下来证书的,最后下载了Edge浏览器,访问:chls.pro/ssl,此时电脑上会有连接提示,点击allow允许,然后在手机端下载证书并且安装

  • 然后就可以使用了

',46),c=[o];function s(d,n,r,h,g,p){return a(),i("div",null,c)}const f=e(l,[["render",s]]);export{u as __pageData,f as default}; +import{_ as e,c as i,o as a,e as t}from"./app.4a806fb4.js";const u=JSON.parse('{"title":"Charles配置","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"电脑端操作","slug":"电脑端操作","link":"#电脑端操作","children":[{"level":3,"title":"安装证书","slug":"安装证书","link":"#安装证书","children":[]},{"level":3,"title":"查找证书","slug":"查找证书","link":"#查找证书","children":[]},{"level":3,"title":"信任证书","slug":"信任证书","link":"#信任证书","children":[]},{"level":3,"title":"设置支持HTTPS","slug":"设置支持https","link":"#设置支持https","children":[]},{"level":3,"title":"查看IP","slug":"查看ip","link":"#查看ip","children":[]}]},{"level":2,"title":"手机端设置","slug":"手机端设置","link":"#手机端设置","children":[{"level":3,"title":"IOS","slug":"ios","link":"#ios","children":[]},{"level":3,"title":"安卓","slug":"安卓","link":"#安卓","children":[]}]}],"relativePath":"hand-notes/Charles/抓包配置.md"}'),l={name:"hand-notes/Charles/抓包配置.md"},o=t('

Charles配置

电脑端操作

安装证书

  • 打开Charles,选择Help => SSL Proxying => Install Charles Root Certificate,安装完成后,会启动钥匙串访问

install

查找证书

  • 钥匙串访问程序中,找到刚才的证书Charles Proxy CA

install

信任证书

  • 选中该证书,右键 => 显示简介 => 信任 => 在使用此证书时选项中选择始终信任

install

install

TIP

上述操作完成后,关闭窗口,此时会提示输入电脑密码,按照提示输入即可

设置支持HTTPS

HTTPS

HTTPS

HTTPS

查看IP

  • 使用Charles查看电脑IP

local-ip

local-ip

手机端设置

WARNING

保证手机和电脑连接同一个WIFI

IOS


进入WIFI设置

  • 进入设置 => 无线局域网,找到当前手机链接的wifi,点击后面的info icon进入wifi详情

wifi-info

设置代理IP

  • WIFI详情滑动到最下面,找到HTTP Proxy

http-proxy

  • 进入,选择手动(Manual),设置Serverport

    • Server就是刚才查看的本机IP

    • port一直都是8888

configure-proxy

下载证书

  • 打开Safari浏览器,访问:chls.pro/ssl,此时电脑上会有连接提示,点击allow允许,然后在手机端下载证书

  • 电脑端展示

connect-from

  • 手机端下载确认

download

信任证书

  • 证书下载完成后,点击设置 => 通用 => VPN和设备管理,找到刚才的证书,并下载

device-manage

  • 点击下载

install-profile

  • 完成上述步骤就可以进行抓包了

安卓

  • 设置手机wifi代理和IOS的操作基本一样,设置完wifi代理后进行下一步

  • 本人使用的小米6自带的浏览器是下载不下来证书的,最后下载了Edge浏览器,访问:chls.pro/ssl,此时电脑上会有连接提示,点击allow允许,然后在手机端下载证书并且安装

  • 然后就可以使用了

',46),c=[o];function s(d,n,r,h,g,p){return a(),i("div",null,c)}const f=e(l,[["render",s]]);export{u as __pageData,f as default}; diff --git "a/assets/hand-notes_Charles_\346\212\223\345\214\205\351\205\215\347\275\256.md.de550059.lean.js" "b/assets/hand-notes_Charles_\346\212\223\345\214\205\351\205\215\347\275\256.md.735d347c.lean.js" similarity index 94% rename from "assets/hand-notes_Charles_\346\212\223\345\214\205\351\205\215\347\275\256.md.de550059.lean.js" rename to "assets/hand-notes_Charles_\346\212\223\345\214\205\351\205\215\347\275\256.md.735d347c.lean.js" index dd448c13..27e9278d 100644 --- "a/assets/hand-notes_Charles_\346\212\223\345\214\205\351\205\215\347\275\256.md.de550059.lean.js" +++ "b/assets/hand-notes_Charles_\346\212\223\345\214\205\351\205\215\347\275\256.md.735d347c.lean.js" @@ -1 +1 @@ -import{_ as e,c as i,o as a,e as t}from"./app.7354b8c5.js";const u=JSON.parse('{"title":"Charles配置","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"电脑端操作","slug":"电脑端操作","link":"#电脑端操作","children":[{"level":3,"title":"安装证书","slug":"安装证书","link":"#安装证书","children":[]},{"level":3,"title":"查找证书","slug":"查找证书","link":"#查找证书","children":[]},{"level":3,"title":"信任证书","slug":"信任证书","link":"#信任证书","children":[]},{"level":3,"title":"设置支持HTTPS","slug":"设置支持https","link":"#设置支持https","children":[]},{"level":3,"title":"查看IP","slug":"查看ip","link":"#查看ip","children":[]}]},{"level":2,"title":"手机端设置","slug":"手机端设置","link":"#手机端设置","children":[{"level":3,"title":"IOS","slug":"ios","link":"#ios","children":[]},{"level":3,"title":"安卓","slug":"安卓","link":"#安卓","children":[]}]}],"relativePath":"hand-notes/Charles/抓包配置.md"}'),l={name:"hand-notes/Charles/抓包配置.md"},o=t("",46),c=[o];function s(d,n,r,h,g,p){return a(),i("div",null,c)}const f=e(l,[["render",s]]);export{u as __pageData,f as default}; +import{_ as e,c as i,o as a,e as t}from"./app.4a806fb4.js";const u=JSON.parse('{"title":"Charles配置","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"电脑端操作","slug":"电脑端操作","link":"#电脑端操作","children":[{"level":3,"title":"安装证书","slug":"安装证书","link":"#安装证书","children":[]},{"level":3,"title":"查找证书","slug":"查找证书","link":"#查找证书","children":[]},{"level":3,"title":"信任证书","slug":"信任证书","link":"#信任证书","children":[]},{"level":3,"title":"设置支持HTTPS","slug":"设置支持https","link":"#设置支持https","children":[]},{"level":3,"title":"查看IP","slug":"查看ip","link":"#查看ip","children":[]}]},{"level":2,"title":"手机端设置","slug":"手机端设置","link":"#手机端设置","children":[{"level":3,"title":"IOS","slug":"ios","link":"#ios","children":[]},{"level":3,"title":"安卓","slug":"安卓","link":"#安卓","children":[]}]}],"relativePath":"hand-notes/Charles/抓包配置.md"}'),l={name:"hand-notes/Charles/抓包配置.md"},o=t("",46),c=[o];function s(d,n,r,h,g,p){return a(),i("div",null,c)}const f=e(l,[["render",s]]);export{u as __pageData,f as default}; diff --git "a/assets/hand-notes_Chart_AntVF2_\344\275\277\347\224\250\345\260\217\350\256\260.md.bdd847dd.js" "b/assets/hand-notes_Chart_AntVF2_\344\275\277\347\224\250\345\260\217\350\256\260.md.c0d13818.js" similarity index 99% rename from "assets/hand-notes_Chart_AntVF2_\344\275\277\347\224\250\345\260\217\350\256\260.md.bdd847dd.js" rename to "assets/hand-notes_Chart_AntVF2_\344\275\277\347\224\250\345\260\217\350\256\260.md.c0d13818.js" index 9130543f..f07e86f6 100644 --- "a/assets/hand-notes_Chart_AntVF2_\344\275\277\347\224\250\345\260\217\350\256\260.md.bdd847dd.js" +++ "b/assets/hand-notes_Chart_AntVF2_\344\275\277\347\224\250\345\260\217\350\256\260.md.c0d13818.js" @@ -1,4 +1,4 @@ -import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const p="/static-blog/image/AntVF2/column_1.png",d=JSON.parse('{"title":"AntV F2 使用小记","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"设置Tooltip","slug":"设置tooltip","link":"#设置tooltip","children":[]},{"level":2,"title":"设置坐标轴文案对齐方式","slug":"设置坐标轴文案对齐方式","link":"#设置坐标轴文案对齐方式","children":[]},{"level":2,"title":"柱状图","slug":"柱状图","link":"#柱状图","children":[{"level":3,"title":"设置柱状图堆叠方式","slug":"设置柱状图堆叠方式","link":"#设置柱状图堆叠方式","children":[]}]}],"relativePath":"hand-notes/Chart/AntVF2/使用小记.md"}'),o={name:"hand-notes/Chart/AntVF2/使用小记.md"},t=l(`

AntV F2 使用小记

设置Tooltip

typescript
// 关闭或启用 Tooltip enable 是否启用
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const p="/static-blog/image/AntVF2/column_1.png",d=JSON.parse('{"title":"AntV F2 使用小记","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"设置Tooltip","slug":"设置tooltip","link":"#设置tooltip","children":[]},{"level":2,"title":"设置坐标轴文案对齐方式","slug":"设置坐标轴文案对齐方式","link":"#设置坐标轴文案对齐方式","children":[]},{"level":2,"title":"柱状图","slug":"柱状图","link":"#柱状图","children":[{"level":3,"title":"设置柱状图堆叠方式","slug":"设置柱状图堆叠方式","link":"#设置柱状图堆叠方式","children":[]}]}],"relativePath":"hand-notes/Chart/AntVF2/使用小记.md"}'),o={name:"hand-notes/Chart/AntVF2/使用小记.md"},t=l(`

AntV F2 使用小记

设置Tooltip

typescript
// 关闭或启用 Tooltip enable 是否启用
 tooltip(enable: boolean): this;
 // 配置 Tooltip
 tooltip(params: TooltipParams<TRecord>): this;
diff --git "a/assets/hand-notes_Chart_AntVF2_\344\275\277\347\224\250\345\260\217\350\256\260.md.bdd847dd.lean.js" "b/assets/hand-notes_Chart_AntVF2_\344\275\277\347\224\250\345\260\217\350\256\260.md.c0d13818.lean.js"
similarity index 93%
rename from "assets/hand-notes_Chart_AntVF2_\344\275\277\347\224\250\345\260\217\350\256\260.md.bdd847dd.lean.js"
rename to "assets/hand-notes_Chart_AntVF2_\344\275\277\347\224\250\345\260\217\350\256\260.md.c0d13818.lean.js"
index c42040cb..4742c425 100644
--- "a/assets/hand-notes_Chart_AntVF2_\344\275\277\347\224\250\345\260\217\350\256\260.md.bdd847dd.lean.js"
+++ "b/assets/hand-notes_Chart_AntVF2_\344\275\277\347\224\250\345\260\217\350\256\260.md.c0d13818.lean.js"
@@ -1 +1 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const p="/static-blog/image/AntVF2/column_1.png",d=JSON.parse('{"title":"AntV F2 使用小记","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"设置Tooltip","slug":"设置tooltip","link":"#设置tooltip","children":[]},{"level":2,"title":"设置坐标轴文案对齐方式","slug":"设置坐标轴文案对齐方式","link":"#设置坐标轴文案对齐方式","children":[]},{"level":2,"title":"柱状图","slug":"柱状图","link":"#柱状图","children":[{"level":3,"title":"设置柱状图堆叠方式","slug":"设置柱状图堆叠方式","link":"#设置柱状图堆叠方式","children":[]}]}],"relativePath":"hand-notes/Chart/AntVF2/使用小记.md"}'),o={name:"hand-notes/Chart/AntVF2/使用小记.md"},t=l("",17),e=[t];function c(r,y,D,F,i,C){return n(),a("div",null,e)}const h=s(o,[["render",c]]);export{d as __pageData,h as default};
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const p="/static-blog/image/AntVF2/column_1.png",d=JSON.parse('{"title":"AntV F2 使用小记","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"设置Tooltip","slug":"设置tooltip","link":"#设置tooltip","children":[]},{"level":2,"title":"设置坐标轴文案对齐方式","slug":"设置坐标轴文案对齐方式","link":"#设置坐标轴文案对齐方式","children":[]},{"level":2,"title":"柱状图","slug":"柱状图","link":"#柱状图","children":[{"level":3,"title":"设置柱状图堆叠方式","slug":"设置柱状图堆叠方式","link":"#设置柱状图堆叠方式","children":[]}]}],"relativePath":"hand-notes/Chart/AntVF2/使用小记.md"}'),o={name:"hand-notes/Chart/AntVF2/使用小记.md"},t=l("",17),e=[t];function c(r,y,D,F,i,C){return n(),a("div",null,e)}const h=s(o,[["render",c]]);export{d as __pageData,h as default};
diff --git "a/assets/hand-notes_JavaScript_\345\210\244\346\226\255\345\255\227\346\257\215\345\244\247\345\260\217\345\206\231.md.4524662c.js" "b/assets/hand-notes_JavaScript_\345\210\244\346\226\255\345\255\227\346\257\215\345\244\247\345\260\217\345\206\231.md.2a4e67f9.js"
similarity index 98%
rename from "assets/hand-notes_JavaScript_\345\210\244\346\226\255\345\255\227\346\257\215\345\244\247\345\260\217\345\206\231.md.4524662c.js"
rename to "assets/hand-notes_JavaScript_\345\210\244\346\226\255\345\255\227\346\257\215\345\244\247\345\260\217\345\206\231.md.2a4e67f9.js"
index c0656cb6..d55d0111 100644
--- "a/assets/hand-notes_JavaScript_\345\210\244\346\226\255\345\255\227\346\257\215\345\244\247\345\260\217\345\206\231.md.4524662c.js"
+++ "b/assets/hand-notes_JavaScript_\345\210\244\346\226\255\345\255\227\346\257\215\345\244\247\345\260\217\345\206\231.md.2a4e67f9.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const C=JSON.parse('{"title":"判断字母大小写","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"判断字母是否是大写字母","slug":"判断字母是否是大写字母","link":"#判断字母是否是大写字母","children":[]},{"level":2,"title":"判断字母是否是小写字母","slug":"判断字母是否是小写字母","link":"#判断字母是否是小写字母","children":[]}],"relativePath":"hand-notes/JavaScript/判断字母大小写.md"}'),o={name:"hand-notes/JavaScript/判断字母大小写.md"},p=l(`

判断字母大小写

TIP

  • 每个字符(包括字母)在计算机中都有一个对应的ASCII码值。

  • 大写字母的ASCII码值范围是65到90(包括65和90)

  • 小写字母的ASCII码值范围是97到122(包括97和122)

判断字母是否是大写字母

javascript
function isLetterUppercase(letter) {
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const C=JSON.parse('{"title":"判断字母大小写","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"判断字母是否是大写字母","slug":"判断字母是否是大写字母","link":"#判断字母是否是大写字母","children":[]},{"level":2,"title":"判断字母是否是小写字母","slug":"判断字母是否是小写字母","link":"#判断字母是否是小写字母","children":[]}],"relativePath":"hand-notes/JavaScript/判断字母大小写.md"}'),o={name:"hand-notes/JavaScript/判断字母大小写.md"},p=l(`

判断字母大小写

TIP

  • 每个字符(包括字母)在计算机中都有一个对应的ASCII码值。

  • 大写字母的ASCII码值范围是65到90(包括65和90)

  • 小写字母的ASCII码值范围是97到122(包括97和122)

判断字母是否是大写字母

javascript
function isLetterUppercase(letter) {
     const ascii = letter.charCodeAt(0);
     return ascii >= 65 && ascii <= 90;
 }
diff --git "a/assets/hand-notes_JavaScript_\345\210\244\346\226\255\345\255\227\346\257\215\345\244\247\345\260\217\345\206\231.md.4524662c.lean.js" "b/assets/hand-notes_JavaScript_\345\210\244\346\226\255\345\255\227\346\257\215\345\244\247\345\260\217\345\206\231.md.2a4e67f9.lean.js"
similarity index 91%
rename from "assets/hand-notes_JavaScript_\345\210\244\346\226\255\345\255\227\346\257\215\345\244\247\345\260\217\345\206\231.md.4524662c.lean.js"
rename to "assets/hand-notes_JavaScript_\345\210\244\346\226\255\345\255\227\346\257\215\345\244\247\345\260\217\345\206\231.md.2a4e67f9.lean.js"
index 2facc297..7fb5de2a 100644
--- "a/assets/hand-notes_JavaScript_\345\210\244\346\226\255\345\255\227\346\257\215\345\244\247\345\260\217\345\206\231.md.4524662c.lean.js"
+++ "b/assets/hand-notes_JavaScript_\345\210\244\346\226\255\345\255\227\346\257\215\345\244\247\345\260\217\345\206\231.md.2a4e67f9.lean.js"
@@ -1 +1 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const C=JSON.parse('{"title":"判断字母大小写","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"判断字母是否是大写字母","slug":"判断字母是否是大写字母","link":"#判断字母是否是大写字母","children":[]},{"level":2,"title":"判断字母是否是小写字母","slug":"判断字母是否是小写字母","link":"#判断字母是否是小写字母","children":[]}],"relativePath":"hand-notes/JavaScript/判断字母大小写.md"}'),o={name:"hand-notes/JavaScript/判断字母大小写.md"},p=l("",7),e=[p];function t(c,r,i,F,y,D){return n(),a("div",null,e)}const A=s(o,[["render",t]]);export{C as __pageData,A as default};
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const C=JSON.parse('{"title":"判断字母大小写","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"判断字母是否是大写字母","slug":"判断字母是否是大写字母","link":"#判断字母是否是大写字母","children":[]},{"level":2,"title":"判断字母是否是小写字母","slug":"判断字母是否是小写字母","link":"#判断字母是否是小写字母","children":[]}],"relativePath":"hand-notes/JavaScript/判断字母大小写.md"}'),o={name:"hand-notes/JavaScript/判断字母大小写.md"},p=l("",7),e=[p];function t(c,r,i,F,y,D){return n(),a("div",null,e)}const A=s(o,[["render",t]]);export{C as __pageData,A as default};
diff --git "a/assets/hand-notes_JavaScript_\346\216\247\345\210\266\345\271\266\345\217\221\346\211\247\350\241\214\345\207\275\346\225\260.md.c1bee19d.js" "b/assets/hand-notes_JavaScript_\346\216\247\345\210\266\345\271\266\345\217\221\346\211\247\350\241\214\345\207\275\346\225\260.md.38064388.js"
similarity index 99%
rename from "assets/hand-notes_JavaScript_\346\216\247\345\210\266\345\271\266\345\217\221\346\211\247\350\241\214\345\207\275\346\225\260.md.c1bee19d.js"
rename to "assets/hand-notes_JavaScript_\346\216\247\345\210\266\345\271\266\345\217\221\346\211\247\350\241\214\345\207\275\346\225\260.md.38064388.js"
index 96b6e81d..5b257f62 100644
--- "a/assets/hand-notes_JavaScript_\346\216\247\345\210\266\345\271\266\345\217\221\346\211\247\350\241\214\345\207\275\346\225\260.md.c1bee19d.js"
+++ "b/assets/hand-notes_JavaScript_\346\216\247\345\210\266\345\271\266\345\217\221\346\211\247\350\241\214\345\207\275\346\225\260.md.38064388.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"控制并发执行函数","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"hand-notes/JavaScript/控制并发执行函数.md"}'),p={name:"hand-notes/JavaScript/控制并发执行函数.md"},o=l(`

控制并发执行函数

typescript
type TTask = (...args: any[]) => Promise<any>;
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"控制并发执行函数","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"hand-notes/JavaScript/控制并发执行函数.md"}'),p={name:"hand-notes/JavaScript/控制并发执行函数.md"},o=l(`

控制并发执行函数

typescript
type TTask = (...args: any[]) => Promise<any>;
 
 type TTaskResult = {
 	status: 'resolved' | 'rejected';
diff --git "a/assets/hand-notes_JavaScript_\346\216\247\345\210\266\345\271\266\345\217\221\346\211\247\350\241\214\345\207\275\346\225\260.md.c1bee19d.lean.js" "b/assets/hand-notes_JavaScript_\346\216\247\345\210\266\345\271\266\345\217\221\346\211\247\350\241\214\345\207\275\346\225\260.md.38064388.lean.js"
similarity index 85%
rename from "assets/hand-notes_JavaScript_\346\216\247\345\210\266\345\271\266\345\217\221\346\211\247\350\241\214\345\207\275\346\225\260.md.c1bee19d.lean.js"
rename to "assets/hand-notes_JavaScript_\346\216\247\345\210\266\345\271\266\345\217\221\346\211\247\350\241\214\345\207\275\346\225\260.md.38064388.lean.js"
index 65a99921..0882e44a 100644
--- "a/assets/hand-notes_JavaScript_\346\216\247\345\210\266\345\271\266\345\217\221\346\211\247\350\241\214\345\207\275\346\225\260.md.c1bee19d.lean.js"
+++ "b/assets/hand-notes_JavaScript_\346\216\247\345\210\266\345\271\266\345\217\221\346\211\247\350\241\214\345\207\275\346\225\260.md.38064388.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"控制并发执行函数","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"hand-notes/JavaScript/控制并发执行函数.md"}'),p={name:"hand-notes/JavaScript/控制并发执行函数.md"},o=l("",2),e=[o];function t(c,r,F,y,D,C){return a(),n("div",null,e)}const d=s(p,[["render",t]]);export{i as __pageData,d as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"控制并发执行函数","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"hand-notes/JavaScript/控制并发执行函数.md"}'),p={name:"hand-notes/JavaScript/控制并发执行函数.md"},o=l("",2),e=[o];function t(c,r,F,y,D,C){return a(),n("div",null,e)}const d=s(p,[["render",t]]);export{i as __pageData,d as default};
diff --git "a/assets/hand-notes_JavaScript_\346\225\260\345\255\227\345\233\233\350\210\215\344\272\224\345\205\245.md.eb2653d9.js" "b/assets/hand-notes_JavaScript_\346\225\260\345\255\227\345\233\233\350\210\215\344\272\224\345\205\245.md.ba45c7b5.js"
similarity index 97%
rename from "assets/hand-notes_JavaScript_\346\225\260\345\255\227\345\233\233\350\210\215\344\272\224\345\205\245.md.eb2653d9.js"
rename to "assets/hand-notes_JavaScript_\346\225\260\345\255\227\345\233\233\350\210\215\344\272\224\345\205\245.md.ba45c7b5.js"
index 1e475585..b392457b 100644
--- "a/assets/hand-notes_JavaScript_\346\225\260\345\255\227\345\233\233\350\210\215\344\272\224\345\205\245.md.eb2653d9.js"
+++ "b/assets/hand-notes_JavaScript_\346\225\260\345\255\227\345\233\233\350\210\215\344\272\224\345\205\245.md.ba45c7b5.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as a,o as n,e as o}from"./app.7354b8c5.js";const d=JSON.parse('{"title":"数字四舍五入","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"hand-notes/JavaScript/数字四舍五入.md"}'),l={name:"hand-notes/JavaScript/数字四舍五入.md"},p=o(`

数字四舍五入

javascript
/**
+import{_ as s,c as a,o as n,e as o}from"./app.4a806fb4.js";const d=JSON.parse('{"title":"数字四舍五入","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"hand-notes/JavaScript/数字四舍五入.md"}'),l={name:"hand-notes/JavaScript/数字四舍五入.md"},p=o(`

数字四舍五入

javascript
/**
  * 对数字进行四舍五入,可精确小数点位置
  */
 function round(number, precision) {
diff --git "a/assets/hand-notes_JavaScript_\346\225\260\345\255\227\345\233\233\350\210\215\344\272\224\345\205\245.md.eb2653d9.lean.js" "b/assets/hand-notes_JavaScript_\346\225\260\345\255\227\345\233\233\350\210\215\344\272\224\345\205\245.md.ba45c7b5.lean.js"
similarity index 84%
rename from "assets/hand-notes_JavaScript_\346\225\260\345\255\227\345\233\233\350\210\215\344\272\224\345\205\245.md.eb2653d9.lean.js"
rename to "assets/hand-notes_JavaScript_\346\225\260\345\255\227\345\233\233\350\210\215\344\272\224\345\205\245.md.ba45c7b5.lean.js"
index 9e79f8e2..c3c25252 100644
--- "a/assets/hand-notes_JavaScript_\346\225\260\345\255\227\345\233\233\350\210\215\344\272\224\345\205\245.md.eb2653d9.lean.js"
+++ "b/assets/hand-notes_JavaScript_\346\225\260\345\255\227\345\233\233\350\210\215\344\272\224\345\205\245.md.ba45c7b5.lean.js"
@@ -1 +1 @@
-import{_ as s,c as a,o as n,e as o}from"./app.7354b8c5.js";const d=JSON.parse('{"title":"数字四舍五入","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"hand-notes/JavaScript/数字四舍五入.md"}'),l={name:"hand-notes/JavaScript/数字四舍五入.md"},p=o("",3),e=[p];function t(c,r,i,y,F,D){return n(),a("div",null,e)}const A=s(l,[["render",t]]);export{d as __pageData,A as default};
+import{_ as s,c as a,o as n,e as o}from"./app.4a806fb4.js";const d=JSON.parse('{"title":"数字四舍五入","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"hand-notes/JavaScript/数字四舍五入.md"}'),l={name:"hand-notes/JavaScript/数字四舍五入.md"},p=o("",3),e=[p];function t(c,r,i,y,F,D){return n(),a("div",null,e)}const A=s(l,[["render",t]]);export{d as __pageData,A as default};
diff --git "a/assets/hand-notes_JavaScript_\346\240\271\346\215\256\347\224\237\346\227\245\350\256\241\347\256\227\345\271\264\351\276\204.md.2c943e7e.js" "b/assets/hand-notes_JavaScript_\346\240\271\346\215\256\347\224\237\346\227\245\350\256\241\347\256\227\345\271\264\351\276\204.md.02a203de.js"
similarity index 99%
rename from "assets/hand-notes_JavaScript_\346\240\271\346\215\256\347\224\237\346\227\245\350\256\241\347\256\227\345\271\264\351\276\204.md.2c943e7e.js"
rename to "assets/hand-notes_JavaScript_\346\240\271\346\215\256\347\224\237\346\227\245\350\256\241\347\256\227\345\271\264\351\276\204.md.02a203de.js"
index 6dbfe999..1aa0e308 100644
--- "a/assets/hand-notes_JavaScript_\346\240\271\346\215\256\347\224\237\346\227\245\350\256\241\347\256\227\345\271\264\351\276\204.md.2c943e7e.js"
+++ "b/assets/hand-notes_JavaScript_\346\240\271\346\215\256\347\224\237\346\227\245\350\256\241\347\256\227\345\271\264\351\276\204.md.02a203de.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const A=JSON.parse('{"title":"根据生日计算年龄","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"hand-notes/JavaScript/根据生日计算年龄.md"}'),o={name:"hand-notes/JavaScript/根据生日计算年龄.md"},p=l(`

根据生日计算年龄

javascript
const birthdateReg = /^(\\d{4})[-/]?(\\d{1,2})[-/]?(\\d{1,2})$/;
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const A=JSON.parse('{"title":"根据生日计算年龄","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"hand-notes/JavaScript/根据生日计算年龄.md"}'),o={name:"hand-notes/JavaScript/根据生日计算年龄.md"},p=l(`

根据生日计算年龄

javascript
const birthdateReg = /^(\\d{4})[-/]?(\\d{1,2})[-/]?(\\d{1,2})$/;
 // birthday => 格式 年-月-日 例如: 2022-08-18
 const calcAge = (birthday) => {
     const birthDateArr = birthdateReg.exec(\`\${birthday}\`);
diff --git "a/assets/hand-notes_JavaScript_\346\240\271\346\215\256\347\224\237\346\227\245\350\256\241\347\256\227\345\271\264\351\276\204.md.2c943e7e.lean.js" "b/assets/hand-notes_JavaScript_\346\240\271\346\215\256\347\224\237\346\227\245\350\256\241\347\256\227\345\271\264\351\276\204.md.02a203de.lean.js"
similarity index 85%
rename from "assets/hand-notes_JavaScript_\346\240\271\346\215\256\347\224\237\346\227\245\350\256\241\347\256\227\345\271\264\351\276\204.md.2c943e7e.lean.js"
rename to "assets/hand-notes_JavaScript_\346\240\271\346\215\256\347\224\237\346\227\245\350\256\241\347\256\227\345\271\264\351\276\204.md.02a203de.lean.js"
index 07fe43a4..2c201efd 100644
--- "a/assets/hand-notes_JavaScript_\346\240\271\346\215\256\347\224\237\346\227\245\350\256\241\347\256\227\345\271\264\351\276\204.md.2c943e7e.lean.js"
+++ "b/assets/hand-notes_JavaScript_\346\240\271\346\215\256\347\224\237\346\227\245\350\256\241\347\256\227\345\271\264\351\276\204.md.02a203de.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const A=JSON.parse('{"title":"根据生日计算年龄","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"hand-notes/JavaScript/根据生日计算年龄.md"}'),o={name:"hand-notes/JavaScript/根据生日计算年龄.md"},p=l("",2),t=[p];function e(c,r,y,F,D,i){return a(),n("div",null,t)}const f=s(o,[["render",e]]);export{A as __pageData,f as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const A=JSON.parse('{"title":"根据生日计算年龄","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"hand-notes/JavaScript/根据生日计算年龄.md"}'),o={name:"hand-notes/JavaScript/根据生日计算年龄.md"},p=l("",2),t=[p];function e(c,r,y,F,D,i){return a(),n("div",null,t)}const f=s(o,[["render",e]]);export{A as __pageData,f as default};
diff --git "a/assets/hand-notes_JavaScript_\351\232\217\346\234\272\346\225\260\347\232\204\345\272\224\347\224\250.md.b63afbbd.js" "b/assets/hand-notes_JavaScript_\351\232\217\346\234\272\346\225\260\347\232\204\345\272\224\347\224\250.md.a6c868ad.js"
similarity index 99%
rename from "assets/hand-notes_JavaScript_\351\232\217\346\234\272\346\225\260\347\232\204\345\272\224\347\224\250.md.b63afbbd.js"
rename to "assets/hand-notes_JavaScript_\351\232\217\346\234\272\346\225\260\347\232\204\345\272\224\347\224\250.md.a6c868ad.js"
index 7e489e9b..7c66c1ce 100644
--- "a/assets/hand-notes_JavaScript_\351\232\217\346\234\272\346\225\260\347\232\204\345\272\224\347\224\250.md.b63afbbd.js"
+++ "b/assets/hand-notes_JavaScript_\351\232\217\346\234\272\346\225\260\347\232\204\345\272\224\347\224\250.md.a6c868ad.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"随机数的应用","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"生成指定长度的随机字符串(只包含数字和字母)","slug":"生成指定长度的随机字符串-只包含数字和字母","link":"#生成指定长度的随机字符串-只包含数字和字母","children":[]},{"level":2,"title":"生成两个数字之间的随机数数字","slug":"生成两个数字之间的随机数数字","link":"#生成两个数字之间的随机数数字","children":[]},{"level":2,"title":"生成随机颜色","slug":"生成随机颜色","link":"#生成随机颜色","children":[{"level":3,"title":"生成16进制的颜色","slug":"生成16进制的颜色","link":"#生成16进制的颜色","children":[]},{"level":3,"title":"生成RGB颜色","slug":"生成rgb颜色","link":"#生成rgb颜色","children":[]}]}],"relativePath":"hand-notes/JavaScript/随机数的应用.md"}'),p={name:"hand-notes/JavaScript/随机数的应用.md"},o=l(`

随机数的应用

生成指定长度的随机字符串(只包含数字和字母)

javascript
const generateRandomStr = (strLength = 16) => {
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"随机数的应用","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"生成指定长度的随机字符串(只包含数字和字母)","slug":"生成指定长度的随机字符串-只包含数字和字母","link":"#生成指定长度的随机字符串-只包含数字和字母","children":[]},{"level":2,"title":"生成两个数字之间的随机数数字","slug":"生成两个数字之间的随机数数字","link":"#生成两个数字之间的随机数数字","children":[]},{"level":2,"title":"生成随机颜色","slug":"生成随机颜色","link":"#生成随机颜色","children":[{"level":3,"title":"生成16进制的颜色","slug":"生成16进制的颜色","link":"#生成16进制的颜色","children":[]},{"level":3,"title":"生成RGB颜色","slug":"生成rgb颜色","link":"#生成rgb颜色","children":[]}]}],"relativePath":"hand-notes/JavaScript/随机数的应用.md"}'),p={name:"hand-notes/JavaScript/随机数的应用.md"},o=l(`

随机数的应用

生成指定长度的随机字符串(只包含数字和字母)

javascript
const generateRandomStr = (strLength = 16) => {
     let key = Math.random().toString(36).substring(2)
     while (key.length < strLength) {
         key += Math.random().toString(36).substring(2)
diff --git "a/assets/hand-notes_JavaScript_\351\232\217\346\234\272\346\225\260\347\232\204\345\272\224\347\224\250.md.b63afbbd.lean.js" "b/assets/hand-notes_JavaScript_\351\232\217\346\234\272\346\225\260\347\232\204\345\272\224\347\224\250.md.a6c868ad.lean.js"
similarity index 94%
rename from "assets/hand-notes_JavaScript_\351\232\217\346\234\272\346\225\260\347\232\204\345\272\224\347\224\250.md.b63afbbd.lean.js"
rename to "assets/hand-notes_JavaScript_\351\232\217\346\234\272\346\225\260\347\232\204\345\272\224\347\224\250.md.a6c868ad.lean.js"
index d92f447d..65cf73ce 100644
--- "a/assets/hand-notes_JavaScript_\351\232\217\346\234\272\346\225\260\347\232\204\345\272\224\347\224\250.md.b63afbbd.lean.js"
+++ "b/assets/hand-notes_JavaScript_\351\232\217\346\234\272\346\225\260\347\232\204\345\272\224\347\224\250.md.a6c868ad.lean.js"
@@ -1 +1 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"随机数的应用","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"生成指定长度的随机字符串(只包含数字和字母)","slug":"生成指定长度的随机字符串-只包含数字和字母","link":"#生成指定长度的随机字符串-只包含数字和字母","children":[]},{"level":2,"title":"生成两个数字之间的随机数数字","slug":"生成两个数字之间的随机数数字","link":"#生成两个数字之间的随机数数字","children":[]},{"level":2,"title":"生成随机颜色","slug":"生成随机颜色","link":"#生成随机颜色","children":[{"level":3,"title":"生成16进制的颜色","slug":"生成16进制的颜色","link":"#生成16进制的颜色","children":[]},{"level":3,"title":"生成RGB颜色","slug":"生成rgb颜色","link":"#生成rgb颜色","children":[]}]}],"relativePath":"hand-notes/JavaScript/随机数的应用.md"}'),p={name:"hand-notes/JavaScript/随机数的应用.md"},o=l("",10),e=[o];function t(r,c,y,F,D,C){return n(),a("div",null,e)}const d=s(p,[["render",t]]);export{i as __pageData,d as default};
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"随机数的应用","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"生成指定长度的随机字符串(只包含数字和字母)","slug":"生成指定长度的随机字符串-只包含数字和字母","link":"#生成指定长度的随机字符串-只包含数字和字母","children":[]},{"level":2,"title":"生成两个数字之间的随机数数字","slug":"生成两个数字之间的随机数数字","link":"#生成两个数字之间的随机数数字","children":[]},{"level":2,"title":"生成随机颜色","slug":"生成随机颜色","link":"#生成随机颜色","children":[{"level":3,"title":"生成16进制的颜色","slug":"生成16进制的颜色","link":"#生成16进制的颜色","children":[]},{"level":3,"title":"生成RGB颜色","slug":"生成rgb颜色","link":"#生成rgb颜色","children":[]}]}],"relativePath":"hand-notes/JavaScript/随机数的应用.md"}'),p={name:"hand-notes/JavaScript/随机数的应用.md"},o=l("",10),e=[o];function t(r,c,y,F,D,C){return n(),a("div",null,e)}const d=s(p,[["render",t]]);export{i as __pageData,d as default};
diff --git a/assets/hand-notes_Linux_practice-method.md.33f8d1b8.js b/assets/hand-notes_Linux_practice-method.md.0c4a7dcf.js
similarity index 99%
rename from assets/hand-notes_Linux_practice-method.md.33f8d1b8.js
rename to assets/hand-notes_Linux_practice-method.md.0c4a7dcf.js
index 344c7520..76a36c83 100644
--- a/assets/hand-notes_Linux_practice-method.md.33f8d1b8.js
+++ b/assets/hand-notes_Linux_practice-method.md.0c4a7dcf.js
@@ -1,4 +1,4 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const F=JSON.parse('{"title":"Bash实用方法","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"通过文件路径提取文件名称/所在目录","slug":"通过文件路径提取文件名称-所在目录","link":"#通过文件路径提取文件名称-所在目录","children":[{"level":3,"title":"使用dirname获取文件所在目录","slug":"使用dirname获取文件所在目录","link":"#使用dirname获取文件所在目录","children":[]},{"level":3,"title":"使用basename获取文件名称","slug":"使用basename获取文件名称","link":"#使用basename获取文件名称","children":[]},{"level":3,"title":"使用${str##*x}截取字符串","slug":"使用-str-x-截取字符串","link":"#使用-str-x-截取字符串","children":[]},{"level":3,"title":"使用${str%.*}截取字符串","slug":"使用-str-截取字符串","link":"#使用-str-截取字符串","children":[]},{"level":3,"title":"如果不知道该文件的后缀,但是想获取该文件的名称","slug":"如果不知道该文件的后缀-但是想获取该文件的名称","link":"#如果不知道该文件的后缀-但是想获取该文件的名称","children":[]}]},{"level":2,"title":"判断变量是否包含某个字符串","slug":"判断变量是否包含某个字符串","link":"#判断变量是否包含某个字符串","children":[{"level":3,"title":"使用grep","slug":"使用grep","link":"#使用grep","children":[]},{"level":3,"title":"使用字符串运算符","slug":"使用字符串运算符","link":"#使用字符串运算符","children":[]}]},{"level":2,"title":"xargs","slug":"xargs","link":"#xargs","children":[]},{"level":2,"title":"检测某个目录是否是git仓库","slug":"检测某个目录是否是git仓库","link":"#检测某个目录是否是git仓库","children":[]},{"level":2,"title":"获取命令行参数","slug":"获取命令行参数","link":"#获取命令行参数","children":[{"level":3,"title":"使用getopts方法","slug":"使用getopts方法","link":"#使用getopts方法","children":[]}]},{"level":2,"title":"获取当前时间","slug":"获取当前时间","link":"#获取当前时间","children":[]},{"level":2,"title":"使用read和用户交互","slug":"使用read和用户交互","link":"#使用read和用户交互","children":[]},{"level":2,"title":"重定向输入和输出","slug":"重定向输入和输出","link":"#重定向输入和输出","children":[]},{"level":2,"title":"获取当前机器IP","slug":"获取当前机器ip","link":"#获取当前机器ip","children":[]}],"relativePath":"hand-notes/Linux/practice-method.md"}'),o={name:"hand-notes/Linux/practice-method.md"},e=l(`

Bash实用方法

通过文件路径提取文件名称/所在目录

使用dirname获取文件所在目录

TIP

该方法不仅可以提取文件所在的目录,还能提取目录所在的目录

使用方法:

shell
dirname NAME
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const F=JSON.parse('{"title":"Bash实用方法","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"通过文件路径提取文件名称/所在目录","slug":"通过文件路径提取文件名称-所在目录","link":"#通过文件路径提取文件名称-所在目录","children":[{"level":3,"title":"使用dirname获取文件所在目录","slug":"使用dirname获取文件所在目录","link":"#使用dirname获取文件所在目录","children":[]},{"level":3,"title":"使用basename获取文件名称","slug":"使用basename获取文件名称","link":"#使用basename获取文件名称","children":[]},{"level":3,"title":"使用${str##*x}截取字符串","slug":"使用-str-x-截取字符串","link":"#使用-str-x-截取字符串","children":[]},{"level":3,"title":"使用${str%.*}截取字符串","slug":"使用-str-截取字符串","link":"#使用-str-截取字符串","children":[]},{"level":3,"title":"如果不知道该文件的后缀,但是想获取该文件的名称","slug":"如果不知道该文件的后缀-但是想获取该文件的名称","link":"#如果不知道该文件的后缀-但是想获取该文件的名称","children":[]}]},{"level":2,"title":"判断变量是否包含某个字符串","slug":"判断变量是否包含某个字符串","link":"#判断变量是否包含某个字符串","children":[{"level":3,"title":"使用grep","slug":"使用grep","link":"#使用grep","children":[]},{"level":3,"title":"使用字符串运算符","slug":"使用字符串运算符","link":"#使用字符串运算符","children":[]}]},{"level":2,"title":"xargs","slug":"xargs","link":"#xargs","children":[]},{"level":2,"title":"检测某个目录是否是git仓库","slug":"检测某个目录是否是git仓库","link":"#检测某个目录是否是git仓库","children":[]},{"level":2,"title":"获取命令行参数","slug":"获取命令行参数","link":"#获取命令行参数","children":[{"level":3,"title":"使用getopts方法","slug":"使用getopts方法","link":"#使用getopts方法","children":[]}]},{"level":2,"title":"获取当前时间","slug":"获取当前时间","link":"#获取当前时间","children":[]},{"level":2,"title":"使用read和用户交互","slug":"使用read和用户交互","link":"#使用read和用户交互","children":[]},{"level":2,"title":"重定向输入和输出","slug":"重定向输入和输出","link":"#重定向输入和输出","children":[]},{"level":2,"title":"获取当前机器IP","slug":"获取当前机器ip","link":"#获取当前机器ip","children":[]}],"relativePath":"hand-notes/Linux/practice-method.md"}'),o={name:"hand-notes/Linux/practice-method.md"},e=l(`

Bash实用方法

通过文件路径提取文件名称/所在目录

使用dirname获取文件所在目录

TIP

该方法不仅可以提取文件所在的目录,还能提取目录所在的目录

使用方法:

shell
dirname NAME
 

示例:

shell
str="/a1/b1/c1/foo.png"
 # 输出 /a1/b1/c1
 echo $(dirname $str)
diff --git a/assets/hand-notes_Linux_practice-method.md.33f8d1b8.lean.js b/assets/hand-notes_Linux_practice-method.md.0c4a7dcf.lean.js
similarity index 97%
rename from assets/hand-notes_Linux_practice-method.md.33f8d1b8.lean.js
rename to assets/hand-notes_Linux_practice-method.md.0c4a7dcf.lean.js
index 4ee94b25..dd86a4f3 100644
--- a/assets/hand-notes_Linux_practice-method.md.33f8d1b8.lean.js
+++ b/assets/hand-notes_Linux_practice-method.md.0c4a7dcf.lean.js
@@ -1 +1 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const F=JSON.parse('{"title":"Bash实用方法","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"通过文件路径提取文件名称/所在目录","slug":"通过文件路径提取文件名称-所在目录","link":"#通过文件路径提取文件名称-所在目录","children":[{"level":3,"title":"使用dirname获取文件所在目录","slug":"使用dirname获取文件所在目录","link":"#使用dirname获取文件所在目录","children":[]},{"level":3,"title":"使用basename获取文件名称","slug":"使用basename获取文件名称","link":"#使用basename获取文件名称","children":[]},{"level":3,"title":"使用${str##*x}截取字符串","slug":"使用-str-x-截取字符串","link":"#使用-str-x-截取字符串","children":[]},{"level":3,"title":"使用${str%.*}截取字符串","slug":"使用-str-截取字符串","link":"#使用-str-截取字符串","children":[]},{"level":3,"title":"如果不知道该文件的后缀,但是想获取该文件的名称","slug":"如果不知道该文件的后缀-但是想获取该文件的名称","link":"#如果不知道该文件的后缀-但是想获取该文件的名称","children":[]}]},{"level":2,"title":"判断变量是否包含某个字符串","slug":"判断变量是否包含某个字符串","link":"#判断变量是否包含某个字符串","children":[{"level":3,"title":"使用grep","slug":"使用grep","link":"#使用grep","children":[]},{"level":3,"title":"使用字符串运算符","slug":"使用字符串运算符","link":"#使用字符串运算符","children":[]}]},{"level":2,"title":"xargs","slug":"xargs","link":"#xargs","children":[]},{"level":2,"title":"检测某个目录是否是git仓库","slug":"检测某个目录是否是git仓库","link":"#检测某个目录是否是git仓库","children":[]},{"level":2,"title":"获取命令行参数","slug":"获取命令行参数","link":"#获取命令行参数","children":[{"level":3,"title":"使用getopts方法","slug":"使用getopts方法","link":"#使用getopts方法","children":[]}]},{"level":2,"title":"获取当前时间","slug":"获取当前时间","link":"#获取当前时间","children":[]},{"level":2,"title":"使用read和用户交互","slug":"使用read和用户交互","link":"#使用read和用户交互","children":[]},{"level":2,"title":"重定向输入和输出","slug":"重定向输入和输出","link":"#重定向输入和输出","children":[]},{"level":2,"title":"获取当前机器IP","slug":"获取当前机器ip","link":"#获取当前机器ip","children":[]}],"relativePath":"hand-notes/Linux/practice-method.md"}'),o={name:"hand-notes/Linux/practice-method.md"},e=l("",54),p=[e];function t(c,r,i,D,y,d){return n(),a("div",null,p)}const A=s(o,[["render",t]]);export{F as __pageData,A as default};
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const F=JSON.parse('{"title":"Bash实用方法","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"通过文件路径提取文件名称/所在目录","slug":"通过文件路径提取文件名称-所在目录","link":"#通过文件路径提取文件名称-所在目录","children":[{"level":3,"title":"使用dirname获取文件所在目录","slug":"使用dirname获取文件所在目录","link":"#使用dirname获取文件所在目录","children":[]},{"level":3,"title":"使用basename获取文件名称","slug":"使用basename获取文件名称","link":"#使用basename获取文件名称","children":[]},{"level":3,"title":"使用${str##*x}截取字符串","slug":"使用-str-x-截取字符串","link":"#使用-str-x-截取字符串","children":[]},{"level":3,"title":"使用${str%.*}截取字符串","slug":"使用-str-截取字符串","link":"#使用-str-截取字符串","children":[]},{"level":3,"title":"如果不知道该文件的后缀,但是想获取该文件的名称","slug":"如果不知道该文件的后缀-但是想获取该文件的名称","link":"#如果不知道该文件的后缀-但是想获取该文件的名称","children":[]}]},{"level":2,"title":"判断变量是否包含某个字符串","slug":"判断变量是否包含某个字符串","link":"#判断变量是否包含某个字符串","children":[{"level":3,"title":"使用grep","slug":"使用grep","link":"#使用grep","children":[]},{"level":3,"title":"使用字符串运算符","slug":"使用字符串运算符","link":"#使用字符串运算符","children":[]}]},{"level":2,"title":"xargs","slug":"xargs","link":"#xargs","children":[]},{"level":2,"title":"检测某个目录是否是git仓库","slug":"检测某个目录是否是git仓库","link":"#检测某个目录是否是git仓库","children":[]},{"level":2,"title":"获取命令行参数","slug":"获取命令行参数","link":"#获取命令行参数","children":[{"level":3,"title":"使用getopts方法","slug":"使用getopts方法","link":"#使用getopts方法","children":[]}]},{"level":2,"title":"获取当前时间","slug":"获取当前时间","link":"#获取当前时间","children":[]},{"level":2,"title":"使用read和用户交互","slug":"使用read和用户交互","link":"#使用read和用户交互","children":[]},{"level":2,"title":"重定向输入和输出","slug":"重定向输入和输出","link":"#重定向输入和输出","children":[]},{"level":2,"title":"获取当前机器IP","slug":"获取当前机器ip","link":"#获取当前机器ip","children":[]}],"relativePath":"hand-notes/Linux/practice-method.md"}'),o={name:"hand-notes/Linux/practice-method.md"},e=l("",54),p=[e];function t(c,r,i,D,y,d){return n(),a("div",null,p)}const A=s(o,[["render",t]]);export{F as __pageData,A as default};
diff --git "a/assets/hand-notes_Linux_\345\233\276\347\211\207\345\216\213\347\274\251\345\222\214\346\240\274\345\274\217\350\275\254\346\215\242.md.7713eade.js" "b/assets/hand-notes_Linux_\345\233\276\347\211\207\345\216\213\347\274\251\345\222\214\346\240\274\345\274\217\350\275\254\346\215\242.md.7f7dde48.js"
similarity index 99%
rename from "assets/hand-notes_Linux_\345\233\276\347\211\207\345\216\213\347\274\251\345\222\214\346\240\274\345\274\217\350\275\254\346\215\242.md.7713eade.js"
rename to "assets/hand-notes_Linux_\345\233\276\347\211\207\345\216\213\347\274\251\345\222\214\346\240\274\345\274\217\350\275\254\346\215\242.md.7f7dde48.js"
index d628dc99..25b34cb2 100644
--- "a/assets/hand-notes_Linux_\345\233\276\347\211\207\345\216\213\347\274\251\345\222\214\346\240\274\345\274\217\350\275\254\346\215\242.md.7713eade.js"
+++ "b/assets/hand-notes_Linux_\345\233\276\347\211\207\345\216\213\347\274\251\345\222\214\346\240\274\345\274\217\350\275\254\346\215\242.md.7f7dde48.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"Bash 脚本记录","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"图片转为webp格式","slug":"图片转为webp格式","link":"#图片转为webp格式","children":[]},{"level":2,"title":"图片压缩","slug":"图片压缩","link":"#图片压缩","children":[]}],"relativePath":"hand-notes/Linux/图片压缩和格式转换.md"}'),p={name:"hand-notes/Linux/图片压缩和格式转换.md"},o=l(`

Bash 脚本记录

图片转为webp格式

找出指定文件夹下所有非webp格式的图片,并转换成webp

  • 支持传入单张图片地址/图片所在文件夹地址
  • 解决文件名称带空格问题参考链接
  • cwebp文档链接
shell
#! /bin/Bash
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"Bash 脚本记录","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"图片转为webp格式","slug":"图片转为webp格式","link":"#图片转为webp格式","children":[]},{"level":2,"title":"图片压缩","slug":"图片压缩","link":"#图片压缩","children":[]}],"relativePath":"hand-notes/Linux/图片压缩和格式转换.md"}'),p={name:"hand-notes/Linux/图片压缩和格式转换.md"},o=l(`

Bash 脚本记录

图片转为webp格式

找出指定文件夹下所有非webp格式的图片,并转换成webp

  • 支持传入单张图片地址/图片所在文件夹地址
  • 解决文件名称带空格问题参考链接
  • cwebp文档链接
shell
#! /bin/Bash
 set -e;
 read -p "是否删除原文件(y/n,默认n不删除): " isDeleteOriginalFile
 dir=".";
diff --git "a/assets/hand-notes_Linux_\345\233\276\347\211\207\345\216\213\347\274\251\345\222\214\346\240\274\345\274\217\350\275\254\346\215\242.md.7713eade.lean.js" "b/assets/hand-notes_Linux_\345\233\276\347\211\207\345\216\213\347\274\251\345\222\214\346\240\274\345\274\217\350\275\254\346\215\242.md.7f7dde48.lean.js"
similarity index 90%
rename from "assets/hand-notes_Linux_\345\233\276\347\211\207\345\216\213\347\274\251\345\222\214\346\240\274\345\274\217\350\275\254\346\215\242.md.7713eade.lean.js"
rename to "assets/hand-notes_Linux_\345\233\276\347\211\207\345\216\213\347\274\251\345\222\214\346\240\274\345\274\217\350\275\254\346\215\242.md.7f7dde48.lean.js"
index 30b0b9ee..68deb06c 100644
--- "a/assets/hand-notes_Linux_\345\233\276\347\211\207\345\216\213\347\274\251\345\222\214\346\240\274\345\274\217\350\275\254\346\215\242.md.7713eade.lean.js"
+++ "b/assets/hand-notes_Linux_\345\233\276\347\211\207\345\216\213\347\274\251\345\222\214\346\240\274\345\274\217\350\275\254\346\215\242.md.7f7dde48.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"Bash 脚本记录","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"图片转为webp格式","slug":"图片转为webp格式","link":"#图片转为webp格式","children":[]},{"level":2,"title":"图片压缩","slug":"图片压缩","link":"#图片压缩","children":[]}],"relativePath":"hand-notes/Linux/图片压缩和格式转换.md"}'),p={name:"hand-notes/Linux/图片压缩和格式转换.md"},o=l("",9),e=[o];function t(D,c,r,y,F,C){return a(),n("div",null,e)}const E=s(p,[["render",t]]);export{i as __pageData,E as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"Bash 脚本记录","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"图片转为webp格式","slug":"图片转为webp格式","link":"#图片转为webp格式","children":[]},{"level":2,"title":"图片压缩","slug":"图片压缩","link":"#图片压缩","children":[]}],"relativePath":"hand-notes/Linux/图片压缩和格式转换.md"}'),p={name:"hand-notes/Linux/图片压缩和格式转换.md"},o=l("",9),e=[o];function t(D,c,r,y,F,C){return a(),n("div",null,e)}const E=s(p,[["render",t]]);export{i as __pageData,E as default};
diff --git "a/assets/hand-notes_Linux_\346\226\207\344\273\266\345\216\213\347\274\251.md.a2c455af.js" "b/assets/hand-notes_Linux_\346\226\207\344\273\266\345\216\213\347\274\251.md.6a1427b0.js"
similarity index 99%
rename from "assets/hand-notes_Linux_\346\226\207\344\273\266\345\216\213\347\274\251.md.a2c455af.js"
rename to "assets/hand-notes_Linux_\346\226\207\344\273\266\345\216\213\347\274\251.md.6a1427b0.js"
index c07d87fc..b84af431 100644
--- "a/assets/hand-notes_Linux_\346\226\207\344\273\266\345\216\213\347\274\251.md.a2c455af.js"
+++ "b/assets/hand-notes_Linux_\346\226\207\344\273\266\345\216\213\347\274\251.md.6a1427b0.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as a,o as l,e as n}from"./app.7354b8c5.js";const D=JSON.parse('{"title":"文件压缩","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"zip","slug":"zip","link":"#zip","children":[{"level":3,"title":"压缩文件","slug":"压缩文件","link":"#压缩文件","children":[]},{"level":3,"title":"压缩目录","slug":"压缩目录","link":"#压缩目录","children":[]},{"level":3,"title":"解压缩文件","slug":"解压缩文件","link":"#解压缩文件","children":[]}]},{"level":2,"title":"gzip","slug":"gzip","link":"#gzip","children":[{"level":3,"title":"压缩单个文件","slug":"压缩单个文件","link":"#压缩单个文件","children":[]},{"level":3,"title":"压缩目录下的所有文件","slug":"压缩目录下的所有文件","link":"#压缩目录下的所有文件","children":[]},{"level":3,"title":"解压缩","slug":"解压缩","link":"#解压缩","children":[]}]},{"level":2,"title":"tar打包命令","slug":"tar打包命令","link":"#tar打包命令","children":[{"level":3,"title":"tar打包","slug":"tar打包","link":"#tar打包","children":[]},{"level":3,"title":"解压 tar文件","slug":"解压-tar文件","link":"#解压-tar文件","children":[]}]},{"level":2,"title":"tar.gz压缩格式","slug":"tar-gz压缩格式","link":"#tar-gz压缩格式","children":[{"level":3,"title":"打包并压缩","slug":"打包并压缩","link":"#打包并压缩","children":[]},{"level":3,"title":"解压缩","slug":"解压缩-1","link":"#解压缩-1","children":[]},{"level":3,"title":"解压.rar文件","slug":"解压-rar文件","link":"#解压-rar文件","children":[]}]}],"relativePath":"hand-notes/Linux/文件压缩.md"}'),e={name:"hand-notes/Linux/文件压缩.md"},p=n(`

文件压缩

zip

压缩文件

shell
zip targetFile.zip sourceFile
+import{_ as s,c as a,o as l,e as n}from"./app.4a806fb4.js";const D=JSON.parse('{"title":"文件压缩","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"zip","slug":"zip","link":"#zip","children":[{"level":3,"title":"压缩文件","slug":"压缩文件","link":"#压缩文件","children":[]},{"level":3,"title":"压缩目录","slug":"压缩目录","link":"#压缩目录","children":[]},{"level":3,"title":"解压缩文件","slug":"解压缩文件","link":"#解压缩文件","children":[]}]},{"level":2,"title":"gzip","slug":"gzip","link":"#gzip","children":[{"level":3,"title":"压缩单个文件","slug":"压缩单个文件","link":"#压缩单个文件","children":[]},{"level":3,"title":"压缩目录下的所有文件","slug":"压缩目录下的所有文件","link":"#压缩目录下的所有文件","children":[]},{"level":3,"title":"解压缩","slug":"解压缩","link":"#解压缩","children":[]}]},{"level":2,"title":"tar打包命令","slug":"tar打包命令","link":"#tar打包命令","children":[{"level":3,"title":"tar打包","slug":"tar打包","link":"#tar打包","children":[]},{"level":3,"title":"解压 tar文件","slug":"解压-tar文件","link":"#解压-tar文件","children":[]}]},{"level":2,"title":"tar.gz压缩格式","slug":"tar-gz压缩格式","link":"#tar-gz压缩格式","children":[{"level":3,"title":"打包并压缩","slug":"打包并压缩","link":"#打包并压缩","children":[]},{"level":3,"title":"解压缩","slug":"解压缩-1","link":"#解压缩-1","children":[]},{"level":3,"title":"解压.rar文件","slug":"解压-rar文件","link":"#解压-rar文件","children":[]}]}],"relativePath":"hand-notes/Linux/文件压缩.md"}'),e={name:"hand-notes/Linux/文件压缩.md"},p=n(`

文件压缩

zip

压缩文件

shell
zip targetFile.zip sourceFile
 

示例:

shell
zip target.zip source.txt
 

压缩目录

  • -r表示递归遍历文件夹,包括子文件夹和文件,将它们一起压缩到目标ZIP文件中
shell
zip -r targetFile.zip sourceFile
 

解压缩文件

shell
unzip source.zip	
diff --git "a/assets/hand-notes_Linux_\346\226\207\344\273\266\345\216\213\347\274\251.md.a2c455af.lean.js" "b/assets/hand-notes_Linux_\346\226\207\344\273\266\345\216\213\347\274\251.md.6a1427b0.lean.js"
similarity index 96%
rename from "assets/hand-notes_Linux_\346\226\207\344\273\266\345\216\213\347\274\251.md.a2c455af.lean.js"
rename to "assets/hand-notes_Linux_\346\226\207\344\273\266\345\216\213\347\274\251.md.6a1427b0.lean.js"
index 707f525a..5a529dfd 100644
--- "a/assets/hand-notes_Linux_\346\226\207\344\273\266\345\216\213\347\274\251.md.a2c455af.lean.js"
+++ "b/assets/hand-notes_Linux_\346\226\207\344\273\266\345\216\213\347\274\251.md.6a1427b0.lean.js"
@@ -1 +1 @@
-import{_ as s,c as a,o as l,e as n}from"./app.7354b8c5.js";const D=JSON.parse('{"title":"文件压缩","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"zip","slug":"zip","link":"#zip","children":[{"level":3,"title":"压缩文件","slug":"压缩文件","link":"#压缩文件","children":[]},{"level":3,"title":"压缩目录","slug":"压缩目录","link":"#压缩目录","children":[]},{"level":3,"title":"解压缩文件","slug":"解压缩文件","link":"#解压缩文件","children":[]}]},{"level":2,"title":"gzip","slug":"gzip","link":"#gzip","children":[{"level":3,"title":"压缩单个文件","slug":"压缩单个文件","link":"#压缩单个文件","children":[]},{"level":3,"title":"压缩目录下的所有文件","slug":"压缩目录下的所有文件","link":"#压缩目录下的所有文件","children":[]},{"level":3,"title":"解压缩","slug":"解压缩","link":"#解压缩","children":[]}]},{"level":2,"title":"tar打包命令","slug":"tar打包命令","link":"#tar打包命令","children":[{"level":3,"title":"tar打包","slug":"tar打包","link":"#tar打包","children":[]},{"level":3,"title":"解压 tar文件","slug":"解压-tar文件","link":"#解压-tar文件","children":[]}]},{"level":2,"title":"tar.gz压缩格式","slug":"tar-gz压缩格式","link":"#tar-gz压缩格式","children":[{"level":3,"title":"打包并压缩","slug":"打包并压缩","link":"#打包并压缩","children":[]},{"level":3,"title":"解压缩","slug":"解压缩-1","link":"#解压缩-1","children":[]},{"level":3,"title":"解压.rar文件","slug":"解压-rar文件","link":"#解压-rar文件","children":[]}]}],"relativePath":"hand-notes/Linux/文件压缩.md"}'),e={name:"hand-notes/Linux/文件压缩.md"},p=n("",55),o=[p];function c(t,r,i,C,d,y){return l(),a("div",null,o)}const A=s(e,[["render",c]]);export{D as __pageData,A as default};
+import{_ as s,c as a,o as l,e as n}from"./app.4a806fb4.js";const D=JSON.parse('{"title":"文件压缩","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"zip","slug":"zip","link":"#zip","children":[{"level":3,"title":"压缩文件","slug":"压缩文件","link":"#压缩文件","children":[]},{"level":3,"title":"压缩目录","slug":"压缩目录","link":"#压缩目录","children":[]},{"level":3,"title":"解压缩文件","slug":"解压缩文件","link":"#解压缩文件","children":[]}]},{"level":2,"title":"gzip","slug":"gzip","link":"#gzip","children":[{"level":3,"title":"压缩单个文件","slug":"压缩单个文件","link":"#压缩单个文件","children":[]},{"level":3,"title":"压缩目录下的所有文件","slug":"压缩目录下的所有文件","link":"#压缩目录下的所有文件","children":[]},{"level":3,"title":"解压缩","slug":"解压缩","link":"#解压缩","children":[]}]},{"level":2,"title":"tar打包命令","slug":"tar打包命令","link":"#tar打包命令","children":[{"level":3,"title":"tar打包","slug":"tar打包","link":"#tar打包","children":[]},{"level":3,"title":"解压 tar文件","slug":"解压-tar文件","link":"#解压-tar文件","children":[]}]},{"level":2,"title":"tar.gz压缩格式","slug":"tar-gz压缩格式","link":"#tar-gz压缩格式","children":[{"level":3,"title":"打包并压缩","slug":"打包并压缩","link":"#打包并压缩","children":[]},{"level":3,"title":"解压缩","slug":"解压缩-1","link":"#解压缩-1","children":[]},{"level":3,"title":"解压.rar文件","slug":"解压-rar文件","link":"#解压-rar文件","children":[]}]}],"relativePath":"hand-notes/Linux/文件压缩.md"}'),e={name:"hand-notes/Linux/文件压缩.md"},p=n("",55),o=[p];function c(t,r,i,C,d,y){return l(),a("div",null,o)}const A=s(e,[["render",c]]);export{D as __pageData,A as default};
diff --git "a/assets/hand-notes_Linux_\346\235\203\351\231\220\347\233\270\345\205\263.md.3a45c64d.js" "b/assets/hand-notes_Linux_\346\235\203\351\231\220\347\233\270\345\205\263.md.ed6eecd5.js"
similarity index 99%
rename from "assets/hand-notes_Linux_\346\235\203\351\231\220\347\233\270\345\205\263.md.3a45c64d.js"
rename to "assets/hand-notes_Linux_\346\235\203\351\231\220\347\233\270\345\205\263.md.ed6eecd5.js"
index acba52a8..2d69e6f1 100644
--- "a/assets/hand-notes_Linux_\346\235\203\351\231\220\347\233\270\345\205\263.md.3a45c64d.js"
+++ "b/assets/hand-notes_Linux_\346\235\203\351\231\220\347\233\270\345\205\263.md.ed6eecd5.js"
@@ -1,4 +1,4 @@
-import{_ as e,c as l,o as t,e as s}from"./app.7354b8c5.js";const x=JSON.parse('{"title":"权限相关","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"权限的作用","slug":"权限的作用","link":"#权限的作用","children":[]},{"level":2,"title":"权限详情","slug":"权限详情","link":"#权限详情","children":[{"level":3,"title":"文件权限","slug":"文件权限","link":"#文件权限","children":[]},{"level":3,"title":"文件夹(目录)权限","slug":"文件夹-目录-权限","link":"#文件夹-目录-权限","children":[]},{"level":3,"title":"权限位","slug":"权限位","link":"#权限位","children":[]}]},{"level":2,"title":"修改权限","slug":"修改权限","link":"#修改权限","children":[{"level":3,"title":"chmod","slug":"chmod","link":"#chmod","children":[]},{"level":3,"title":"chown","slug":"chown","link":"#chown","children":[]},{"level":3,"title":"chgrp","slug":"chgrp","link":"#chgrp","children":[]}]}],"relativePath":"hand-notes/Linux/权限相关.md"}'),a={name:"hand-notes/Linux/权限相关.md"},o=s(`

权限相关

权限的作用

  • 文件来说最高权限是x(可执行)

  • 目录来讲最高权限是w(可写),对目录有了w权限,就可以做任何事情

权限详情

权限项执行
字符表示rwx
数字表示421

文件权限

权限含义示例
r读取文件内容catmoreheadtail
w编辑、新增、修改文件内容,不能删除文件,除非对目录有写权限vimecho
x可执行./xxx.sh

文件夹(目录)权限

权限含义示例
r可以查看目录下的文件名lsllla
w具有修改目录结构的权限。如新建删除重命名此目录下的文件和目录touchrmmvcp
x可进入目录cd

权限位

执行la,查看权限,例如:drwx------

shell
  js-project la
+import{_ as e,c as l,o as t,e as s}from"./app.4a806fb4.js";const x=JSON.parse('{"title":"权限相关","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"权限的作用","slug":"权限的作用","link":"#权限的作用","children":[]},{"level":2,"title":"权限详情","slug":"权限详情","link":"#权限详情","children":[{"level":3,"title":"文件权限","slug":"文件权限","link":"#文件权限","children":[]},{"level":3,"title":"文件夹(目录)权限","slug":"文件夹-目录-权限","link":"#文件夹-目录-权限","children":[]},{"level":3,"title":"权限位","slug":"权限位","link":"#权限位","children":[]}]},{"level":2,"title":"修改权限","slug":"修改权限","link":"#修改权限","children":[{"level":3,"title":"chmod","slug":"chmod","link":"#chmod","children":[]},{"level":3,"title":"chown","slug":"chown","link":"#chown","children":[]},{"level":3,"title":"chgrp","slug":"chgrp","link":"#chgrp","children":[]}]}],"relativePath":"hand-notes/Linux/权限相关.md"}'),a={name:"hand-notes/Linux/权限相关.md"},o=s(`

权限相关

权限的作用

  • 文件来说最高权限是x(可执行)

  • 目录来讲最高权限是w(可写),对目录有了w权限,就可以做任何事情

权限详情

权限项执行
字符表示rwx
数字表示421

文件权限

权限含义示例
r读取文件内容catmoreheadtail
w编辑、新增、修改文件内容,不能删除文件,除非对目录有写权限vimecho
x可执行./xxx.sh

文件夹(目录)权限

权限含义示例
r可以查看目录下的文件名lsllla
w具有修改目录结构的权限。如新建删除重命名此目录下的文件和目录touchrmmvcp
x可进入目录cd

权限位

执行la,查看权限,例如:drwx------

shell
  js-project la
 total 72
 drwxr-xr-x@  
 drwxr-xr-x@ 
diff --git "a/assets/hand-notes_Linux_\346\235\203\351\231\220\347\233\270\345\205\263.md.3a45c64d.lean.js" "b/assets/hand-notes_Linux_\346\235\203\351\231\220\347\233\270\345\205\263.md.ed6eecd5.lean.js"
similarity index 94%
rename from "assets/hand-notes_Linux_\346\235\203\351\231\220\347\233\270\345\205\263.md.3a45c64d.lean.js"
rename to "assets/hand-notes_Linux_\346\235\203\351\231\220\347\233\270\345\205\263.md.ed6eecd5.lean.js"
index faac2a6d..a06ced6a 100644
--- "a/assets/hand-notes_Linux_\346\235\203\351\231\220\347\233\270\345\205\263.md.3a45c64d.lean.js"
+++ "b/assets/hand-notes_Linux_\346\235\203\351\231\220\347\233\270\345\205\263.md.ed6eecd5.lean.js"
@@ -1 +1 @@
-import{_ as e,c as l,o as t,e as s}from"./app.7354b8c5.js";const x=JSON.parse('{"title":"权限相关","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"权限的作用","slug":"权限的作用","link":"#权限的作用","children":[]},{"level":2,"title":"权限详情","slug":"权限详情","link":"#权限详情","children":[{"level":3,"title":"文件权限","slug":"文件权限","link":"#文件权限","children":[]},{"level":3,"title":"文件夹(目录)权限","slug":"文件夹-目录-权限","link":"#文件夹-目录-权限","children":[]},{"level":3,"title":"权限位","slug":"权限位","link":"#权限位","children":[]}]},{"level":2,"title":"修改权限","slug":"修改权限","link":"#修改权限","children":[{"level":3,"title":"chmod","slug":"chmod","link":"#chmod","children":[]},{"level":3,"title":"chown","slug":"chown","link":"#chown","children":[]},{"level":3,"title":"chgrp","slug":"chgrp","link":"#chgrp","children":[]}]}],"relativePath":"hand-notes/Linux/权限相关.md"}'),a={name:"hand-notes/Linux/权限相关.md"},o=s("",27),n=[o];function c(d,r,i,p,h,y){return t(),l("div",null,n)}const g=e(a,[["render",c]]);export{x as __pageData,g as default};
+import{_ as e,c as l,o as t,e as s}from"./app.4a806fb4.js";const x=JSON.parse('{"title":"权限相关","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"权限的作用","slug":"权限的作用","link":"#权限的作用","children":[]},{"level":2,"title":"权限详情","slug":"权限详情","link":"#权限详情","children":[{"level":3,"title":"文件权限","slug":"文件权限","link":"#文件权限","children":[]},{"level":3,"title":"文件夹(目录)权限","slug":"文件夹-目录-权限","link":"#文件夹-目录-权限","children":[]},{"level":3,"title":"权限位","slug":"权限位","link":"#权限位","children":[]}]},{"level":2,"title":"修改权限","slug":"修改权限","link":"#修改权限","children":[{"level":3,"title":"chmod","slug":"chmod","link":"#chmod","children":[]},{"level":3,"title":"chown","slug":"chown","link":"#chown","children":[]},{"level":3,"title":"chgrp","slug":"chgrp","link":"#chgrp","children":[]}]}],"relativePath":"hand-notes/Linux/权限相关.md"}'),a={name:"hand-notes/Linux/权限相关.md"},o=s("",27),n=[o];function c(d,r,i,p,h,y){return t(),l("div",null,n)}const g=e(a,[["render",c]]);export{x as __pageData,g as default};
diff --git "a/assets/hand-notes_Linux_\347\224\250\346\210\267\346\223\215\344\275\234\347\233\270\345\205\263.md.e102ddb9.js" "b/assets/hand-notes_Linux_\347\224\250\346\210\267\346\223\215\344\275\234\347\233\270\345\205\263.md.dd43f7a7.js"
similarity index 98%
rename from "assets/hand-notes_Linux_\347\224\250\346\210\267\346\223\215\344\275\234\347\233\270\345\205\263.md.e102ddb9.js"
rename to "assets/hand-notes_Linux_\347\224\250\346\210\267\346\223\215\344\275\234\347\233\270\345\205\263.md.dd43f7a7.js"
index 2dcfa707..a7c3acd1 100644
--- "a/assets/hand-notes_Linux_\347\224\250\346\210\267\346\223\215\344\275\234\347\233\270\345\205\263.md.e102ddb9.js"
+++ "b/assets/hand-notes_Linux_\347\224\250\346\210\267\346\223\215\344\275\234\347\233\270\345\205\263.md.dd43f7a7.js"
@@ -1,4 +1,4 @@
-import{_ as a,c as s,o as e,e as l}from"./app.7354b8c5.js";const _=JSON.parse('{"title":"用户操作相关","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"查看用户列表","slug":"查看用户列表","link":"#查看用户列表","children":[]},{"level":2,"title":"切换用户","slug":"切换用户","link":"#切换用户","children":[]},{"level":2,"title":"root用户才有的操作","slug":"root用户才有的操作","link":"#root用户才有的操作","children":[{"level":3,"title":"添加新用户","slug":"添加新用户","link":"#添加新用户","children":[]},{"level":3,"title":"给已创建的用户user设置密码","slug":"给已创建的用户user设置密码","link":"#给已创建的用户user设置密码","children":[]},{"level":3,"title":"为用户添加权限","slug":"为用户添加权限","link":"#为用户添加权限","children":[]}]}],"relativePath":"hand-notes/Linux/用户操作相关.md"}'),n={name:"hand-notes/Linux/用户操作相关.md"},t=l(`

用户操作相关

查看用户列表

shell
cat /etc/passwd
+import{_ as a,c as s,o as e,e as l}from"./app.4a806fb4.js";const _=JSON.parse('{"title":"用户操作相关","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"查看用户列表","slug":"查看用户列表","link":"#查看用户列表","children":[]},{"level":2,"title":"切换用户","slug":"切换用户","link":"#切换用户","children":[]},{"level":2,"title":"root用户才有的操作","slug":"root用户才有的操作","link":"#root用户才有的操作","children":[{"level":3,"title":"添加新用户","slug":"添加新用户","link":"#添加新用户","children":[]},{"level":3,"title":"给已创建的用户user设置密码","slug":"给已创建的用户user设置密码","link":"#给已创建的用户user设置密码","children":[]},{"level":3,"title":"为用户添加权限","slug":"为用户添加权限","link":"#为用户添加权限","children":[]}]}],"relativePath":"hand-notes/Linux/用户操作相关.md"}'),n={name:"hand-notes/Linux/用户操作相关.md"},t=l(`

用户操作相关

查看用户列表

shell
cat /etc/passwd
 

切换用户

shell
su username
 

root用户才有的操作

WARNING

以下操作只有root账号才可以可用

添加新用户

shell
adduser username
 

给已创建的用户user设置密码

shell
passwd username
diff --git "a/assets/hand-notes_Linux_\347\224\250\346\210\267\346\223\215\344\275\234\347\233\270\345\205\263.md.e102ddb9.lean.js" "b/assets/hand-notes_Linux_\347\224\250\346\210\267\346\223\215\344\275\234\347\233\270\345\205\263.md.dd43f7a7.lean.js"
similarity index 94%
rename from "assets/hand-notes_Linux_\347\224\250\346\210\267\346\223\215\344\275\234\347\233\270\345\205\263.md.e102ddb9.lean.js"
rename to "assets/hand-notes_Linux_\347\224\250\346\210\267\346\223\215\344\275\234\347\233\270\345\205\263.md.dd43f7a7.lean.js"
index 6a62b5c1..b8cfb35a 100644
--- "a/assets/hand-notes_Linux_\347\224\250\346\210\267\346\223\215\344\275\234\347\233\270\345\205\263.md.e102ddb9.lean.js"
+++ "b/assets/hand-notes_Linux_\347\224\250\346\210\267\346\223\215\344\275\234\347\233\270\345\205\263.md.dd43f7a7.lean.js"
@@ -1 +1 @@
-import{_ as a,c as s,o as e,e as l}from"./app.7354b8c5.js";const _=JSON.parse('{"title":"用户操作相关","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"查看用户列表","slug":"查看用户列表","link":"#查看用户列表","children":[]},{"level":2,"title":"切换用户","slug":"切换用户","link":"#切换用户","children":[]},{"level":2,"title":"root用户才有的操作","slug":"root用户才有的操作","link":"#root用户才有的操作","children":[{"level":3,"title":"添加新用户","slug":"添加新用户","link":"#添加新用户","children":[]},{"level":3,"title":"给已创建的用户user设置密码","slug":"给已创建的用户user设置密码","link":"#给已创建的用户user设置密码","children":[]},{"level":3,"title":"为用户添加权限","slug":"为用户添加权限","link":"#为用户添加权限","children":[]}]}],"relativePath":"hand-notes/Linux/用户操作相关.md"}'),n={name:"hand-notes/Linux/用户操作相关.md"},t=l("",14),o=[t];function i(c,p,r,d,h,u){return e(),s("div",null,o)}const g=a(n,[["render",i]]);export{_ as __pageData,g as default};
+import{_ as a,c as s,o as e,e as l}from"./app.4a806fb4.js";const _=JSON.parse('{"title":"用户操作相关","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"查看用户列表","slug":"查看用户列表","link":"#查看用户列表","children":[]},{"level":2,"title":"切换用户","slug":"切换用户","link":"#切换用户","children":[]},{"level":2,"title":"root用户才有的操作","slug":"root用户才有的操作","link":"#root用户才有的操作","children":[{"level":3,"title":"添加新用户","slug":"添加新用户","link":"#添加新用户","children":[]},{"level":3,"title":"给已创建的用户user设置密码","slug":"给已创建的用户user设置密码","link":"#给已创建的用户user设置密码","children":[]},{"level":3,"title":"为用户添加权限","slug":"为用户添加权限","link":"#为用户添加权限","children":[]}]}],"relativePath":"hand-notes/Linux/用户操作相关.md"}'),n={name:"hand-notes/Linux/用户操作相关.md"},t=l("",14),o=[t];function i(c,p,r,d,h,u){return e(),s("div",null,o)}const g=a(n,[["render",i]]);export{_ as __pageData,g as default};
diff --git "a/assets/hand-notes_Linux_\350\256\241\347\256\227\345\215\207\347\272\247\347\211\210\346\234\254\345\217\267.md.9d69f23b.js" "b/assets/hand-notes_Linux_\350\256\241\347\256\227\345\215\207\347\272\247\347\211\210\346\234\254\345\217\267.md.9aeefd68.js"
similarity index 99%
rename from "assets/hand-notes_Linux_\350\256\241\347\256\227\345\215\207\347\272\247\347\211\210\346\234\254\345\217\267.md.9d69f23b.js"
rename to "assets/hand-notes_Linux_\350\256\241\347\256\227\345\215\207\347\272\247\347\211\210\346\234\254\345\217\267.md.9aeefd68.js"
index 52128dc0..a256357d 100644
--- "a/assets/hand-notes_Linux_\350\256\241\347\256\227\345\215\207\347\272\247\347\211\210\346\234\254\345\217\267.md.9d69f23b.js"
+++ "b/assets/hand-notes_Linux_\350\256\241\347\256\227\345\215\207\347\272\247\347\211\210\346\234\254\345\217\267.md.9aeefd68.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as o}from"./app.7354b8c5.js";const l="/static-blog/image/Linux/version.png",_=JSON.parse('{"title":"计算升级版本号","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"hand-notes/Linux/计算升级版本号.md"}'),p={name:"hand-notes/Linux/计算升级版本号.md"},e=o('

计算升级版本号

  • 根据当前的版本号计算升级版本后的号,支持自定义版本号

效果如下:

version

shell
current_version="5.0.0"
+import{_ as s,c as n,o as a,e as o}from"./app.4a806fb4.js";const l="/static-blog/image/Linux/version.png",_=JSON.parse('{"title":"计算升级版本号","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"hand-notes/Linux/计算升级版本号.md"}'),p={name:"hand-notes/Linux/计算升级版本号.md"},e=o('

计算升级版本号

  • 根据当前的版本号计算升级版本后的号,支持自定义版本号

效果如下:

version

shell
current_version="5.0.0"
 echo "当前的版本为【\${current_version}"
 # 计算要升级的版本号
 # 分割当前版本号为主版本、次版本和修订版本
diff --git "a/assets/hand-notes_Linux_\350\256\241\347\256\227\345\215\207\347\272\247\347\211\210\346\234\254\345\217\267.md.9d69f23b.lean.js" "b/assets/hand-notes_Linux_\350\256\241\347\256\227\345\215\207\347\272\247\347\211\210\346\234\254\345\217\267.md.9aeefd68.lean.js"
similarity index 86%
rename from "assets/hand-notes_Linux_\350\256\241\347\256\227\345\215\207\347\272\247\347\211\210\346\234\254\345\217\267.md.9d69f23b.lean.js"
rename to "assets/hand-notes_Linux_\350\256\241\347\256\227\345\215\207\347\272\247\347\211\210\346\234\254\345\217\267.md.9aeefd68.lean.js"
index bf925a3f..76353942 100644
--- "a/assets/hand-notes_Linux_\350\256\241\347\256\227\345\215\207\347\272\247\347\211\210\346\234\254\345\217\267.md.9d69f23b.lean.js"
+++ "b/assets/hand-notes_Linux_\350\256\241\347\256\227\345\215\207\347\272\247\347\211\210\346\234\254\345\217\267.md.9aeefd68.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as o}from"./app.7354b8c5.js";const l="/static-blog/image/Linux/version.png",_=JSON.parse('{"title":"计算升级版本号","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"hand-notes/Linux/计算升级版本号.md"}'),p={name:"hand-notes/Linux/计算升级版本号.md"},e=o("",8),t=[e];function c(r,D,y,F,i,C){return a(),n("div",null,t)}const d=s(p,[["render",c]]);export{_ as __pageData,d as default};
+import{_ as s,c as n,o as a,e as o}from"./app.4a806fb4.js";const l="/static-blog/image/Linux/version.png",_=JSON.parse('{"title":"计算升级版本号","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"hand-notes/Linux/计算升级版本号.md"}'),p={name:"hand-notes/Linux/计算升级版本号.md"},e=o("",8),t=[e];function c(r,D,y,F,i,C){return a(),n("div",null,t)}const d=s(p,[["render",c]]);export{_ as __pageData,d as default};
diff --git a/assets/hand-notes_Mac_frequently-commands.md.95a50733.js b/assets/hand-notes_Mac_frequently-commands.md.5cc2cd17.js
similarity index 99%
rename from assets/hand-notes_Mac_frequently-commands.md.95a50733.js
rename to assets/hand-notes_Mac_frequently-commands.md.5cc2cd17.js
index c4e45a08..ba91b80d 100644
--- a/assets/hand-notes_Mac_frequently-commands.md.95a50733.js
+++ b/assets/hand-notes_Mac_frequently-commands.md.5cc2cd17.js
@@ -1,4 +1,4 @@
-import{_ as s,c as a,o as l,e as n}from"./app.7354b8c5.js";const d=JSON.parse('{"title":"Mac 使用小记","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"电脑没声音,播放不出声音","slug":"电脑没声音-播放不出声音","link":"#电脑没声音-播放不出声音","children":[]},{"level":2,"title":"设置mac光标移动速度","slug":"设置mac光标移动速度","link":"#设置mac光标移动速度","children":[]},{"level":2,"title":"安装软件失败问题解决","slug":"安装软件失败问题解决","link":"#安装软件失败问题解决","children":[]},{"level":2,"title":"命令行关机","slug":"命令行关机","link":"#命令行关机","children":[]},{"level":2,"title":"Mac中开启一个不存在跨域的Chrome窗口","slug":"mac中开启一个不存在跨域的chrome窗口","link":"#mac中开启一个不存在跨域的chrome窗口","children":[]},{"level":2,"title":"解决Mac升级为Big Sur系统后brew命令失效的问题","slug":"解决mac升级为big-sur系统后brew命令失效的问题","link":"#解决mac升级为big-sur系统后brew命令失效的问题","children":[]},{"level":2,"title":"电脑连接WIFI失败","slug":"电脑连接wifi失败","link":"#电脑连接wifi失败","children":[]},{"level":2,"title":"homebrew下载软件出错","slug":"homebrew下载软件出错","link":"#homebrew下载软件出错","children":[]},{"level":2,"title":"Mac双开微信","slug":"mac双开微信","link":"#mac双开微信","children":[]}],"relativePath":"hand-notes/Mac/frequently-commands.md"}'),o={name:"hand-notes/Mac/frequently-commands.md"},p=n(`

Mac 使用小记

电脑没声音,播放不出声音

  • 重启电脑声音
shell
sudo killall coreaudiod
+import{_ as s,c as a,o as l,e as n}from"./app.4a806fb4.js";const d=JSON.parse('{"title":"Mac 使用小记","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"电脑没声音,播放不出声音","slug":"电脑没声音-播放不出声音","link":"#电脑没声音-播放不出声音","children":[]},{"level":2,"title":"设置mac光标移动速度","slug":"设置mac光标移动速度","link":"#设置mac光标移动速度","children":[]},{"level":2,"title":"安装软件失败问题解决","slug":"安装软件失败问题解决","link":"#安装软件失败问题解决","children":[]},{"level":2,"title":"命令行关机","slug":"命令行关机","link":"#命令行关机","children":[]},{"level":2,"title":"Mac中开启一个不存在跨域的Chrome窗口","slug":"mac中开启一个不存在跨域的chrome窗口","link":"#mac中开启一个不存在跨域的chrome窗口","children":[]},{"level":2,"title":"解决Mac升级为Big Sur系统后brew命令失效的问题","slug":"解决mac升级为big-sur系统后brew命令失效的问题","link":"#解决mac升级为big-sur系统后brew命令失效的问题","children":[]},{"level":2,"title":"电脑连接WIFI失败","slug":"电脑连接wifi失败","link":"#电脑连接wifi失败","children":[]},{"level":2,"title":"homebrew下载软件出错","slug":"homebrew下载软件出错","link":"#homebrew下载软件出错","children":[]},{"level":2,"title":"Mac双开微信","slug":"mac双开微信","link":"#mac双开微信","children":[]}],"relativePath":"hand-notes/Mac/frequently-commands.md"}'),o={name:"hand-notes/Mac/frequently-commands.md"},p=n(`

Mac 使用小记

电脑没声音,播放不出声音

  • 重启电脑声音
shell
sudo killall coreaudiod
 

设置mac光标移动速度

shell
defaults write NSGlobalDomain KeyRepeat -int 1
 

KeyRepeat对应的是按键重复,系统设置里调到最快对应的值是2,你可以调成0或者1(建议调为10可能会太快)

shell
defaults write NSGlobalDomain InitialKeyRepeat -int 15
 

InitialKeyRepeat对应的是重复前延迟,系统设置里调到最快对应的值是15,可以尝试调成10或者更小,不过建议保持15,因为反应时间太快会容易导致误操作(比如Esc键和Command-Z这样的快捷键)

安装软件失败问题解决

问题: 安装一些软件可能会出现这个报错:「xxx.app已损坏,打不开。你应该将它移到废纸篓」,并非你安装的软件已损坏,而是Mac系统的安全设置问题

解决方法:

shell
sudo spctl --master-disable
diff --git a/assets/hand-notes_Mac_frequently-commands.md.95a50733.lean.js b/assets/hand-notes_Mac_frequently-commands.md.5cc2cd17.lean.js
similarity index 96%
rename from assets/hand-notes_Mac_frequently-commands.md.95a50733.lean.js
rename to assets/hand-notes_Mac_frequently-commands.md.5cc2cd17.lean.js
index 7943194c..61f4bcc6 100644
--- a/assets/hand-notes_Mac_frequently-commands.md.95a50733.lean.js
+++ b/assets/hand-notes_Mac_frequently-commands.md.5cc2cd17.lean.js
@@ -1 +1 @@
-import{_ as s,c as a,o as l,e as n}from"./app.7354b8c5.js";const d=JSON.parse('{"title":"Mac 使用小记","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"电脑没声音,播放不出声音","slug":"电脑没声音-播放不出声音","link":"#电脑没声音-播放不出声音","children":[]},{"level":2,"title":"设置mac光标移动速度","slug":"设置mac光标移动速度","link":"#设置mac光标移动速度","children":[]},{"level":2,"title":"安装软件失败问题解决","slug":"安装软件失败问题解决","link":"#安装软件失败问题解决","children":[]},{"level":2,"title":"命令行关机","slug":"命令行关机","link":"#命令行关机","children":[]},{"level":2,"title":"Mac中开启一个不存在跨域的Chrome窗口","slug":"mac中开启一个不存在跨域的chrome窗口","link":"#mac中开启一个不存在跨域的chrome窗口","children":[]},{"level":2,"title":"解决Mac升级为Big Sur系统后brew命令失效的问题","slug":"解决mac升级为big-sur系统后brew命令失效的问题","link":"#解决mac升级为big-sur系统后brew命令失效的问题","children":[]},{"level":2,"title":"电脑连接WIFI失败","slug":"电脑连接wifi失败","link":"#电脑连接wifi失败","children":[]},{"level":2,"title":"homebrew下载软件出错","slug":"homebrew下载软件出错","link":"#homebrew下载软件出错","children":[]},{"level":2,"title":"Mac双开微信","slug":"mac双开微信","link":"#mac双开微信","children":[]}],"relativePath":"hand-notes/Mac/frequently-commands.md"}'),o={name:"hand-notes/Mac/frequently-commands.md"},p=n("",55),e=[p];function c(t,r,C,y,i,D){return l(),a("div",null,e)}const h=s(o,[["render",c]]);export{d as __pageData,h as default};
+import{_ as s,c as a,o as l,e as n}from"./app.4a806fb4.js";const d=JSON.parse('{"title":"Mac 使用小记","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"电脑没声音,播放不出声音","slug":"电脑没声音-播放不出声音","link":"#电脑没声音-播放不出声音","children":[]},{"level":2,"title":"设置mac光标移动速度","slug":"设置mac光标移动速度","link":"#设置mac光标移动速度","children":[]},{"level":2,"title":"安装软件失败问题解决","slug":"安装软件失败问题解决","link":"#安装软件失败问题解决","children":[]},{"level":2,"title":"命令行关机","slug":"命令行关机","link":"#命令行关机","children":[]},{"level":2,"title":"Mac中开启一个不存在跨域的Chrome窗口","slug":"mac中开启一个不存在跨域的chrome窗口","link":"#mac中开启一个不存在跨域的chrome窗口","children":[]},{"level":2,"title":"解决Mac升级为Big Sur系统后brew命令失效的问题","slug":"解决mac升级为big-sur系统后brew命令失效的问题","link":"#解决mac升级为big-sur系统后brew命令失效的问题","children":[]},{"level":2,"title":"电脑连接WIFI失败","slug":"电脑连接wifi失败","link":"#电脑连接wifi失败","children":[]},{"level":2,"title":"homebrew下载软件出错","slug":"homebrew下载软件出错","link":"#homebrew下载软件出错","children":[]},{"level":2,"title":"Mac双开微信","slug":"mac双开微信","link":"#mac双开微信","children":[]}],"relativePath":"hand-notes/Mac/frequently-commands.md"}'),o={name:"hand-notes/Mac/frequently-commands.md"},p=n("",55),e=[p];function c(t,r,C,y,i,D){return l(),a("div",null,e)}const h=s(o,[["render",c]]);export{d as __pageData,h as default};
diff --git a/assets/hand-notes_Mac_init.md.4cdb4ee1.js b/assets/hand-notes_Mac_init.md.47271201.js
similarity index 99%
rename from assets/hand-notes_Mac_init.md.4cdb4ee1.js
rename to assets/hand-notes_Mac_init.md.47271201.js
index 0951e92f..707cd6df 100644
--- a/assets/hand-notes_Mac_init.md.4cdb4ee1.js
+++ b/assets/hand-notes_Mac_init.md.47271201.js
@@ -1,4 +1,4 @@
-import{_ as e,c as a,o as l,e as s}from"./app.7354b8c5.js";const y=JSON.parse('{"title":"Mac环境初始化","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"Mac软件","slug":"mac软件","link":"#mac软件","children":[{"level":3,"title":"Homebrew","slug":"homebrew","link":"#homebrew","children":[]},{"level":3,"title":"iterm2","slug":"iterm2","link":"#iterm2","children":[]},{"level":3,"title":"Warp","slug":"warp","link":"#warp","children":[]},{"level":3,"title":"Bob","slug":"bob","link":"#bob","children":[]},{"level":3,"title":"lrzsz","slug":"lrzsz","link":"#lrzsz","children":[]},{"level":3,"title":"Hammerspoon","slug":"hammerspoon","link":"#hammerspoon","children":[]},{"level":3,"title":"charles","slug":"charles","link":"#charles","children":[]}]},{"level":2,"title":"开发环境配置","slug":"开发环境配置","link":"#开发环境配置","children":[{"level":3,"title":"fnm","slug":"fnm","link":"#fnm","children":[]},{"level":3,"title":"pnpm","slug":"pnpm","link":"#pnpm","children":[]},{"level":3,"title":"yarn","slug":"yarn","link":"#yarn","children":[]},{"level":3,"title":"docker","slug":"docker","link":"#docker","children":[]},{"level":3,"title":"neovim","slug":"neovim","link":"#neovim","children":[]},{"level":3,"title":"Android Studio","slug":"android-studio","link":"#android-studio","children":[]},{"level":3,"title":"Conda","slug":"conda","link":"#conda","children":[]},{"level":3,"title":"jenv","slug":"jenv","link":"#jenv","children":[]}]},{"level":2,"title":"其他软件","slug":"其他软件","link":"#其他软件","children":[]},{"level":2,"title":"其他收藏/参考","slug":"其他收藏-参考","link":"#其他收藏-参考","children":[]}],"relativePath":"hand-notes/Mac/init.md"}'),n={name:"hand-notes/Mac/init.md"},t=s(`

Mac环境初始化

Mac软件


Homebrew

官网地址

shell
/bin/Bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
+import{_ as e,c as a,o as l,e as s}from"./app.4a806fb4.js";const y=JSON.parse('{"title":"Mac环境初始化","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"Mac软件","slug":"mac软件","link":"#mac软件","children":[{"level":3,"title":"Homebrew","slug":"homebrew","link":"#homebrew","children":[]},{"level":3,"title":"iterm2","slug":"iterm2","link":"#iterm2","children":[]},{"level":3,"title":"Warp","slug":"warp","link":"#warp","children":[]},{"level":3,"title":"Bob","slug":"bob","link":"#bob","children":[]},{"level":3,"title":"lrzsz","slug":"lrzsz","link":"#lrzsz","children":[]},{"level":3,"title":"Hammerspoon","slug":"hammerspoon","link":"#hammerspoon","children":[]},{"level":3,"title":"charles","slug":"charles","link":"#charles","children":[]}]},{"level":2,"title":"开发环境配置","slug":"开发环境配置","link":"#开发环境配置","children":[{"level":3,"title":"fnm","slug":"fnm","link":"#fnm","children":[]},{"level":3,"title":"pnpm","slug":"pnpm","link":"#pnpm","children":[]},{"level":3,"title":"yarn","slug":"yarn","link":"#yarn","children":[]},{"level":3,"title":"docker","slug":"docker","link":"#docker","children":[]},{"level":3,"title":"neovim","slug":"neovim","link":"#neovim","children":[]},{"level":3,"title":"Android Studio","slug":"android-studio","link":"#android-studio","children":[]},{"level":3,"title":"Conda","slug":"conda","link":"#conda","children":[]},{"level":3,"title":"jenv","slug":"jenv","link":"#jenv","children":[]}]},{"level":2,"title":"其他软件","slug":"其他软件","link":"#其他软件","children":[]},{"level":2,"title":"其他收藏/参考","slug":"其他收藏-参考","link":"#其他收藏-参考","children":[]}],"relativePath":"hand-notes/Mac/init.md"}'),n={name:"hand-notes/Mac/init.md"},t=s(`

Mac环境初始化

Mac软件


Homebrew

官网地址

shell
/bin/Bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
 

brew所有命令执行完注意查看warning或相应提示,避免掉坑,例如M1环境安装后会有以下提示

shell
==> Next steps:
 - Run these two commands in your terminal to add Homebrew to your PATH:
     echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
diff --git a/assets/hand-notes_Mac_init.md.4cdb4ee1.lean.js b/assets/hand-notes_Mac_init.md.47271201.lean.js
similarity index 96%
rename from assets/hand-notes_Mac_init.md.4cdb4ee1.lean.js
rename to assets/hand-notes_Mac_init.md.47271201.lean.js
index 7370cb8f..19e3fa42 100644
--- a/assets/hand-notes_Mac_init.md.4cdb4ee1.lean.js
+++ b/assets/hand-notes_Mac_init.md.47271201.lean.js
@@ -1 +1 @@
-import{_ as e,c as a,o as l,e as s}from"./app.7354b8c5.js";const y=JSON.parse('{"title":"Mac环境初始化","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"Mac软件","slug":"mac软件","link":"#mac软件","children":[{"level":3,"title":"Homebrew","slug":"homebrew","link":"#homebrew","children":[]},{"level":3,"title":"iterm2","slug":"iterm2","link":"#iterm2","children":[]},{"level":3,"title":"Warp","slug":"warp","link":"#warp","children":[]},{"level":3,"title":"Bob","slug":"bob","link":"#bob","children":[]},{"level":3,"title":"lrzsz","slug":"lrzsz","link":"#lrzsz","children":[]},{"level":3,"title":"Hammerspoon","slug":"hammerspoon","link":"#hammerspoon","children":[]},{"level":3,"title":"charles","slug":"charles","link":"#charles","children":[]}]},{"level":2,"title":"开发环境配置","slug":"开发环境配置","link":"#开发环境配置","children":[{"level":3,"title":"fnm","slug":"fnm","link":"#fnm","children":[]},{"level":3,"title":"pnpm","slug":"pnpm","link":"#pnpm","children":[]},{"level":3,"title":"yarn","slug":"yarn","link":"#yarn","children":[]},{"level":3,"title":"docker","slug":"docker","link":"#docker","children":[]},{"level":3,"title":"neovim","slug":"neovim","link":"#neovim","children":[]},{"level":3,"title":"Android Studio","slug":"android-studio","link":"#android-studio","children":[]},{"level":3,"title":"Conda","slug":"conda","link":"#conda","children":[]},{"level":3,"title":"jenv","slug":"jenv","link":"#jenv","children":[]}]},{"level":2,"title":"其他软件","slug":"其他软件","link":"#其他软件","children":[]},{"level":2,"title":"其他收藏/参考","slug":"其他收藏-参考","link":"#其他收藏-参考","children":[]}],"relativePath":"hand-notes/Mac/init.md"}'),n={name:"hand-notes/Mac/init.md"},t=s("",77),r=[t];function o(c,i,p,d,h,u){return l(),a("div",null,r)}const C=e(n,[["render",o]]);export{y as __pageData,C as default};
+import{_ as e,c as a,o as l,e as s}from"./app.4a806fb4.js";const y=JSON.parse('{"title":"Mac环境初始化","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"Mac软件","slug":"mac软件","link":"#mac软件","children":[{"level":3,"title":"Homebrew","slug":"homebrew","link":"#homebrew","children":[]},{"level":3,"title":"iterm2","slug":"iterm2","link":"#iterm2","children":[]},{"level":3,"title":"Warp","slug":"warp","link":"#warp","children":[]},{"level":3,"title":"Bob","slug":"bob","link":"#bob","children":[]},{"level":3,"title":"lrzsz","slug":"lrzsz","link":"#lrzsz","children":[]},{"level":3,"title":"Hammerspoon","slug":"hammerspoon","link":"#hammerspoon","children":[]},{"level":3,"title":"charles","slug":"charles","link":"#charles","children":[]}]},{"level":2,"title":"开发环境配置","slug":"开发环境配置","link":"#开发环境配置","children":[{"level":3,"title":"fnm","slug":"fnm","link":"#fnm","children":[]},{"level":3,"title":"pnpm","slug":"pnpm","link":"#pnpm","children":[]},{"level":3,"title":"yarn","slug":"yarn","link":"#yarn","children":[]},{"level":3,"title":"docker","slug":"docker","link":"#docker","children":[]},{"level":3,"title":"neovim","slug":"neovim","link":"#neovim","children":[]},{"level":3,"title":"Android Studio","slug":"android-studio","link":"#android-studio","children":[]},{"level":3,"title":"Conda","slug":"conda","link":"#conda","children":[]},{"level":3,"title":"jenv","slug":"jenv","link":"#jenv","children":[]}]},{"level":2,"title":"其他软件","slug":"其他软件","link":"#其他软件","children":[]},{"level":2,"title":"其他收藏/参考","slug":"其他收藏-参考","link":"#其他收藏-参考","children":[]}],"relativePath":"hand-notes/Mac/init.md"}'),n={name:"hand-notes/Mac/init.md"},t=s("",77),r=[t];function o(c,i,p,d,h,u){return l(),a("div",null,r)}const C=e(n,[["render",o]]);export{y as __pageData,C as default};
diff --git "a/assets/hand-notes_Mac_\345\277\253\346\215\267\350\277\220\350\241\214\350\207\252\345\256\232\344\271\211shell\350\204\232\346\234\254.md.4c7f4146.js" "b/assets/hand-notes_Mac_\345\277\253\346\215\267\350\277\220\350\241\214\350\207\252\345\256\232\344\271\211shell\350\204\232\346\234\254.md.f00eea09.js"
similarity index 98%
rename from "assets/hand-notes_Mac_\345\277\253\346\215\267\350\277\220\350\241\214\350\207\252\345\256\232\344\271\211shell\350\204\232\346\234\254.md.4c7f4146.js"
rename to "assets/hand-notes_Mac_\345\277\253\346\215\267\350\277\220\350\241\214\350\207\252\345\256\232\344\271\211shell\350\204\232\346\234\254.md.f00eea09.js"
index 581827d5..40f7a90d 100644
--- "a/assets/hand-notes_Mac_\345\277\253\346\215\267\350\277\220\350\241\214\350\207\252\345\256\232\344\271\211shell\350\204\232\346\234\254.md.4c7f4146.js"
+++ "b/assets/hand-notes_Mac_\345\277\253\346\215\267\350\277\220\350\241\214\350\207\252\345\256\232\344\271\211shell\350\204\232\346\234\254.md.f00eea09.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as a,o as l,e as n}from"./app.7354b8c5.js";const A=JSON.parse('{"title":"快捷使用自定义shell脚本","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"hand-notes/Mac/快捷运行自定义shell脚本.md"}'),o={name:"hand-notes/Mac/快捷运行自定义shell脚本.md"},e=n(`

快捷使用自定义shell脚本

如果需要在自己的电脑中经常会用到自己写的shell脚本,可以将其添加到环境变量中,然后可以像使用全局命令一样执行自己的脚本,设置步骤如下:

  1. 创建新文件夹

新建一个文件夹存放自己的所有shell脚本 新建一个脚本文件并为其添加执行权限

shell
mkdir ~/.my_scripts
+import{_ as s,c as a,o as l,e as n}from"./app.4a806fb4.js";const A=JSON.parse('{"title":"快捷使用自定义shell脚本","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"hand-notes/Mac/快捷运行自定义shell脚本.md"}'),o={name:"hand-notes/Mac/快捷运行自定义shell脚本.md"},e=n(`

快捷使用自定义shell脚本

如果需要在自己的电脑中经常会用到自己写的shell脚本,可以将其添加到环境变量中,然后可以像使用全局命令一样执行自己的脚本,设置步骤如下:

  1. 创建新文件夹

新建一个文件夹存放自己的所有shell脚本 新建一个脚本文件并为其添加执行权限

shell
mkdir ~/.my_scripts
 cd ~/.my_scripts
 # 编辑完后:wq保存退出
 nvim x.sh
diff --git "a/assets/hand-notes_Mac_\345\277\253\346\215\267\350\277\220\350\241\214\350\207\252\345\256\232\344\271\211shell\350\204\232\346\234\254.md.4c7f4146.lean.js" "b/assets/hand-notes_Mac_\345\277\253\346\215\267\350\277\220\350\241\214\350\207\252\345\256\232\344\271\211shell\350\204\232\346\234\254.md.f00eea09.lean.js"
similarity index 85%
rename from "assets/hand-notes_Mac_\345\277\253\346\215\267\350\277\220\350\241\214\350\207\252\345\256\232\344\271\211shell\350\204\232\346\234\254.md.4c7f4146.lean.js"
rename to "assets/hand-notes_Mac_\345\277\253\346\215\267\350\277\220\350\241\214\350\207\252\345\256\232\344\271\211shell\350\204\232\346\234\254.md.f00eea09.lean.js"
index 580fc9ed..1658c542 100644
--- "a/assets/hand-notes_Mac_\345\277\253\346\215\267\350\277\220\350\241\214\350\207\252\345\256\232\344\271\211shell\350\204\232\346\234\254.md.4c7f4146.lean.js"
+++ "b/assets/hand-notes_Mac_\345\277\253\346\215\267\350\277\220\350\241\214\350\207\252\345\256\232\344\271\211shell\350\204\232\346\234\254.md.f00eea09.lean.js"
@@ -1 +1 @@
-import{_ as s,c as a,o as l,e as n}from"./app.7354b8c5.js";const A=JSON.parse('{"title":"快捷使用自定义shell脚本","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"hand-notes/Mac/快捷运行自定义shell脚本.md"}'),o={name:"hand-notes/Mac/快捷运行自定义shell脚本.md"},e=n("",12),p=[e];function c(t,r,i,d,C,y){return l(),a("div",null,p)}const D=s(o,[["render",c]]);export{A as __pageData,D as default};
+import{_ as s,c as a,o as l,e as n}from"./app.4a806fb4.js";const A=JSON.parse('{"title":"快捷使用自定义shell脚本","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"hand-notes/Mac/快捷运行自定义shell脚本.md"}'),o={name:"hand-notes/Mac/快捷运行自定义shell脚本.md"},e=n("",12),p=[e];function c(t,r,i,d,C,y){return l(),a("div",null,p)}const D=s(o,[["render",c]]);export{A as __pageData,D as default};
diff --git a/assets/hand-notes_React_ProComponents_ProTable.md.55cd81c1.js b/assets/hand-notes_React_ProComponents_ProTable.md.8f0c5ce2.js
similarity index 99%
rename from assets/hand-notes_React_ProComponents_ProTable.md.55cd81c1.js
rename to assets/hand-notes_React_ProComponents_ProTable.md.8f0c5ce2.js
index 7dd0ac66..8a658a8f 100644
--- a/assets/hand-notes_React_ProComponents_ProTable.md.55cd81c1.js
+++ b/assets/hand-notes_React_ProComponents_ProTable.md.8f0c5ce2.js
@@ -1,4 +1,4 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"ProTable","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"表格搜索修改","slug":"表格搜索修改","link":"#表格搜索修改","children":[]}],"relativePath":"hand-notes/React/ProComponents/ProTable.md"}'),p={name:"hand-notes/React/ProComponents/ProTable.md"},o=l(`

ProTable

表格搜索修改

ProTable高级表格添加search={true}后,默认所有的column都会支持搜索,搜索的key就是dataIndex字段,

例如:下面的columndataIndexrealName,那么启用搜索后,传入的params就是{realName: "输入的值""},如果想改变传给接口的key需要进一步处理

javascript
const columns = [
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"ProTable","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"表格搜索修改","slug":"表格搜索修改","link":"#表格搜索修改","children":[]}],"relativePath":"hand-notes/React/ProComponents/ProTable.md"}'),p={name:"hand-notes/React/ProComponents/ProTable.md"},o=l(`

ProTable

表格搜索修改

ProTable高级表格添加search={true}后,默认所有的column都会支持搜索,搜索的key就是dataIndex字段,

例如:下面的columndataIndexrealName,那么启用搜索后,传入的params就是{realName: "输入的值""},如果想改变传给接口的key需要进一步处理

javascript
const columns = [
     {
         title: 'xxxxxx',
         dataIndex: 'realName',
diff --git a/assets/hand-notes_React_ProComponents_ProTable.md.55cd81c1.lean.js b/assets/hand-notes_React_ProComponents_ProTable.md.8f0c5ce2.lean.js
similarity index 87%
rename from assets/hand-notes_React_ProComponents_ProTable.md.55cd81c1.lean.js
rename to assets/hand-notes_React_ProComponents_ProTable.md.8f0c5ce2.lean.js
index 8d6add76..7444b047 100644
--- a/assets/hand-notes_React_ProComponents_ProTable.md.55cd81c1.lean.js
+++ b/assets/hand-notes_React_ProComponents_ProTable.md.8f0c5ce2.lean.js
@@ -1 +1 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"ProTable","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"表格搜索修改","slug":"表格搜索修改","link":"#表格搜索修改","children":[]}],"relativePath":"hand-notes/React/ProComponents/ProTable.md"}'),p={name:"hand-notes/React/ProComponents/ProTable.md"},o=l("",7),e=[o];function t(c,r,F,y,D,C){return n(),a("div",null,e)}const d=s(p,[["render",t]]);export{i as __pageData,d as default};
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"ProTable","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"表格搜索修改","slug":"表格搜索修改","link":"#表格搜索修改","children":[]}],"relativePath":"hand-notes/React/ProComponents/ProTable.md"}'),p={name:"hand-notes/React/ProComponents/ProTable.md"},o=l("",7),e=[o];function t(c,r,F,y,D,C){return n(),a("div",null,e)}const d=s(p,[["render",t]]);export{i as __pageData,d as default};
diff --git "a/assets/hand-notes_Sass_sass\345\256\236\347\216\260\346\230\237\347\251\272\346\225\210\346\236\234.md.6c71ae69.js" "b/assets/hand-notes_Sass_sass\345\256\236\347\216\260\346\230\237\347\251\272\346\225\210\346\236\234.md.9b28dff8.js"
similarity index 99%
rename from "assets/hand-notes_Sass_sass\345\256\236\347\216\260\346\230\237\347\251\272\346\225\210\346\236\234.md.6c71ae69.js"
rename to "assets/hand-notes_Sass_sass\345\256\236\347\216\260\346\230\237\347\251\272\346\225\210\346\236\234.md.9b28dff8.js"
index 50f60284..5f77dcc4 100644
--- "a/assets/hand-notes_Sass_sass\345\256\236\347\216\260\346\230\237\347\251\272\346\225\210\346\236\234.md.6c71ae69.js"
+++ "b/assets/hand-notes_Sass_sass\345\256\236\347\216\260\346\230\237\347\251\272\346\225\210\346\236\234.md.9b28dff8.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"sass实现星空效果","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"代码展示","slug":"代码展示","link":"#代码展示","children":[]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[{"level":3,"title":"效果预览","slug":"效果预览","link":"#效果预览","children":[]}]}],"relativePath":"hand-notes/Sass/sass实现星空效果.md"}'),p={name:"hand-notes/Sass/sass实现星空效果.md"},o=l(`

sass实现星空效果

代码展示

html代码

html
<!doctype html>
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"sass实现星空效果","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"代码展示","slug":"代码展示","link":"#代码展示","children":[]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[{"level":3,"title":"效果预览","slug":"效果预览","link":"#效果预览","children":[]}]}],"relativePath":"hand-notes/Sass/sass实现星空效果.md"}'),p={name:"hand-notes/Sass/sass实现星空效果.md"},o=l(`

sass实现星空效果

代码展示

html代码

html
<!doctype html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
diff --git "a/assets/hand-notes_Sass_sass\345\256\236\347\216\260\346\230\237\347\251\272\346\225\210\346\236\234.md.6c71ae69.lean.js" "b/assets/hand-notes_Sass_sass\345\256\236\347\216\260\346\230\237\347\251\272\346\225\210\346\236\234.md.9b28dff8.lean.js"
similarity index 90%
rename from "assets/hand-notes_Sass_sass\345\256\236\347\216\260\346\230\237\347\251\272\346\225\210\346\236\234.md.6c71ae69.lean.js"
rename to "assets/hand-notes_Sass_sass\345\256\236\347\216\260\346\230\237\347\251\272\346\225\210\346\236\234.md.9b28dff8.lean.js"
index 493bcec5..021eed0b 100644
--- "a/assets/hand-notes_Sass_sass\345\256\236\347\216\260\346\230\237\347\251\272\346\225\210\346\236\234.md.6c71ae69.lean.js"
+++ "b/assets/hand-notes_Sass_sass\345\256\236\347\216\260\346\230\237\347\251\272\346\225\210\346\236\234.md.9b28dff8.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"sass实现星空效果","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"代码展示","slug":"代码展示","link":"#代码展示","children":[]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[{"level":3,"title":"效果预览","slug":"效果预览","link":"#效果预览","children":[]}]}],"relativePath":"hand-notes/Sass/sass实现星空效果.md"}'),p={name:"hand-notes/Sass/sass实现星空效果.md"},o=l("",9),t=[o];function e(c,D,r,F,y,C){return a(),n("div",null,t)}const d=s(p,[["render",e]]);export{i as __pageData,d as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"sass实现星空效果","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"代码展示","slug":"代码展示","link":"#代码展示","children":[]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[{"level":3,"title":"效果预览","slug":"效果预览","link":"#效果预览","children":[]}]}],"relativePath":"hand-notes/Sass/sass实现星空效果.md"}'),p={name:"hand-notes/Sass/sass实现星空效果.md"},o=l("",9),t=[o];function e(c,D,r,F,y,C){return a(),n("div",null,t)}const d=s(p,[["render",e]]);export{i as __pageData,d as default};
diff --git "a/assets/hand-notes_Sass_sass\345\260\217\346\212\200\345\267\247.md.aff9b5f1.js" "b/assets/hand-notes_Sass_sass\345\260\217\346\212\200\345\267\247.md.ac4aadc7.js"
similarity index 99%
rename from "assets/hand-notes_Sass_sass\345\260\217\346\212\200\345\267\247.md.aff9b5f1.js"
rename to "assets/hand-notes_Sass_sass\345\260\217\346\212\200\345\267\247.md.ac4aadc7.js"
index c0f99782..4e4dc6a2 100644
--- "a/assets/hand-notes_Sass_sass\345\260\217\346\212\200\345\267\247.md.aff9b5f1.js"
+++ "b/assets/hand-notes_Sass_sass\345\260\217\346\212\200\345\267\247.md.ac4aadc7.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const A=JSON.parse('{"title":"sass小技巧","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"在sass中debug","slug":"在sass中debug","link":"#在sass中debug","children":[]},{"level":2,"title":"scss中的数学函数","slug":"scss中的数学函数","link":"#scss中的数学函数","children":[{"level":3,"title":"math.random","slug":"math-random","link":"#math-random","children":[]},{"level":3,"title":"math.floor($number)","slug":"math-floor-number","link":"#math-floor-number","children":[]}]},{"level":2,"title":"sass中的字符串函数","slug":"sass中的字符串函数","link":"#sass中的字符串函数","children":[{"level":3,"title":"string.unquote($str)","slug":"string-unquote-str","link":"#string-unquote-str","children":[]}]},{"level":2,"title":"sass中Map对象操作","slug":"sass中map对象操作","link":"#sass中map对象操作","children":[{"level":3,"title":"get($map, $key)","slug":"get-map-key","link":"#get-map-key","children":[]}]},{"level":2,"title":"sass中列表操作","slug":"sass中列表操作","link":"#sass中列表操作","children":[{"level":3,"title":"nth($list, $n)","slug":"nth-list-n","link":"#nth-list-n","children":[]}]}],"relativePath":"hand-notes/Sass/sass小技巧.md"}'),p={name:"hand-notes/Sass/sass小技巧.md"},o=l(`

sass小技巧

在sass中debug

在sass中,可以通过@debug <expression> 很方便地在控制台打印出表达式返回的值

scss
.a {
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const A=JSON.parse('{"title":"sass小技巧","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"在sass中debug","slug":"在sass中debug","link":"#在sass中debug","children":[]},{"level":2,"title":"scss中的数学函数","slug":"scss中的数学函数","link":"#scss中的数学函数","children":[{"level":3,"title":"math.random","slug":"math-random","link":"#math-random","children":[]},{"level":3,"title":"math.floor($number)","slug":"math-floor-number","link":"#math-floor-number","children":[]}]},{"level":2,"title":"sass中的字符串函数","slug":"sass中的字符串函数","link":"#sass中的字符串函数","children":[{"level":3,"title":"string.unquote($str)","slug":"string-unquote-str","link":"#string-unquote-str","children":[]}]},{"level":2,"title":"sass中Map对象操作","slug":"sass中map对象操作","link":"#sass中map对象操作","children":[{"level":3,"title":"get($map, $key)","slug":"get-map-key","link":"#get-map-key","children":[]}]},{"level":2,"title":"sass中列表操作","slug":"sass中列表操作","link":"#sass中列表操作","children":[{"level":3,"title":"nth($list, $n)","slug":"nth-list-n","link":"#nth-list-n","children":[]}]}],"relativePath":"hand-notes/Sass/sass小技巧.md"}'),p={name:"hand-notes/Sass/sass小技巧.md"},o=l(`

sass小技巧

在sass中debug

在sass中,可以通过@debug <expression> 很方便地在控制台打印出表达式返回的值

scss
.a {
   @debug '#{1 + 1}'; // 可以看到控制台输出 Debug: 2
   $n: 100;
   @debug '#{$n}' // 可以看到控制台输出 Debug: 100
diff --git "a/assets/hand-notes_Sass_sass\345\260\217\346\212\200\345\267\247.md.aff9b5f1.lean.js" "b/assets/hand-notes_Sass_sass\345\260\217\346\212\200\345\267\247.md.ac4aadc7.lean.js"
similarity index 95%
rename from "assets/hand-notes_Sass_sass\345\260\217\346\212\200\345\267\247.md.aff9b5f1.lean.js"
rename to "assets/hand-notes_Sass_sass\345\260\217\346\212\200\345\267\247.md.ac4aadc7.lean.js"
index b11f35ed..739d257e 100644
--- "a/assets/hand-notes_Sass_sass\345\260\217\346\212\200\345\267\247.md.aff9b5f1.lean.js"
+++ "b/assets/hand-notes_Sass_sass\345\260\217\346\212\200\345\267\247.md.ac4aadc7.lean.js"
@@ -1 +1 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const A=JSON.parse('{"title":"sass小技巧","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"在sass中debug","slug":"在sass中debug","link":"#在sass中debug","children":[]},{"level":2,"title":"scss中的数学函数","slug":"scss中的数学函数","link":"#scss中的数学函数","children":[{"level":3,"title":"math.random","slug":"math-random","link":"#math-random","children":[]},{"level":3,"title":"math.floor($number)","slug":"math-floor-number","link":"#math-floor-number","children":[]}]},{"level":2,"title":"sass中的字符串函数","slug":"sass中的字符串函数","link":"#sass中的字符串函数","children":[{"level":3,"title":"string.unquote($str)","slug":"string-unquote-str","link":"#string-unquote-str","children":[]}]},{"level":2,"title":"sass中Map对象操作","slug":"sass中map对象操作","link":"#sass中map对象操作","children":[{"level":3,"title":"get($map, $key)","slug":"get-map-key","link":"#get-map-key","children":[]}]},{"level":2,"title":"sass中列表操作","slug":"sass中列表操作","link":"#sass中列表操作","children":[{"level":3,"title":"nth($list, $n)","slug":"nth-list-n","link":"#nth-list-n","children":[]}]}],"relativePath":"hand-notes/Sass/sass小技巧.md"}'),p={name:"hand-notes/Sass/sass小技巧.md"},o=l("",29),e=[o];function t(c,r,D,i,y,F){return n(),a("div",null,e)}const d=s(p,[["render",t]]);export{A as __pageData,d as default};
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const A=JSON.parse('{"title":"sass小技巧","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"在sass中debug","slug":"在sass中debug","link":"#在sass中debug","children":[]},{"level":2,"title":"scss中的数学函数","slug":"scss中的数学函数","link":"#scss中的数学函数","children":[{"level":3,"title":"math.random","slug":"math-random","link":"#math-random","children":[]},{"level":3,"title":"math.floor($number)","slug":"math-floor-number","link":"#math-floor-number","children":[]}]},{"level":2,"title":"sass中的字符串函数","slug":"sass中的字符串函数","link":"#sass中的字符串函数","children":[{"level":3,"title":"string.unquote($str)","slug":"string-unquote-str","link":"#string-unquote-str","children":[]}]},{"level":2,"title":"sass中Map对象操作","slug":"sass中map对象操作","link":"#sass中map对象操作","children":[{"level":3,"title":"get($map, $key)","slug":"get-map-key","link":"#get-map-key","children":[]}]},{"level":2,"title":"sass中列表操作","slug":"sass中列表操作","link":"#sass中列表操作","children":[{"level":3,"title":"nth($list, $n)","slug":"nth-list-n","link":"#nth-list-n","children":[]}]}],"relativePath":"hand-notes/Sass/sass小技巧.md"}'),p={name:"hand-notes/Sass/sass小技巧.md"},o=l("",29),e=[o];function t(c,r,D,i,y,F){return n(),a("div",null,e)}const d=s(p,[["render",t]]);export{A as __pageData,d as default};
diff --git "a/assets/hand-notes_Sass_\345\260\217\347\220\203\344\272\244\344\272\222loading.md.d8228218.js" "b/assets/hand-notes_Sass_\345\260\217\347\220\203\344\272\244\344\272\222loading.md.e8afd7b0.js"
similarity index 99%
rename from "assets/hand-notes_Sass_\345\260\217\347\220\203\344\272\244\344\272\222loading.md.d8228218.js"
rename to "assets/hand-notes_Sass_\345\260\217\347\220\203\344\272\244\344\272\222loading.md.e8afd7b0.js"
index 4b560363..9a8de37f 100644
--- "a/assets/hand-notes_Sass_\345\260\217\347\220\203\344\272\244\344\272\222loading.md.d8228218.js"
+++ "b/assets/hand-notes_Sass_\345\260\217\347\220\203\344\272\244\344\272\222loading.md.e8afd7b0.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"小球交互loading","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"代码实现","slug":"代码实现","link":"#代码实现","children":[]},{"level":2,"title":"预览和源码","slug":"预览和源码","link":"#预览和源码","children":[]}],"relativePath":"hand-notes/Sass/小球交互loading.md"}'),p={name:"hand-notes/Sass/小球交互loading.md"},o=l(`

小球交互loading

代码实现

scss代码

scss
@use "sass:math";
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"小球交互loading","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"代码实现","slug":"代码实现","link":"#代码实现","children":[]},{"level":2,"title":"预览和源码","slug":"预览和源码","link":"#预览和源码","children":[]}],"relativePath":"hand-notes/Sass/小球交互loading.md"}'),p={name:"hand-notes/Sass/小球交互loading.md"},o=l(`

小球交互loading

代码实现

scss代码

scss
@use "sass:math";
 .root {
   width: 100vw;
   height: 100vh;
diff --git "a/assets/hand-notes_Sass_\345\260\217\347\220\203\344\272\244\344\272\222loading.md.d8228218.lean.js" "b/assets/hand-notes_Sass_\345\260\217\347\220\203\344\272\244\344\272\222loading.md.e8afd7b0.lean.js"
similarity index 89%
rename from "assets/hand-notes_Sass_\345\260\217\347\220\203\344\272\244\344\272\222loading.md.d8228218.lean.js"
rename to "assets/hand-notes_Sass_\345\260\217\347\220\203\344\272\244\344\272\222loading.md.e8afd7b0.lean.js"
index 5db955ed..f2d0ef00 100644
--- "a/assets/hand-notes_Sass_\345\260\217\347\220\203\344\272\244\344\272\222loading.md.d8228218.lean.js"
+++ "b/assets/hand-notes_Sass_\345\260\217\347\220\203\344\272\244\344\272\222loading.md.e8afd7b0.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"小球交互loading","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"代码实现","slug":"代码实现","link":"#代码实现","children":[]},{"level":2,"title":"预览和源码","slug":"预览和源码","link":"#预览和源码","children":[]}],"relativePath":"hand-notes/Sass/小球交互loading.md"}'),p={name:"hand-notes/Sass/小球交互loading.md"},o=l("",8),t=[o];function e(D,c,F,r,y,C){return a(),n("div",null,t)}const d=s(p,[["render",e]]);export{i as __pageData,d as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"小球交互loading","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"代码实现","slug":"代码实现","link":"#代码实现","children":[]},{"level":2,"title":"预览和源码","slug":"预览和源码","link":"#预览和源码","children":[]}],"relativePath":"hand-notes/Sass/小球交互loading.md"}'),p={name:"hand-notes/Sass/小球交互loading.md"},o=l("",8),t=[o];function e(D,c,F,r,y,C){return a(),n("div",null,t)}const d=s(p,[["render",e]]);export{i as __pageData,d as default};
diff --git "a/assets/hand-notes_Sass_\351\200\232\350\277\207mixin\347\256\200\345\214\226\345\223\215\345\272\224\345\274\217\344\273\243\347\240\201.md.64db7d7a.js" "b/assets/hand-notes_Sass_\351\200\232\350\277\207mixin\347\256\200\345\214\226\345\223\215\345\272\224\345\274\217\344\273\243\347\240\201.md.d6b29977.js"
similarity index 99%
rename from "assets/hand-notes_Sass_\351\200\232\350\277\207mixin\347\256\200\345\214\226\345\223\215\345\272\224\345\274\217\344\273\243\347\240\201.md.64db7d7a.js"
rename to "assets/hand-notes_Sass_\351\200\232\350\277\207mixin\347\256\200\345\214\226\345\223\215\345\272\224\345\274\217\344\273\243\347\240\201.md.d6b29977.js"
index 4f7952d6..232ada8e 100644
--- "a/assets/hand-notes_Sass_\351\200\232\350\277\207mixin\347\256\200\345\214\226\345\223\215\345\272\224\345\274\217\344\273\243\347\240\201.md.64db7d7a.js"
+++ "b/assets/hand-notes_Sass_\351\200\232\350\277\207mixin\347\256\200\345\214\226\345\223\215\345\272\224\345\274\217\344\273\243\347\240\201.md.d6b29977.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"通过mixin简化响应式代码","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"代码展示","slug":"代码展示","link":"#代码展示","children":[]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[{"level":3,"title":"查看代码","slug":"查看代码","link":"#查看代码","children":[]},{"level":3,"title":"效果预览","slug":"效果预览","link":"#效果预览","children":[]}]}],"relativePath":"hand-notes/Sass/通过mixin简化响应式代码.md"}'),p={name:"hand-notes/Sass/通过mixin简化响应式代码.md"},o=l(`

通过mixin简化响应式代码

代码展示

有的响应式代码可能需要写一些适配代码,例如

css
.home {
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"通过mixin简化响应式代码","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"代码展示","slug":"代码展示","link":"#代码展示","children":[]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[{"level":3,"title":"查看代码","slug":"查看代码","link":"#查看代码","children":[]},{"level":3,"title":"效果预览","slug":"效果预览","link":"#效果预览","children":[]}]}],"relativePath":"hand-notes/Sass/通过mixin简化响应式代码.md"}'),p={name:"hand-notes/Sass/通过mixin简化响应式代码.md"},o=l(`

通过mixin简化响应式代码

代码展示

有的响应式代码可能需要写一些适配代码,例如

css
.home {
   width: 200px;
   height: 300px;
 }
diff --git "a/assets/hand-notes_Sass_\351\200\232\350\277\207mixin\347\256\200\345\214\226\345\223\215\345\272\224\345\274\217\344\273\243\347\240\201.md.64db7d7a.lean.js" "b/assets/hand-notes_Sass_\351\200\232\350\277\207mixin\347\256\200\345\214\226\345\223\215\345\272\224\345\274\217\344\273\243\347\240\201.md.d6b29977.lean.js"
similarity index 92%
rename from "assets/hand-notes_Sass_\351\200\232\350\277\207mixin\347\256\200\345\214\226\345\223\215\345\272\224\345\274\217\344\273\243\347\240\201.md.64db7d7a.lean.js"
rename to "assets/hand-notes_Sass_\351\200\232\350\277\207mixin\347\256\200\345\214\226\345\223\215\345\272\224\345\274\217\344\273\243\347\240\201.md.d6b29977.lean.js"
index fbb03d6f..9523b5c8 100644
--- "a/assets/hand-notes_Sass_\351\200\232\350\277\207mixin\347\256\200\345\214\226\345\223\215\345\272\224\345\274\217\344\273\243\347\240\201.md.64db7d7a.lean.js"
+++ "b/assets/hand-notes_Sass_\351\200\232\350\277\207mixin\347\256\200\345\214\226\345\223\215\345\272\224\345\274\217\344\273\243\347\240\201.md.d6b29977.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"通过mixin简化响应式代码","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"代码展示","slug":"代码展示","link":"#代码展示","children":[]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[{"level":3,"title":"查看代码","slug":"查看代码","link":"#查看代码","children":[]},{"level":3,"title":"效果预览","slug":"效果预览","link":"#效果预览","children":[]}]}],"relativePath":"hand-notes/Sass/通过mixin简化响应式代码.md"}'),p={name:"hand-notes/Sass/通过mixin简化响应式代码.md"},o=l("",23),e=[o];function t(c,D,r,F,y,C){return a(),n("div",null,e)}const d=s(p,[["render",t]]);export{i as __pageData,d as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"通过mixin简化响应式代码","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"代码展示","slug":"代码展示","link":"#代码展示","children":[]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[{"level":3,"title":"查看代码","slug":"查看代码","link":"#查看代码","children":[]},{"level":3,"title":"效果预览","slug":"效果预览","link":"#效果预览","children":[]}]}],"relativePath":"hand-notes/Sass/通过mixin简化响应式代码.md"}'),p={name:"hand-notes/Sass/通过mixin简化响应式代码.md"},o=l("",23),e=[o];function t(c,D,r,F,y,C){return a(),n("div",null,e)}const d=s(p,[["render",t]]);export{i as __pageData,d as default};
diff --git a/assets/index.md.f96a796f.js b/assets/index.md.aae28096.js
similarity index 89%
rename from assets/index.md.f96a796f.js
rename to assets/index.md.aae28096.js
index a3bf4fd0..3e8a13fd 100644
--- a/assets/index.md.f96a796f.js
+++ b/assets/index.md.aae28096.js
@@ -1 +1 @@
-import{_ as t,c as e,o as n}from"./app.7354b8c5.js";const l=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"mx52jing的博客","text":"前端路上的点滴","tagline":"小知识汇聚成大海洋","actions":[{"theme":"brand","text":"进入正题吧","link":"/hand-notes/JavaScript/数字四舍五入"},{"theme":"alt","text":"View on GitHub","link":"https://github.com/mx52jing"}]}},"headers":[],"relativePath":"index.md"}'),a={name:"index.md"};function o(i,r,s,c,m,d){return n(),e("div")}const x=t(a,[["render",o]]);export{l as __pageData,x as default};
+import{_ as t,c as e,o as n}from"./app.4a806fb4.js";const l=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"mx52jing的博客","text":"前端路上的点滴","tagline":"小知识汇聚成大海洋","actions":[{"theme":"brand","text":"进入正题吧","link":"/hand-notes/JavaScript/数字四舍五入"},{"theme":"alt","text":"View on GitHub","link":"https://github.com/mx52jing"}]}},"headers":[],"relativePath":"index.md"}'),a={name:"index.md"};function o(i,r,s,c,m,d){return n(),e("div")}const x=t(a,[["render",o]]);export{l as __pageData,x as default};
diff --git a/assets/index.md.f96a796f.lean.js b/assets/index.md.aae28096.lean.js
similarity index 89%
rename from assets/index.md.f96a796f.lean.js
rename to assets/index.md.aae28096.lean.js
index a3bf4fd0..3e8a13fd 100644
--- a/assets/index.md.f96a796f.lean.js
+++ b/assets/index.md.aae28096.lean.js
@@ -1 +1 @@
-import{_ as t,c as e,o as n}from"./app.7354b8c5.js";const l=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"mx52jing的博客","text":"前端路上的点滴","tagline":"小知识汇聚成大海洋","actions":[{"theme":"brand","text":"进入正题吧","link":"/hand-notes/JavaScript/数字四舍五入"},{"theme":"alt","text":"View on GitHub","link":"https://github.com/mx52jing"}]}},"headers":[],"relativePath":"index.md"}'),a={name:"index.md"};function o(i,r,s,c,m,d){return n(),e("div")}const x=t(a,[["render",o]]);export{l as __pageData,x as default};
+import{_ as t,c as e,o as n}from"./app.4a806fb4.js";const l=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"mx52jing的博客","text":"前端路上的点滴","tagline":"小知识汇聚成大海洋","actions":[{"theme":"brand","text":"进入正题吧","link":"/hand-notes/JavaScript/数字四舍五入"},{"theme":"alt","text":"View on GitHub","link":"https://github.com/mx52jing"}]}},"headers":[],"relativePath":"index.md"}'),a={name:"index.md"};function o(i,r,s,c,m,d){return n(),e("div")}const x=t(a,[["render",o]]);export{l as __pageData,x as default};
diff --git a/assets/knowledge-deposition_Docker_Dockerfile.md.939bce8b.js b/assets/knowledge-deposition_Docker_Dockerfile.md.acfd4f8d.js
similarity index 99%
rename from assets/knowledge-deposition_Docker_Dockerfile.md.939bce8b.js
rename to assets/knowledge-deposition_Docker_Dockerfile.md.acfd4f8d.js
index 10458f55..daa4e6eb 100644
--- a/assets/knowledge-deposition_Docker_Dockerfile.md.939bce8b.js
+++ b/assets/knowledge-deposition_Docker_Dockerfile.md.acfd4f8d.js
@@ -1,4 +1,4 @@
-import{_ as s,c as l,o as e,e as a}from"./app.7354b8c5.js";const u=JSON.parse('{"title":"Dockerfile","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"Dockerfile指令","slug":"dockerfile指令","link":"#dockerfile指令","children":[{"level":3,"title":"FROM","slug":"from","link":"#from","children":[]},{"level":3,"title":"RUN","slug":"run","link":"#run","children":[]},{"level":3,"title":"COPY","slug":"copy","link":"#copy","children":[]},{"level":3,"title":"ADD","slug":"add","link":"#add","children":[]},{"level":3,"title":"CMD","slug":"cmd","link":"#cmd","children":[]},{"level":3,"title":"ENTRYPOINT","slug":"entrypoint","link":"#entrypoint","children":[]},{"level":3,"title":"ENV","slug":"env","link":"#env","children":[]},{"level":3,"title":"EXPOSE","slug":"expose","link":"#expose","children":[]},{"level":3,"title":"WORKDIR","slug":"workdir","link":"#workdir","children":[]}]},{"level":2,"title":"build","slug":"build","link":"#build","children":[]}],"relativePath":"knowledge-deposition/Docker/Dockerfile.md"}'),o={name:"knowledge-deposition/Docker/Dockerfile.md"},n=a(`

Dockerfile

Dockerfile是一个文本文件,其内包含了一条条的指令(Instruction)每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。

Dockerfile指令

FROM

  • FROM指定基础镜像
shell
FROM basicImage
+import{_ as s,c as l,o as e,e as a}from"./app.4a806fb4.js";const u=JSON.parse('{"title":"Dockerfile","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"Dockerfile指令","slug":"dockerfile指令","link":"#dockerfile指令","children":[{"level":3,"title":"FROM","slug":"from","link":"#from","children":[]},{"level":3,"title":"RUN","slug":"run","link":"#run","children":[]},{"level":3,"title":"COPY","slug":"copy","link":"#copy","children":[]},{"level":3,"title":"ADD","slug":"add","link":"#add","children":[]},{"level":3,"title":"CMD","slug":"cmd","link":"#cmd","children":[]},{"level":3,"title":"ENTRYPOINT","slug":"entrypoint","link":"#entrypoint","children":[]},{"level":3,"title":"ENV","slug":"env","link":"#env","children":[]},{"level":3,"title":"EXPOSE","slug":"expose","link":"#expose","children":[]},{"level":3,"title":"WORKDIR","slug":"workdir","link":"#workdir","children":[]}]},{"level":2,"title":"build","slug":"build","link":"#build","children":[]}],"relativePath":"knowledge-deposition/Docker/Dockerfile.md"}'),o={name:"knowledge-deposition/Docker/Dockerfile.md"},n=a(`

Dockerfile

Dockerfile是一个文本文件,其内包含了一条条的指令(Instruction)每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。

Dockerfile指令

FROM

  • FROM指定基础镜像
shell
FROM basicImage
 
  • 定制镜像都要以一个镜像为基础,FROM作用就是指定基础镜像

  • Dockerfile中,FROM必须的,必须是第一条指令

特殊空白镜像

  • Docker存在一个特殊的scratch镜像。这个镜像是虚拟的概念,不实际存在,表示一个空白的镜像

  • scratch为基础镜像的,表示不以任何镜像为基础,所写的指令将作为镜像第一层开始存在。

RUN

  • RUN表示执行命令

两种格式:

  • shell格式: RUN <命令>\`,如下:
shell
RUN echo '<h1>hello</h1>' > /usr/share/nginx/html/index.html
 
  • exec格式:RUN ["可执行文件", "参数1", "参数2"]

WARNING

注意:不要用下面这种写法

FROM basicImage
 RUN operation1
diff --git a/assets/knowledge-deposition_Docker_Dockerfile.md.939bce8b.lean.js b/assets/knowledge-deposition_Docker_Dockerfile.md.acfd4f8d.lean.js
similarity index 94%
rename from assets/knowledge-deposition_Docker_Dockerfile.md.939bce8b.lean.js
rename to assets/knowledge-deposition_Docker_Dockerfile.md.acfd4f8d.lean.js
index 58cd72eb..d23a399a 100644
--- a/assets/knowledge-deposition_Docker_Dockerfile.md.939bce8b.lean.js
+++ b/assets/knowledge-deposition_Docker_Dockerfile.md.acfd4f8d.lean.js
@@ -1 +1 @@
-import{_ as s,c as l,o as e,e as a}from"./app.7354b8c5.js";const u=JSON.parse('{"title":"Dockerfile","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"Dockerfile指令","slug":"dockerfile指令","link":"#dockerfile指令","children":[{"level":3,"title":"FROM","slug":"from","link":"#from","children":[]},{"level":3,"title":"RUN","slug":"run","link":"#run","children":[]},{"level":3,"title":"COPY","slug":"copy","link":"#copy","children":[]},{"level":3,"title":"ADD","slug":"add","link":"#add","children":[]},{"level":3,"title":"CMD","slug":"cmd","link":"#cmd","children":[]},{"level":3,"title":"ENTRYPOINT","slug":"entrypoint","link":"#entrypoint","children":[]},{"level":3,"title":"ENV","slug":"env","link":"#env","children":[]},{"level":3,"title":"EXPOSE","slug":"expose","link":"#expose","children":[]},{"level":3,"title":"WORKDIR","slug":"workdir","link":"#workdir","children":[]}]},{"level":2,"title":"build","slug":"build","link":"#build","children":[]}],"relativePath":"knowledge-deposition/Docker/Dockerfile.md"}'),o={name:"knowledge-deposition/Docker/Dockerfile.md"},n=a("",73),p=[n];function c(t,d,i,r,C,D){return e(),l("div",null,p)}const A=s(o,[["render",c]]);export{u as __pageData,A as default};
+import{_ as s,c as l,o as e,e as a}from"./app.4a806fb4.js";const u=JSON.parse('{"title":"Dockerfile","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"Dockerfile指令","slug":"dockerfile指令","link":"#dockerfile指令","children":[{"level":3,"title":"FROM","slug":"from","link":"#from","children":[]},{"level":3,"title":"RUN","slug":"run","link":"#run","children":[]},{"level":3,"title":"COPY","slug":"copy","link":"#copy","children":[]},{"level":3,"title":"ADD","slug":"add","link":"#add","children":[]},{"level":3,"title":"CMD","slug":"cmd","link":"#cmd","children":[]},{"level":3,"title":"ENTRYPOINT","slug":"entrypoint","link":"#entrypoint","children":[]},{"level":3,"title":"ENV","slug":"env","link":"#env","children":[]},{"level":3,"title":"EXPOSE","slug":"expose","link":"#expose","children":[]},{"level":3,"title":"WORKDIR","slug":"workdir","link":"#workdir","children":[]}]},{"level":2,"title":"build","slug":"build","link":"#build","children":[]}],"relativePath":"knowledge-deposition/Docker/Dockerfile.md"}'),o={name:"knowledge-deposition/Docker/Dockerfile.md"},n=a("",73),p=[n];function c(t,d,i,r,C,D){return e(),l("div",null,p)}const A=s(o,[["render",c]]);export{u as __pageData,A as default};
diff --git "a/assets/knowledge-deposition_Docker_Docker\345\237\272\347\241\200\347\237\245\350\257\206.md.411e97ab.js" "b/assets/knowledge-deposition_Docker_Docker\345\237\272\347\241\200\347\237\245\350\257\206.md.3c35ae53.js"
similarity index 99%
rename from "assets/knowledge-deposition_Docker_Docker\345\237\272\347\241\200\347\237\245\350\257\206.md.411e97ab.js"
rename to "assets/knowledge-deposition_Docker_Docker\345\237\272\347\241\200\347\237\245\350\257\206.md.3c35ae53.js"
index 90ddf95d..ecd97e26 100644
--- "a/assets/knowledge-deposition_Docker_Docker\345\237\272\347\241\200\347\237\245\350\257\206.md.411e97ab.js"
+++ "b/assets/knowledge-deposition_Docker_Docker\345\237\272\347\241\200\347\237\245\350\257\206.md.3c35ae53.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as a,o as l,e}from"./app.7354b8c5.js";const n="/static-blog/image/docker/image_none.png",o="/static-blog/image/docker/image_middle.png",p="/static-blog/image/docker/dorit.png",u=JSON.parse('{"title":"Docker基础知识","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"基本概念","slug":"基本概念","link":"#基本概念","children":[{"level":3,"title":"Docker镜像(Image)","slug":"docker镜像-image","link":"#docker镜像-image","children":[]},{"level":3,"title":"Docker容器(Container)","slug":"docker容器-container","link":"#docker容器-container","children":[]},{"level":3,"title":"Docker仓库(Repository)","slug":"docker仓库-repository","link":"#docker仓库-repository","children":[]},{"level":3,"title":"安装","slug":"安装","link":"#安装","children":[]}]},{"level":2,"title":"查看docker占用磁盘空间信息","slug":"查看docker占用磁盘空间信息","link":"#查看docker占用磁盘空间信息","children":[]},{"level":2,"title":"镜像","slug":"镜像","link":"#镜像","children":[{"level":3,"title":"拉取镜像","slug":"拉取镜像","link":"#拉取镜像","children":[]},{"level":3,"title":"列出镜像","slug":"列出镜像","link":"#列出镜像","children":[]},{"level":3,"title":"虚悬镜像","slug":"虚悬镜像","link":"#虚悬镜像","children":[]},{"level":3,"title":"中间层镜像","slug":"中间层镜像","link":"#中间层镜像","children":[]},{"level":3,"title":"删除镜像","slug":"删除镜像","link":"#删除镜像","children":[]}]},{"level":2,"title":"容器","slug":"容器","link":"#容器","children":[{"level":3,"title":"启动容器","slug":"启动容器","link":"#启动容器","children":[]},{"level":3,"title":"查看运行中的容器:","slug":"查看运行中的容器","link":"#查看运行中的容器","children":[]},{"level":3,"title":"终止容器","slug":"终止容器","link":"#终止容器","children":[]},{"level":3,"title":"重启容器","slug":"重启容器","link":"#重启容器","children":[]},{"level":3,"title":"进入运行中的容器","slug":"进入运行中的容器","link":"#进入运行中的容器","children":[]},{"level":3,"title":"导出、导入容器","slug":"导出、导入容器","link":"#导出、导入容器","children":[]},{"level":3,"title":"删除容器","slug":"删除容器","link":"#删除容器","children":[]}]}],"relativePath":"knowledge-deposition/Docker/Docker基础知识.md"}'),c={name:"knowledge-deposition/Docker/Docker基础知识.md"},t=e(`

Docker基础知识

基本概念

Docker包括3个基本概念:

  • 镜像(Image)

  • 容器(Container)

  • 仓库(Repository)

Docker镜像(Image)

  • Docker镜像是一个特殊的文件系统,提供容器运行时所需的仓库、资源、配置等文件以及容器运行所需参数。

  • 镜像是分层的,每一层叫做一个镜像层,使用docker history [IMAGE ID]查看

  • 镜像是有依赖关系的,上层的镜像依赖下层的镜像,这样设计的好处是,镜像可以复用

  • 镜像是只读的,下层的镜像层不会被修改,只能新增镜像层,所以会越来越多

获取镜像的几种方式

  • 从仓库获取(docker pull)

  • 基于Dockerfile使用docker build命令构建

  • 文件载入docker load

Docker容器(Container)

容器的特点:

  • 容器是基于镜像来运行的,docker run命令使用image启动了一个运行中的系统,就是container(容器)

  • 容器是可读写的

  • 在容器里面进行的操作不会影响image,删除文件也只是在容器里面标记为已删除

  • 容器删除,则保存在容器中的数据也会被删除,容器停止,数据不会被删除

  • 容器只有被保存成镜像才能被移植到其他地方

Docker仓库(Repository)

  • Docker的仓库和git仓库差不多,拥有tag仓库名,在本地构建完镜像以后,就可以通过仓库分发

  • 官方仓库

  • 阿里云

安装

  • 进入官网安装系统对应的客户端

如果需要配置镜像源,可以在客户端设置中配置,如下:

任务栏 => Perferences => Docker Engine 配置,设置完后点击Apply & restart按钮重启

执行docker info可以查看Registry Mirrors查询镜像源是否配置成功

查看docker占用磁盘空间信息

  • 查看镜像、容器、数据卷所占用空间
shell
docker system df
+import{_ as s,c as a,o as l,e}from"./app.4a806fb4.js";const n="/static-blog/image/docker/image_none.png",o="/static-blog/image/docker/image_middle.png",p="/static-blog/image/docker/dorit.png",u=JSON.parse('{"title":"Docker基础知识","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"基本概念","slug":"基本概念","link":"#基本概念","children":[{"level":3,"title":"Docker镜像(Image)","slug":"docker镜像-image","link":"#docker镜像-image","children":[]},{"level":3,"title":"Docker容器(Container)","slug":"docker容器-container","link":"#docker容器-container","children":[]},{"level":3,"title":"Docker仓库(Repository)","slug":"docker仓库-repository","link":"#docker仓库-repository","children":[]},{"level":3,"title":"安装","slug":"安装","link":"#安装","children":[]}]},{"level":2,"title":"查看docker占用磁盘空间信息","slug":"查看docker占用磁盘空间信息","link":"#查看docker占用磁盘空间信息","children":[]},{"level":2,"title":"镜像","slug":"镜像","link":"#镜像","children":[{"level":3,"title":"拉取镜像","slug":"拉取镜像","link":"#拉取镜像","children":[]},{"level":3,"title":"列出镜像","slug":"列出镜像","link":"#列出镜像","children":[]},{"level":3,"title":"虚悬镜像","slug":"虚悬镜像","link":"#虚悬镜像","children":[]},{"level":3,"title":"中间层镜像","slug":"中间层镜像","link":"#中间层镜像","children":[]},{"level":3,"title":"删除镜像","slug":"删除镜像","link":"#删除镜像","children":[]}]},{"level":2,"title":"容器","slug":"容器","link":"#容器","children":[{"level":3,"title":"启动容器","slug":"启动容器","link":"#启动容器","children":[]},{"level":3,"title":"查看运行中的容器:","slug":"查看运行中的容器","link":"#查看运行中的容器","children":[]},{"level":3,"title":"终止容器","slug":"终止容器","link":"#终止容器","children":[]},{"level":3,"title":"重启容器","slug":"重启容器","link":"#重启容器","children":[]},{"level":3,"title":"进入运行中的容器","slug":"进入运行中的容器","link":"#进入运行中的容器","children":[]},{"level":3,"title":"导出、导入容器","slug":"导出、导入容器","link":"#导出、导入容器","children":[]},{"level":3,"title":"删除容器","slug":"删除容器","link":"#删除容器","children":[]}]}],"relativePath":"knowledge-deposition/Docker/Docker基础知识.md"}'),c={name:"knowledge-deposition/Docker/Docker基础知识.md"},t=e(`

Docker基础知识

基本概念

Docker包括3个基本概念:

  • 镜像(Image)

  • 容器(Container)

  • 仓库(Repository)

Docker镜像(Image)

  • Docker镜像是一个特殊的文件系统,提供容器运行时所需的仓库、资源、配置等文件以及容器运行所需参数。

  • 镜像是分层的,每一层叫做一个镜像层,使用docker history [IMAGE ID]查看

  • 镜像是有依赖关系的,上层的镜像依赖下层的镜像,这样设计的好处是,镜像可以复用

  • 镜像是只读的,下层的镜像层不会被修改,只能新增镜像层,所以会越来越多

获取镜像的几种方式

  • 从仓库获取(docker pull)

  • 基于Dockerfile使用docker build命令构建

  • 文件载入docker load

Docker容器(Container)

容器的特点:

  • 容器是基于镜像来运行的,docker run命令使用image启动了一个运行中的系统,就是container(容器)

  • 容器是可读写的

  • 在容器里面进行的操作不会影响image,删除文件也只是在容器里面标记为已删除

  • 容器删除,则保存在容器中的数据也会被删除,容器停止,数据不会被删除

  • 容器只有被保存成镜像才能被移植到其他地方

Docker仓库(Repository)

  • Docker的仓库和git仓库差不多,拥有tag仓库名,在本地构建完镜像以后,就可以通过仓库分发

  • 官方仓库

  • 阿里云

安装

  • 进入官网安装系统对应的客户端

如果需要配置镜像源,可以在客户端设置中配置,如下:

任务栏 => Perferences => Docker Engine 配置,设置完后点击Apply & restart按钮重启

执行docker info可以查看Registry Mirrors查询镜像源是否配置成功

查看docker占用磁盘空间信息

  • 查看镜像、容器、数据卷所占用空间
shell
docker system df
 

如下所示:

shell
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
 Images          2         2         565.8MB   0B (0%)
 Containers      3         3         14B       0B (0%)
diff --git "a/assets/knowledge-deposition_Docker_Docker\345\237\272\347\241\200\347\237\245\350\257\206.md.411e97ab.lean.js" "b/assets/knowledge-deposition_Docker_Docker\345\237\272\347\241\200\347\237\245\350\257\206.md.3c35ae53.lean.js"
similarity index 97%
rename from "assets/knowledge-deposition_Docker_Docker\345\237\272\347\241\200\347\237\245\350\257\206.md.411e97ab.lean.js"
rename to "assets/knowledge-deposition_Docker_Docker\345\237\272\347\241\200\347\237\245\350\257\206.md.3c35ae53.lean.js"
index 9b38a335..ee95f11d 100644
--- "a/assets/knowledge-deposition_Docker_Docker\345\237\272\347\241\200\347\237\245\350\257\206.md.411e97ab.lean.js"
+++ "b/assets/knowledge-deposition_Docker_Docker\345\237\272\347\241\200\347\237\245\350\257\206.md.3c35ae53.lean.js"
@@ -1 +1 @@
-import{_ as s,c as a,o as l,e}from"./app.7354b8c5.js";const n="/static-blog/image/docker/image_none.png",o="/static-blog/image/docker/image_middle.png",p="/static-blog/image/docker/dorit.png",u=JSON.parse('{"title":"Docker基础知识","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"基本概念","slug":"基本概念","link":"#基本概念","children":[{"level":3,"title":"Docker镜像(Image)","slug":"docker镜像-image","link":"#docker镜像-image","children":[]},{"level":3,"title":"Docker容器(Container)","slug":"docker容器-container","link":"#docker容器-container","children":[]},{"level":3,"title":"Docker仓库(Repository)","slug":"docker仓库-repository","link":"#docker仓库-repository","children":[]},{"level":3,"title":"安装","slug":"安装","link":"#安装","children":[]}]},{"level":2,"title":"查看docker占用磁盘空间信息","slug":"查看docker占用磁盘空间信息","link":"#查看docker占用磁盘空间信息","children":[]},{"level":2,"title":"镜像","slug":"镜像","link":"#镜像","children":[{"level":3,"title":"拉取镜像","slug":"拉取镜像","link":"#拉取镜像","children":[]},{"level":3,"title":"列出镜像","slug":"列出镜像","link":"#列出镜像","children":[]},{"level":3,"title":"虚悬镜像","slug":"虚悬镜像","link":"#虚悬镜像","children":[]},{"level":3,"title":"中间层镜像","slug":"中间层镜像","link":"#中间层镜像","children":[]},{"level":3,"title":"删除镜像","slug":"删除镜像","link":"#删除镜像","children":[]}]},{"level":2,"title":"容器","slug":"容器","link":"#容器","children":[{"level":3,"title":"启动容器","slug":"启动容器","link":"#启动容器","children":[]},{"level":3,"title":"查看运行中的容器:","slug":"查看运行中的容器","link":"#查看运行中的容器","children":[]},{"level":3,"title":"终止容器","slug":"终止容器","link":"#终止容器","children":[]},{"level":3,"title":"重启容器","slug":"重启容器","link":"#重启容器","children":[]},{"level":3,"title":"进入运行中的容器","slug":"进入运行中的容器","link":"#进入运行中的容器","children":[]},{"level":3,"title":"导出、导入容器","slug":"导出、导入容器","link":"#导出、导入容器","children":[]},{"level":3,"title":"删除容器","slug":"删除容器","link":"#删除容器","children":[]}]}],"relativePath":"knowledge-deposition/Docker/Docker基础知识.md"}'),c={name:"knowledge-deposition/Docker/Docker基础知识.md"},t=e("",92),r=[t];function i(d,C,y,D,A,h){return l(),a("div",null,r)}const F=s(c,[["render",i]]);export{u as __pageData,F as default};
+import{_ as s,c as a,o as l,e}from"./app.4a806fb4.js";const n="/static-blog/image/docker/image_none.png",o="/static-blog/image/docker/image_middle.png",p="/static-blog/image/docker/dorit.png",u=JSON.parse('{"title":"Docker基础知识","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"基本概念","slug":"基本概念","link":"#基本概念","children":[{"level":3,"title":"Docker镜像(Image)","slug":"docker镜像-image","link":"#docker镜像-image","children":[]},{"level":3,"title":"Docker容器(Container)","slug":"docker容器-container","link":"#docker容器-container","children":[]},{"level":3,"title":"Docker仓库(Repository)","slug":"docker仓库-repository","link":"#docker仓库-repository","children":[]},{"level":3,"title":"安装","slug":"安装","link":"#安装","children":[]}]},{"level":2,"title":"查看docker占用磁盘空间信息","slug":"查看docker占用磁盘空间信息","link":"#查看docker占用磁盘空间信息","children":[]},{"level":2,"title":"镜像","slug":"镜像","link":"#镜像","children":[{"level":3,"title":"拉取镜像","slug":"拉取镜像","link":"#拉取镜像","children":[]},{"level":3,"title":"列出镜像","slug":"列出镜像","link":"#列出镜像","children":[]},{"level":3,"title":"虚悬镜像","slug":"虚悬镜像","link":"#虚悬镜像","children":[]},{"level":3,"title":"中间层镜像","slug":"中间层镜像","link":"#中间层镜像","children":[]},{"level":3,"title":"删除镜像","slug":"删除镜像","link":"#删除镜像","children":[]}]},{"level":2,"title":"容器","slug":"容器","link":"#容器","children":[{"level":3,"title":"启动容器","slug":"启动容器","link":"#启动容器","children":[]},{"level":3,"title":"查看运行中的容器:","slug":"查看运行中的容器","link":"#查看运行中的容器","children":[]},{"level":3,"title":"终止容器","slug":"终止容器","link":"#终止容器","children":[]},{"level":3,"title":"重启容器","slug":"重启容器","link":"#重启容器","children":[]},{"level":3,"title":"进入运行中的容器","slug":"进入运行中的容器","link":"#进入运行中的容器","children":[]},{"level":3,"title":"导出、导入容器","slug":"导出、导入容器","link":"#导出、导入容器","children":[]},{"level":3,"title":"删除容器","slug":"删除容器","link":"#删除容器","children":[]}]}],"relativePath":"knowledge-deposition/Docker/Docker基础知识.md"}'),c={name:"knowledge-deposition/Docker/Docker基础知识.md"},t=e("",92),r=[t];function i(d,C,y,D,A,h){return l(),a("div",null,r)}const F=s(c,[["render",i]]);export{u as __pageData,F as default};
diff --git "a/assets/knowledge-deposition_GoLang_Crawler_HTTP\350\257\267\346\261\202\346\226\271\346\263\225.md.b4518c67.js" "b/assets/knowledge-deposition_GoLang_Crawler_HTTP\350\257\267\346\261\202\346\226\271\346\263\225.md.d55c151b.js"
similarity index 99%
rename from "assets/knowledge-deposition_GoLang_Crawler_HTTP\350\257\267\346\261\202\346\226\271\346\263\225.md.b4518c67.js"
rename to "assets/knowledge-deposition_GoLang_Crawler_HTTP\350\257\267\346\261\202\346\226\271\346\263\225.md.d55c151b.js"
index 615e1cf6..35f034b6 100644
--- "a/assets/knowledge-deposition_GoLang_Crawler_HTTP\350\257\267\346\261\202\346\226\271\346\263\225.md.b4518c67.js"
+++ "b/assets/knowledge-deposition_GoLang_Crawler_HTTP\350\257\267\346\261\202\346\226\271\346\263\225.md.d55c151b.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"HTTP请求方法","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"GET","slug":"get","link":"#get","children":[{"level":3,"title":"不带参数的get请求","slug":"不带参数的get请求","link":"#不带参数的get请求","children":[]},{"level":3,"title":"带query查询参数","slug":"带query查询参数","link":"#带query查询参数","children":[]}]},{"level":2,"title":"HEAD","slug":"head","link":"#head","children":[]},{"level":2,"title":"POST","slug":"post","link":"#post","children":[{"level":3,"title":"不带请求body的POST","slug":"不带请求body的post","link":"#不带请求body的post","children":[]},{"level":3,"title":"带请求body","slug":"带请求body","link":"#带请求body","children":[]},{"level":3,"title":"POST请求参数放到form中","slug":"post请求参数放到form中","link":"#post请求参数放到form中","children":[]}]},{"level":2,"title":"万能方法","slug":"万能方法","link":"#万能方法","children":[]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[{"level":3,"title":"以上代码用到的公共方法","slug":"以上代码用到的公共方法","link":"#以上代码用到的公共方法","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/Crawler/HTTP请求方法.md"}'),p={name:"knowledge-deposition/GoLang/Crawler/HTTP请求方法.md"},o=l(`

HTTP请求方法

GET

GET请求函数源码如下:

Go
func Get(url string) (resp *Response, err error) {
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"HTTP请求方法","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"GET","slug":"get","link":"#get","children":[{"level":3,"title":"不带参数的get请求","slug":"不带参数的get请求","link":"#不带参数的get请求","children":[]},{"level":3,"title":"带query查询参数","slug":"带query查询参数","link":"#带query查询参数","children":[]}]},{"level":2,"title":"HEAD","slug":"head","link":"#head","children":[]},{"level":2,"title":"POST","slug":"post","link":"#post","children":[{"level":3,"title":"不带请求body的POST","slug":"不带请求body的post","link":"#不带请求body的post","children":[]},{"level":3,"title":"带请求body","slug":"带请求body","link":"#带请求body","children":[]},{"level":3,"title":"POST请求参数放到form中","slug":"post请求参数放到form中","link":"#post请求参数放到form中","children":[]}]},{"level":2,"title":"万能方法","slug":"万能方法","link":"#万能方法","children":[]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[{"level":3,"title":"以上代码用到的公共方法","slug":"以上代码用到的公共方法","link":"#以上代码用到的公共方法","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/Crawler/HTTP请求方法.md"}'),p={name:"knowledge-deposition/GoLang/Crawler/HTTP请求方法.md"},o=l(`

HTTP请求方法

GET

GET请求函数源码如下:

Go
func Get(url string) (resp *Response, err error) {
 	return DefaultClient.Get(url)
 }
 

不带参数的get请求

例子:

Go
func getNoParams() {
diff --git "a/assets/knowledge-deposition_GoLang_Crawler_HTTP\350\257\267\346\261\202\346\226\271\346\263\225.md.b4518c67.lean.js" "b/assets/knowledge-deposition_GoLang_Crawler_HTTP\350\257\267\346\261\202\346\226\271\346\263\225.md.d55c151b.lean.js"
similarity index 95%
rename from "assets/knowledge-deposition_GoLang_Crawler_HTTP\350\257\267\346\261\202\346\226\271\346\263\225.md.b4518c67.lean.js"
rename to "assets/knowledge-deposition_GoLang_Crawler_HTTP\350\257\267\346\261\202\346\226\271\346\263\225.md.d55c151b.lean.js"
index e736a63e..0a40870b 100644
--- "a/assets/knowledge-deposition_GoLang_Crawler_HTTP\350\257\267\346\261\202\346\226\271\346\263\225.md.b4518c67.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_Crawler_HTTP\350\257\267\346\261\202\346\226\271\346\263\225.md.d55c151b.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"HTTP请求方法","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"GET","slug":"get","link":"#get","children":[{"level":3,"title":"不带参数的get请求","slug":"不带参数的get请求","link":"#不带参数的get请求","children":[]},{"level":3,"title":"带query查询参数","slug":"带query查询参数","link":"#带query查询参数","children":[]}]},{"level":2,"title":"HEAD","slug":"head","link":"#head","children":[]},{"level":2,"title":"POST","slug":"post","link":"#post","children":[{"level":3,"title":"不带请求body的POST","slug":"不带请求body的post","link":"#不带请求body的post","children":[]},{"level":3,"title":"带请求body","slug":"带请求body","link":"#带请求body","children":[]},{"level":3,"title":"POST请求参数放到form中","slug":"post请求参数放到form中","link":"#post请求参数放到form中","children":[]}]},{"level":2,"title":"万能方法","slug":"万能方法","link":"#万能方法","children":[]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[{"level":3,"title":"以上代码用到的公共方法","slug":"以上代码用到的公共方法","link":"#以上代码用到的公共方法","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/Crawler/HTTP请求方法.md"}'),p={name:"knowledge-deposition/GoLang/Crawler/HTTP请求方法.md"},o=l("",35),e=[o];function t(D,r,c,F,y,A){return a(),n("div",null,e)}const u=s(p,[["render",t]]);export{i as __pageData,u as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"HTTP请求方法","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"GET","slug":"get","link":"#get","children":[{"level":3,"title":"不带参数的get请求","slug":"不带参数的get请求","link":"#不带参数的get请求","children":[]},{"level":3,"title":"带query查询参数","slug":"带query查询参数","link":"#带query查询参数","children":[]}]},{"level":2,"title":"HEAD","slug":"head","link":"#head","children":[]},{"level":2,"title":"POST","slug":"post","link":"#post","children":[{"level":3,"title":"不带请求body的POST","slug":"不带请求body的post","link":"#不带请求body的post","children":[]},{"level":3,"title":"带请求body","slug":"带请求body","link":"#带请求body","children":[]},{"level":3,"title":"POST请求参数放到form中","slug":"post请求参数放到form中","link":"#post请求参数放到form中","children":[]}]},{"level":2,"title":"万能方法","slug":"万能方法","link":"#万能方法","children":[]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[{"level":3,"title":"以上代码用到的公共方法","slug":"以上代码用到的公共方法","link":"#以上代码用到的公共方法","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/Crawler/HTTP请求方法.md"}'),p={name:"knowledge-deposition/GoLang/Crawler/HTTP请求方法.md"},o=l("",35),e=[o];function t(D,r,c,F,y,A){return a(),n("div",null,e)}const u=s(p,[["render",t]]);export{i as __pageData,u as default};
diff --git "a/assets/knowledge-deposition_GoLang_Gin_bind\347\273\221\345\256\232\345\231\250.md.1284249d.js" "b/assets/knowledge-deposition_GoLang_Gin_bind\347\273\221\345\256\232\345\231\250.md.9ceb2b33.js"
similarity index 99%
rename from "assets/knowledge-deposition_GoLang_Gin_bind\347\273\221\345\256\232\345\231\250.md.1284249d.js"
rename to "assets/knowledge-deposition_GoLang_Gin_bind\347\273\221\345\256\232\345\231\250.md.9ceb2b33.js"
index 5fd9370c..e0c2777e 100644
--- "a/assets/knowledge-deposition_GoLang_Gin_bind\347\273\221\345\256\232\345\231\250.md.1284249d.js"
+++ "b/assets/knowledge-deposition_GoLang_Gin_bind\347\273\221\345\256\232\345\231\250.md.9ceb2b33.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const o="/static-blog/image/go/ShouldBindJSON.png",p="/static-blog/image/go/ShouldBindQuery.png",t="/static-blog/image/go/ShouldBindUri.png",e="/static-blog/image/go/ShouldBind.png",q=JSON.parse('{"title":"bind绑定器","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"绑定器API","slug":"绑定器api","link":"#绑定器api","children":[{"level":3,"title":"ShouldBindJSON","slug":"shouldbindjson","link":"#shouldbindjson","children":[]},{"level":3,"title":"ShouldBindQuery","slug":"shouldbindquery","link":"#shouldbindquery","children":[]},{"level":3,"title":"ShouldBindUri","slug":"shouldbinduri","link":"#shouldbinduri","children":[]},{"level":3,"title":"ShouldBind","slug":"shouldbind","link":"#shouldbind","children":[]}]},{"level":2,"title":"参数校验","slug":"参数校验","link":"#参数校验","children":[{"level":3,"title":"必填校验","slug":"必填校验","link":"#必填校验","children":[]},{"level":3,"title":"范围约束","slug":"范围约束","link":"#范围约束","children":[]},{"level":3,"title":"唯一性unique","slug":"唯一性unique","link":"#唯一性unique","children":[]},{"level":3,"title":"字符串约束","slug":"字符串约束","link":"#字符串约束","children":[]},{"level":3,"title":"约束其他字段","slug":"约束其他字段","link":"#约束其他字段","children":[]}]},{"level":2,"title":"自定义校验器","slug":"自定义校验器","link":"#自定义校验器","children":[]},{"level":2,"title":"自定义错误信息","slug":"自定义错误信息","link":"#自定义错误信息","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gin/bind绑定器.md"}'),c={name:"knowledge-deposition/GoLang/Gin/bind绑定器.md"},r=l(`

bind绑定器

  • gin中的绑定器bind可以很方便的将前端传递来的数据与结构体进行参数绑定,以及参数校验

  • 在使用这个功能的时候,需要给结构体加上Tag, 如:jsonformurixmlyaml

绑定器API

ShouldBindJSON

Go
type User struct {
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const o="/static-blog/image/go/ShouldBindJSON.png",p="/static-blog/image/go/ShouldBindQuery.png",t="/static-blog/image/go/ShouldBindUri.png",e="/static-blog/image/go/ShouldBind.png",q=JSON.parse('{"title":"bind绑定器","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"绑定器API","slug":"绑定器api","link":"#绑定器api","children":[{"level":3,"title":"ShouldBindJSON","slug":"shouldbindjson","link":"#shouldbindjson","children":[]},{"level":3,"title":"ShouldBindQuery","slug":"shouldbindquery","link":"#shouldbindquery","children":[]},{"level":3,"title":"ShouldBindUri","slug":"shouldbinduri","link":"#shouldbinduri","children":[]},{"level":3,"title":"ShouldBind","slug":"shouldbind","link":"#shouldbind","children":[]}]},{"level":2,"title":"参数校验","slug":"参数校验","link":"#参数校验","children":[{"level":3,"title":"必填校验","slug":"必填校验","link":"#必填校验","children":[]},{"level":3,"title":"范围约束","slug":"范围约束","link":"#范围约束","children":[]},{"level":3,"title":"唯一性unique","slug":"唯一性unique","link":"#唯一性unique","children":[]},{"level":3,"title":"字符串约束","slug":"字符串约束","link":"#字符串约束","children":[]},{"level":3,"title":"约束其他字段","slug":"约束其他字段","link":"#约束其他字段","children":[]}]},{"level":2,"title":"自定义校验器","slug":"自定义校验器","link":"#自定义校验器","children":[]},{"level":2,"title":"自定义错误信息","slug":"自定义错误信息","link":"#自定义错误信息","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gin/bind绑定器.md"}'),c={name:"knowledge-deposition/GoLang/Gin/bind绑定器.md"},r=l(`

bind绑定器

  • gin中的绑定器bind可以很方便的将前端传递来的数据与结构体进行参数绑定,以及参数校验

  • 在使用这个功能的时候,需要给结构体加上Tag, 如:jsonformurixmlyaml

绑定器API

ShouldBindJSON

Go
type User struct {
 	UserName string \`json:"user_name" form:"user_name" uri:"user_name"\`
 	Age int \`json:"age" form:"age" uri:"age"\`
 	Sex string \`json:"sex" form:"sex" uri:"sex"\`
diff --git "a/assets/knowledge-deposition_GoLang_Gin_bind\347\273\221\345\256\232\345\231\250.md.1284249d.lean.js" "b/assets/knowledge-deposition_GoLang_Gin_bind\347\273\221\345\256\232\345\231\250.md.9ceb2b33.lean.js"
similarity index 96%
rename from "assets/knowledge-deposition_GoLang_Gin_bind\347\273\221\345\256\232\345\231\250.md.1284249d.lean.js"
rename to "assets/knowledge-deposition_GoLang_Gin_bind\347\273\221\345\256\232\345\231\250.md.9ceb2b33.lean.js"
index 4b2fa3b7..d9c25c03 100644
--- "a/assets/knowledge-deposition_GoLang_Gin_bind\347\273\221\345\256\232\345\231\250.md.1284249d.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_Gin_bind\347\273\221\345\256\232\345\231\250.md.9ceb2b33.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const o="/static-blog/image/go/ShouldBindJSON.png",p="/static-blog/image/go/ShouldBindQuery.png",t="/static-blog/image/go/ShouldBindUri.png",e="/static-blog/image/go/ShouldBind.png",q=JSON.parse('{"title":"bind绑定器","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"绑定器API","slug":"绑定器api","link":"#绑定器api","children":[{"level":3,"title":"ShouldBindJSON","slug":"shouldbindjson","link":"#shouldbindjson","children":[]},{"level":3,"title":"ShouldBindQuery","slug":"shouldbindquery","link":"#shouldbindquery","children":[]},{"level":3,"title":"ShouldBindUri","slug":"shouldbinduri","link":"#shouldbinduri","children":[]},{"level":3,"title":"ShouldBind","slug":"shouldbind","link":"#shouldbind","children":[]}]},{"level":2,"title":"参数校验","slug":"参数校验","link":"#参数校验","children":[{"level":3,"title":"必填校验","slug":"必填校验","link":"#必填校验","children":[]},{"level":3,"title":"范围约束","slug":"范围约束","link":"#范围约束","children":[]},{"level":3,"title":"唯一性unique","slug":"唯一性unique","link":"#唯一性unique","children":[]},{"level":3,"title":"字符串约束","slug":"字符串约束","link":"#字符串约束","children":[]},{"level":3,"title":"约束其他字段","slug":"约束其他字段","link":"#约束其他字段","children":[]}]},{"level":2,"title":"自定义校验器","slug":"自定义校验器","link":"#自定义校验器","children":[]},{"level":2,"title":"自定义错误信息","slug":"自定义错误信息","link":"#自定义错误信息","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gin/bind绑定器.md"}'),c={name:"knowledge-deposition/GoLang/Gin/bind绑定器.md"},r=l("",54),D=[r];function y(F,A,C,i,u,d){return a(),n("div",null,D)}const m=s(c,[["render",y]]);export{q as __pageData,m as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const o="/static-blog/image/go/ShouldBindJSON.png",p="/static-blog/image/go/ShouldBindQuery.png",t="/static-blog/image/go/ShouldBindUri.png",e="/static-blog/image/go/ShouldBind.png",q=JSON.parse('{"title":"bind绑定器","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"绑定器API","slug":"绑定器api","link":"#绑定器api","children":[{"level":3,"title":"ShouldBindJSON","slug":"shouldbindjson","link":"#shouldbindjson","children":[]},{"level":3,"title":"ShouldBindQuery","slug":"shouldbindquery","link":"#shouldbindquery","children":[]},{"level":3,"title":"ShouldBindUri","slug":"shouldbinduri","link":"#shouldbinduri","children":[]},{"level":3,"title":"ShouldBind","slug":"shouldbind","link":"#shouldbind","children":[]}]},{"level":2,"title":"参数校验","slug":"参数校验","link":"#参数校验","children":[{"level":3,"title":"必填校验","slug":"必填校验","link":"#必填校验","children":[]},{"level":3,"title":"范围约束","slug":"范围约束","link":"#范围约束","children":[]},{"level":3,"title":"唯一性unique","slug":"唯一性unique","link":"#唯一性unique","children":[]},{"level":3,"title":"字符串约束","slug":"字符串约束","link":"#字符串约束","children":[]},{"level":3,"title":"约束其他字段","slug":"约束其他字段","link":"#约束其他字段","children":[]}]},{"level":2,"title":"自定义校验器","slug":"自定义校验器","link":"#自定义校验器","children":[]},{"level":2,"title":"自定义错误信息","slug":"自定义错误信息","link":"#自定义错误信息","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gin/bind绑定器.md"}'),c={name:"knowledge-deposition/GoLang/Gin/bind绑定器.md"},r=l("",54),D=[r];function y(F,A,C,i,u,d){return a(),n("div",null,D)}const m=s(c,[["render",y]]);export{q as __pageData,m as default};
diff --git a/assets/knowledge-deposition_GoLang_Gin_hello-world.md.f785906c.js b/assets/knowledge-deposition_GoLang_Gin_hello-world.md.636eb2cc.js
similarity index 99%
rename from assets/knowledge-deposition_GoLang_Gin_hello-world.md.f785906c.js
rename to assets/knowledge-deposition_GoLang_Gin_hello-world.md.636eb2cc.js
index 31d9f2d7..bb0e7c56 100644
--- a/assets/knowledge-deposition_GoLang_Gin_hello-world.md.f785906c.js
+++ b/assets/knowledge-deposition_GoLang_Gin_hello-world.md.636eb2cc.js
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const A=JSON.parse('{"title":"hello-world","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"项目初始化并启动","slug":"项目初始化并启动","link":"#项目初始化并启动","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gin/hello-world.md"}'),o={name:"knowledge-deposition/GoLang/Gin/hello-world.md"},p=l(`

hello-world

项目初始化并启动

  • 初始化
shell
go mod init projectname
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const A=JSON.parse('{"title":"hello-world","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"项目初始化并启动","slug":"项目初始化并启动","link":"#项目初始化并启动","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gin/hello-world.md"}'),o={name:"knowledge-deposition/GoLang/Gin/hello-world.md"},p=l(`

hello-world

项目初始化并启动

  • 初始化
shell
go mod init projectname
 
 go mod init github.com/username/projectname
 
  • 下载gin
shell
go get -u github.com/gin-gonic/gin
diff --git a/assets/knowledge-deposition_GoLang_Gin_hello-world.md.f785906c.lean.js b/assets/knowledge-deposition_GoLang_Gin_hello-world.md.636eb2cc.lean.js
similarity index 88%
rename from assets/knowledge-deposition_GoLang_Gin_hello-world.md.f785906c.lean.js
rename to assets/knowledge-deposition_GoLang_Gin_hello-world.md.636eb2cc.lean.js
index 96a421fe..f0877d51 100644
--- a/assets/knowledge-deposition_GoLang_Gin_hello-world.md.f785906c.lean.js
+++ b/assets/knowledge-deposition_GoLang_Gin_hello-world.md.636eb2cc.lean.js
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const A=JSON.parse('{"title":"hello-world","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"项目初始化并启动","slug":"项目初始化并启动","link":"#项目初始化并启动","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gin/hello-world.md"}'),o={name:"knowledge-deposition/GoLang/Gin/hello-world.md"},p=l("",10),e=[p];function t(c,r,D,i,y,F){return a(),n("div",null,e)}const d=s(o,[["render",t]]);export{A as __pageData,d as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const A=JSON.parse('{"title":"hello-world","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"项目初始化并启动","slug":"项目初始化并启动","link":"#项目初始化并启动","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gin/hello-world.md"}'),o={name:"knowledge-deposition/GoLang/Gin/hello-world.md"},p=l("",10),e=[p];function t(c,r,D,i,y,F){return a(),n("div",null,e)}const d=s(o,[["render",t]]);export{A as __pageData,d as default};
diff --git "a/assets/knowledge-deposition_GoLang_Gin_\344\270\212\344\274\240\345\222\214\344\270\213\350\275\275\346\226\207\344\273\266.md.74431ba5.js" "b/assets/knowledge-deposition_GoLang_Gin_\344\270\212\344\274\240\345\222\214\344\270\213\350\275\275\346\226\207\344\273\266.md.d8791962.js"
similarity index 99%
rename from "assets/knowledge-deposition_GoLang_Gin_\344\270\212\344\274\240\345\222\214\344\270\213\350\275\275\346\226\207\344\273\266.md.74431ba5.js"
rename to "assets/knowledge-deposition_GoLang_Gin_\344\270\212\344\274\240\345\222\214\344\270\213\350\275\275\346\226\207\344\273\266.md.d8791962.js"
index d0f5bdc5..b1ca1b77 100644
--- "a/assets/knowledge-deposition_GoLang_Gin_\344\270\212\344\274\240\345\222\214\344\270\213\350\275\275\346\226\207\344\273\266.md.74431ba5.js"
+++ "b/assets/knowledge-deposition_GoLang_Gin_\344\270\212\344\274\240\345\222\214\344\270\213\350\275\275\346\226\207\344\273\266.md.d8791962.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"上传和下载文件","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"上传文件","slug":"上传文件","link":"#上传文件","children":[{"level":3,"title":"上传单个文件","slug":"上传单个文件","link":"#上传单个文件","children":[]},{"level":3,"title":"上传多个文件","slug":"上传多个文件","link":"#上传多个文件","children":[]}]},{"level":2,"title":"文件下载","slug":"文件下载","link":"#文件下载","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gin/上传和下载文件.md"}'),p={name:"knowledge-deposition/GoLang/Gin/上传和下载文件.md"},o=l(`

上传和下载文件

上传文件

  • 服务端使用ctx.SaveUploadedFile保存文件到服务器
Go
// 通过name获取form file
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"上传和下载文件","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"上传文件","slug":"上传文件","link":"#上传文件","children":[{"level":3,"title":"上传单个文件","slug":"上传单个文件","link":"#上传单个文件","children":[]},{"level":3,"title":"上传多个文件","slug":"上传多个文件","link":"#上传多个文件","children":[]}]},{"level":2,"title":"文件下载","slug":"文件下载","link":"#文件下载","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gin/上传和下载文件.md"}'),p={name:"knowledge-deposition/GoLang/Gin/上传和下载文件.md"},o=l(`

上传和下载文件

上传文件

  • 服务端使用ctx.SaveUploadedFile保存文件到服务器
Go
// 通过name获取form file
 func (c *Context) FormFile(name string) (*multipart.FileHeader, error)
 // 获取上传的整个form
 func (c *Context) MultipartForm() (*multipart.Form, error)
diff --git "a/assets/knowledge-deposition_GoLang_Gin_\344\270\212\344\274\240\345\222\214\344\270\213\350\275\275\346\226\207\344\273\266.md.74431ba5.lean.js" "b/assets/knowledge-deposition_GoLang_Gin_\344\270\212\344\274\240\345\222\214\344\270\213\350\275\275\346\226\207\344\273\266.md.d8791962.lean.js"
similarity index 92%
rename from "assets/knowledge-deposition_GoLang_Gin_\344\270\212\344\274\240\345\222\214\344\270\213\350\275\275\346\226\207\344\273\266.md.74431ba5.lean.js"
rename to "assets/knowledge-deposition_GoLang_Gin_\344\270\212\344\274\240\345\222\214\344\270\213\350\275\275\346\226\207\344\273\266.md.d8791962.lean.js"
index 6a18f318..7b299a69 100644
--- "a/assets/knowledge-deposition_GoLang_Gin_\344\270\212\344\274\240\345\222\214\344\270\213\350\275\275\346\226\207\344\273\266.md.74431ba5.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_Gin_\344\270\212\344\274\240\345\222\214\344\270\213\350\275\275\346\226\207\344\273\266.md.d8791962.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"上传和下载文件","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"上传文件","slug":"上传文件","link":"#上传文件","children":[{"level":3,"title":"上传单个文件","slug":"上传单个文件","link":"#上传单个文件","children":[]},{"level":3,"title":"上传多个文件","slug":"上传多个文件","link":"#上传多个文件","children":[]}]},{"level":2,"title":"文件下载","slug":"文件下载","link":"#文件下载","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gin/上传和下载文件.md"}'),p={name:"knowledge-deposition/GoLang/Gin/上传和下载文件.md"},o=l("",25),t=[o];function e(c,D,F,r,y,A){return a(),n("div",null,t)}const u=s(p,[["render",e]]);export{i as __pageData,u as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"上传和下载文件","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"上传文件","slug":"上传文件","link":"#上传文件","children":[{"level":3,"title":"上传单个文件","slug":"上传单个文件","link":"#上传单个文件","children":[]},{"level":3,"title":"上传多个文件","slug":"上传多个文件","link":"#上传多个文件","children":[]}]},{"level":2,"title":"文件下载","slug":"文件下载","link":"#文件下载","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gin/上传和下载文件.md"}'),p={name:"knowledge-deposition/GoLang/Gin/上传和下载文件.md"},o=l("",25),t=[o];function e(c,D,F,r,y,A){return a(),n("div",null,t)}const u=s(p,[["render",e]]);export{i as __pageData,u as default};
diff --git "a/assets/knowledge-deposition_GoLang_Gin_\344\270\255\351\227\264\344\273\266.md.cc2d04cb.js" "b/assets/knowledge-deposition_GoLang_Gin_\344\270\255\351\227\264\344\273\266.md.4ac3f3f8.js"
similarity index 99%
rename from "assets/knowledge-deposition_GoLang_Gin_\344\270\255\351\227\264\344\273\266.md.cc2d04cb.js"
rename to "assets/knowledge-deposition_GoLang_Gin_\344\270\255\351\227\264\344\273\266.md.4ac3f3f8.js"
index 53967549..7ba6eb33 100644
--- "a/assets/knowledge-deposition_GoLang_Gin_\344\270\255\351\227\264\344\273\266.md.cc2d04cb.js"
+++ "b/assets/knowledge-deposition_GoLang_Gin_\344\270\255\351\227\264\344\273\266.md.4ac3f3f8.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"中间件","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"单个路由中间件","slug":"单个路由中间件","link":"#单个路由中间件","children":[{"level":3,"title":"阻断中间件继续执行","slug":"阻断中间件继续执行","link":"#阻断中间件继续执行","children":[]}]},{"level":2,"title":"全局中间件","slug":"全局中间件","link":"#全局中间件","children":[]},{"level":2,"title":"分组路由中间件","slug":"分组路由中间件","link":"#分组路由中间件","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gin/中间件.md"}'),p={name:"knowledge-deposition/GoLang/Gin/中间件.md"},o=l(`

中间件

  • gin中间件和Koa的中间件思想一致,都是洋葱模型

  • 使用ctx.Next方法表示调用下一个中间件

  • 使用ctx.Abort方法表示阻断当前中间件之后的其他中间件执行

单个路由中间件

Go
package main
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"中间件","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"单个路由中间件","slug":"单个路由中间件","link":"#单个路由中间件","children":[{"level":3,"title":"阻断中间件继续执行","slug":"阻断中间件继续执行","link":"#阻断中间件继续执行","children":[]}]},{"level":2,"title":"全局中间件","slug":"全局中间件","link":"#全局中间件","children":[]},{"level":2,"title":"分组路由中间件","slug":"分组路由中间件","link":"#分组路由中间件","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gin/中间件.md"}'),p={name:"knowledge-deposition/GoLang/Gin/中间件.md"},o=l(`

中间件

  • gin中间件和Koa的中间件思想一致,都是洋葱模型

  • 使用ctx.Next方法表示调用下一个中间件

  • 使用ctx.Abort方法表示阻断当前中间件之后的其他中间件执行

单个路由中间件

Go
package main
 
 import (
 	"fmt"
diff --git "a/assets/knowledge-deposition_GoLang_Gin_\344\270\255\351\227\264\344\273\266.md.cc2d04cb.lean.js" "b/assets/knowledge-deposition_GoLang_Gin_\344\270\255\351\227\264\344\273\266.md.4ac3f3f8.lean.js"
similarity index 92%
rename from "assets/knowledge-deposition_GoLang_Gin_\344\270\255\351\227\264\344\273\266.md.cc2d04cb.lean.js"
rename to "assets/knowledge-deposition_GoLang_Gin_\344\270\255\351\227\264\344\273\266.md.4ac3f3f8.lean.js"
index 2f8e3425..0156c6c8 100644
--- "a/assets/knowledge-deposition_GoLang_Gin_\344\270\255\351\227\264\344\273\266.md.cc2d04cb.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_Gin_\344\270\255\351\227\264\344\273\266.md.4ac3f3f8.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"中间件","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"单个路由中间件","slug":"单个路由中间件","link":"#单个路由中间件","children":[{"level":3,"title":"阻断中间件继续执行","slug":"阻断中间件继续执行","link":"#阻断中间件继续执行","children":[]}]},{"level":2,"title":"全局中间件","slug":"全局中间件","link":"#全局中间件","children":[]},{"level":2,"title":"分组路由中间件","slug":"分组路由中间件","link":"#分组路由中间件","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gin/中间件.md"}'),p={name:"knowledge-deposition/GoLang/Gin/中间件.md"},o=l("",22),e=[o];function t(c,D,r,F,y,A){return a(),n("div",null,e)}const u=s(p,[["render",t]]);export{i as __pageData,u as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"中间件","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"单个路由中间件","slug":"单个路由中间件","link":"#单个路由中间件","children":[{"level":3,"title":"阻断中间件继续执行","slug":"阻断中间件继续执行","link":"#阻断中间件继续执行","children":[]}]},{"level":2,"title":"全局中间件","slug":"全局中间件","link":"#全局中间件","children":[]},{"level":2,"title":"分组路由中间件","slug":"分组路由中间件","link":"#分组路由中间件","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gin/中间件.md"}'),p={name:"knowledge-deposition/GoLang/Gin/中间件.md"},o=l("",22),e=[o];function t(c,D,r,F,y,A){return a(),n("div",null,e)}const u=s(p,[["render",t]]);export{i as __pageData,u as default};
diff --git "a/assets/knowledge-deposition_GoLang_Gin_\345\223\215\345\272\224\346\225\260\346\215\256.md.81a3d1b3.js" "b/assets/knowledge-deposition_GoLang_Gin_\345\223\215\345\272\224\346\225\260\346\215\256.md.52608b1f.js"
similarity index 99%
rename from "assets/knowledge-deposition_GoLang_Gin_\345\223\215\345\272\224\346\225\260\346\215\256.md.81a3d1b3.js"
rename to "assets/knowledge-deposition_GoLang_Gin_\345\223\215\345\272\224\346\225\260\346\215\256.md.52608b1f.js"
index 803a663f..49f849e4 100644
--- "a/assets/knowledge-deposition_GoLang_Gin_\345\223\215\345\272\224\346\225\260\346\215\256.md.81a3d1b3.js"
+++ "b/assets/knowledge-deposition_GoLang_Gin_\345\223\215\345\272\224\346\225\260\346\215\256.md.52608b1f.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"响应数据","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"响应字符串","slug":"响应字符串","link":"#响应字符串","children":[]},{"level":2,"title":"响应JSON","slug":"响应json","link":"#响应json","children":[{"level":3,"title":"使用结构体","slug":"使用结构体","link":"#使用结构体","children":[]},{"level":3,"title":"使用map","slug":"使用map","link":"#使用map","children":[]},{"level":3,"title":"直接响应JSON","slug":"直接响应json","link":"#直接响应json","children":[]}]},{"level":2,"title":"响应XML","slug":"响应xml","link":"#响应xml","children":[{"level":3,"title":"字符串返回","slug":"字符串返回","link":"#字符串返回","children":[]},{"level":3,"title":"结构体返回","slug":"结构体返回","link":"#结构体返回","children":[]},{"level":3,"title":"通过gin.H返回","slug":"通过gin-h返回","link":"#通过gin-h返回","children":[]}]},{"level":2,"title":"响应yaml","slug":"响应yaml","link":"#响应yaml","children":[{"level":3,"title":"结构体返回","slug":"结构体返回-1","link":"#结构体返回-1","children":[]},{"level":3,"title":"通过gin.H返回","slug":"通过gin-h返回-1","link":"#通过gin-h返回-1","children":[]}]},{"level":2,"title":"响应HTML","slug":"响应html","link":"#响应html","children":[]},{"level":2,"title":"响应文件","slug":"响应文件","link":"#响应文件","children":[{"level":3,"title":"Serving static files提供静态文件服务","slug":"serving-static-files提供静态文件服务","link":"#serving-static-files提供静态文件服务","children":[]},{"level":3,"title":"Serving data from file返回文件数据","slug":"serving-data-from-file返回文件数据","link":"#serving-data-from-file返回文件数据","children":[]}]},{"level":2,"title":"重定向","slug":"重定向","link":"#重定向","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gin/响应数据.md"}'),p={name:"knowledge-deposition/GoLang/Gin/响应数据.md"},o=l(`

响应数据

响应字符串

Go
func UserHandle(ctx *gin.Context) {
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"响应数据","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"响应字符串","slug":"响应字符串","link":"#响应字符串","children":[]},{"level":2,"title":"响应JSON","slug":"响应json","link":"#响应json","children":[{"level":3,"title":"使用结构体","slug":"使用结构体","link":"#使用结构体","children":[]},{"level":3,"title":"使用map","slug":"使用map","link":"#使用map","children":[]},{"level":3,"title":"直接响应JSON","slug":"直接响应json","link":"#直接响应json","children":[]}]},{"level":2,"title":"响应XML","slug":"响应xml","link":"#响应xml","children":[{"level":3,"title":"字符串返回","slug":"字符串返回","link":"#字符串返回","children":[]},{"level":3,"title":"结构体返回","slug":"结构体返回","link":"#结构体返回","children":[]},{"level":3,"title":"通过gin.H返回","slug":"通过gin-h返回","link":"#通过gin-h返回","children":[]}]},{"level":2,"title":"响应yaml","slug":"响应yaml","link":"#响应yaml","children":[{"level":3,"title":"结构体返回","slug":"结构体返回-1","link":"#结构体返回-1","children":[]},{"level":3,"title":"通过gin.H返回","slug":"通过gin-h返回-1","link":"#通过gin-h返回-1","children":[]}]},{"level":2,"title":"响应HTML","slug":"响应html","link":"#响应html","children":[]},{"level":2,"title":"响应文件","slug":"响应文件","link":"#响应文件","children":[{"level":3,"title":"Serving static files提供静态文件服务","slug":"serving-static-files提供静态文件服务","link":"#serving-static-files提供静态文件服务","children":[]},{"level":3,"title":"Serving data from file返回文件数据","slug":"serving-data-from-file返回文件数据","link":"#serving-data-from-file返回文件数据","children":[]}]},{"level":2,"title":"重定向","slug":"重定向","link":"#重定向","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gin/响应数据.md"}'),p={name:"knowledge-deposition/GoLang/Gin/响应数据.md"},o=l(`

响应数据

响应字符串

Go
func UserHandle(ctx *gin.Context) {
 	ctx.String(http.StatusOK, "hello world")
 } 
 

响应JSON

使用结构体

  • 可以通过json tag来设置返回数据的别名,格式如下,这样返回的json数据的key就是设置的别名
Go
type User struct {
diff --git "a/assets/knowledge-deposition_GoLang_Gin_\345\223\215\345\272\224\346\225\260\346\215\256.md.81a3d1b3.lean.js" "b/assets/knowledge-deposition_GoLang_Gin_\345\223\215\345\272\224\346\225\260\346\215\256.md.52608b1f.lean.js"
similarity index 97%
rename from "assets/knowledge-deposition_GoLang_Gin_\345\223\215\345\272\224\346\225\260\346\215\256.md.81a3d1b3.lean.js"
rename to "assets/knowledge-deposition_GoLang_Gin_\345\223\215\345\272\224\346\225\260\346\215\256.md.52608b1f.lean.js"
index 8150a255..a71902e2 100644
--- "a/assets/knowledge-deposition_GoLang_Gin_\345\223\215\345\272\224\346\225\260\346\215\256.md.81a3d1b3.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_Gin_\345\223\215\345\272\224\346\225\260\346\215\256.md.52608b1f.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"响应数据","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"响应字符串","slug":"响应字符串","link":"#响应字符串","children":[]},{"level":2,"title":"响应JSON","slug":"响应json","link":"#响应json","children":[{"level":3,"title":"使用结构体","slug":"使用结构体","link":"#使用结构体","children":[]},{"level":3,"title":"使用map","slug":"使用map","link":"#使用map","children":[]},{"level":3,"title":"直接响应JSON","slug":"直接响应json","link":"#直接响应json","children":[]}]},{"level":2,"title":"响应XML","slug":"响应xml","link":"#响应xml","children":[{"level":3,"title":"字符串返回","slug":"字符串返回","link":"#字符串返回","children":[]},{"level":3,"title":"结构体返回","slug":"结构体返回","link":"#结构体返回","children":[]},{"level":3,"title":"通过gin.H返回","slug":"通过gin-h返回","link":"#通过gin-h返回","children":[]}]},{"level":2,"title":"响应yaml","slug":"响应yaml","link":"#响应yaml","children":[{"level":3,"title":"结构体返回","slug":"结构体返回-1","link":"#结构体返回-1","children":[]},{"level":3,"title":"通过gin.H返回","slug":"通过gin-h返回-1","link":"#通过gin-h返回-1","children":[]}]},{"level":2,"title":"响应HTML","slug":"响应html","link":"#响应html","children":[]},{"level":2,"title":"响应文件","slug":"响应文件","link":"#响应文件","children":[{"level":3,"title":"Serving static files提供静态文件服务","slug":"serving-static-files提供静态文件服务","link":"#serving-static-files提供静态文件服务","children":[]},{"level":3,"title":"Serving data from file返回文件数据","slug":"serving-data-from-file返回文件数据","link":"#serving-data-from-file返回文件数据","children":[]}]},{"level":2,"title":"重定向","slug":"重定向","link":"#重定向","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gin/响应数据.md"}'),p={name:"knowledge-deposition/GoLang/Gin/响应数据.md"},o=l("",75),t=[o];function e(c,D,r,F,y,C){return a(),n("div",null,t)}const u=s(p,[["render",e]]);export{i as __pageData,u as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"响应数据","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"响应字符串","slug":"响应字符串","link":"#响应字符串","children":[]},{"level":2,"title":"响应JSON","slug":"响应json","link":"#响应json","children":[{"level":3,"title":"使用结构体","slug":"使用结构体","link":"#使用结构体","children":[]},{"level":3,"title":"使用map","slug":"使用map","link":"#使用map","children":[]},{"level":3,"title":"直接响应JSON","slug":"直接响应json","link":"#直接响应json","children":[]}]},{"level":2,"title":"响应XML","slug":"响应xml","link":"#响应xml","children":[{"level":3,"title":"字符串返回","slug":"字符串返回","link":"#字符串返回","children":[]},{"level":3,"title":"结构体返回","slug":"结构体返回","link":"#结构体返回","children":[]},{"level":3,"title":"通过gin.H返回","slug":"通过gin-h返回","link":"#通过gin-h返回","children":[]}]},{"level":2,"title":"响应yaml","slug":"响应yaml","link":"#响应yaml","children":[{"level":3,"title":"结构体返回","slug":"结构体返回-1","link":"#结构体返回-1","children":[]},{"level":3,"title":"通过gin.H返回","slug":"通过gin-h返回-1","link":"#通过gin-h返回-1","children":[]}]},{"level":2,"title":"响应HTML","slug":"响应html","link":"#响应html","children":[]},{"level":2,"title":"响应文件","slug":"响应文件","link":"#响应文件","children":[{"level":3,"title":"Serving static files提供静态文件服务","slug":"serving-static-files提供静态文件服务","link":"#serving-static-files提供静态文件服务","children":[]},{"level":3,"title":"Serving data from file返回文件数据","slug":"serving-data-from-file返回文件数据","link":"#serving-data-from-file返回文件数据","children":[]}]},{"level":2,"title":"重定向","slug":"重定向","link":"#重定向","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gin/响应数据.md"}'),p={name:"knowledge-deposition/GoLang/Gin/响应数据.md"},o=l("",75),t=[o];function e(c,D,r,F,y,C){return a(),n("div",null,t)}const u=s(p,[["render",e]]);export{i as __pageData,u as default};
diff --git "a/assets/knowledge-deposition_GoLang_Gin_\346\224\257\346\214\201\350\267\250\345\237\237.md.a6da96aa.js" "b/assets/knowledge-deposition_GoLang_Gin_\346\224\257\346\214\201\350\267\250\345\237\237.md.69953c2c.js"
similarity index 99%
rename from "assets/knowledge-deposition_GoLang_Gin_\346\224\257\346\214\201\350\267\250\345\237\237.md.a6da96aa.js"
rename to "assets/knowledge-deposition_GoLang_Gin_\346\224\257\346\214\201\350\267\250\345\237\237.md.69953c2c.js"
index d133d84f..d7989907 100644
--- "a/assets/knowledge-deposition_GoLang_Gin_\346\224\257\346\214\201\350\267\250\345\237\237.md.a6da96aa.js"
+++ "b/assets/knowledge-deposition_GoLang_Gin_\346\224\257\346\214\201\350\267\250\345\237\237.md.69953c2c.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const C=JSON.parse('{"title":"支持跨域","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"下载依赖","slug":"下载依赖","link":"#下载依赖","children":[]},{"level":2,"title":"配置","slug":"配置","link":"#配置","children":[{"level":3,"title":"典型的例子","slug":"典型的例子","link":"#典型的例子","children":[]},{"level":3,"title":"使用DefaultConfig","slug":"使用defaultconfig","link":"#使用defaultconfig","children":[]},{"level":3,"title":"使用Default","slug":"使用default","link":"#使用default","children":[]}]},{"level":2,"title":"原理","slug":"原理","link":"#原理","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gin/支持跨域.md"}'),o={name:"knowledge-deposition/GoLang/Gin/支持跨域.md"},p=l(`

支持跨域

下载依赖

shell
go get -u github.com/gin-contrib/cors
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const C=JSON.parse('{"title":"支持跨域","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"下载依赖","slug":"下载依赖","link":"#下载依赖","children":[]},{"level":2,"title":"配置","slug":"配置","link":"#配置","children":[{"level":3,"title":"典型的例子","slug":"典型的例子","link":"#典型的例子","children":[]},{"level":3,"title":"使用DefaultConfig","slug":"使用defaultconfig","link":"#使用defaultconfig","children":[]},{"level":3,"title":"使用Default","slug":"使用default","link":"#使用default","children":[]}]},{"level":2,"title":"原理","slug":"原理","link":"#原理","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gin/支持跨域.md"}'),o={name:"knowledge-deposition/GoLang/Gin/支持跨域.md"},p=l(`

支持跨域

下载依赖

shell
go get -u github.com/gin-contrib/cors
 

配置

  • 下面这几种配置都可以

典型的例子

Go

 package main
 
diff --git "a/assets/knowledge-deposition_GoLang_Gin_\346\224\257\346\214\201\350\267\250\345\237\237.md.a6da96aa.lean.js" "b/assets/knowledge-deposition_GoLang_Gin_\346\224\257\346\214\201\350\267\250\345\237\237.md.69953c2c.lean.js"
similarity index 93%
rename from "assets/knowledge-deposition_GoLang_Gin_\346\224\257\346\214\201\350\267\250\345\237\237.md.a6da96aa.lean.js"
rename to "assets/knowledge-deposition_GoLang_Gin_\346\224\257\346\214\201\350\267\250\345\237\237.md.69953c2c.lean.js"
index c6c949e6..f8457e10 100644
--- "a/assets/knowledge-deposition_GoLang_Gin_\346\224\257\346\214\201\350\267\250\345\237\237.md.a6da96aa.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_Gin_\346\224\257\346\214\201\350\267\250\345\237\237.md.69953c2c.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const C=JSON.parse('{"title":"支持跨域","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"下载依赖","slug":"下载依赖","link":"#下载依赖","children":[]},{"level":2,"title":"配置","slug":"配置","link":"#配置","children":[{"level":3,"title":"典型的例子","slug":"典型的例子","link":"#典型的例子","children":[]},{"level":3,"title":"使用DefaultConfig","slug":"使用defaultconfig","link":"#使用defaultconfig","children":[]},{"level":3,"title":"使用Default","slug":"使用default","link":"#使用default","children":[]}]},{"level":2,"title":"原理","slug":"原理","link":"#原理","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gin/支持跨域.md"}'),o={name:"knowledge-deposition/GoLang/Gin/支持跨域.md"},p=l("",14),e=[p];function t(c,r,D,F,y,i){return a(),n("div",null,e)}const u=s(o,[["render",t]]);export{C as __pageData,u as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const C=JSON.parse('{"title":"支持跨域","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"下载依赖","slug":"下载依赖","link":"#下载依赖","children":[]},{"level":2,"title":"配置","slug":"配置","link":"#配置","children":[{"level":3,"title":"典型的例子","slug":"典型的例子","link":"#典型的例子","children":[]},{"level":3,"title":"使用DefaultConfig","slug":"使用defaultconfig","link":"#使用defaultconfig","children":[]},{"level":3,"title":"使用Default","slug":"使用default","link":"#使用default","children":[]}]},{"level":2,"title":"原理","slug":"原理","link":"#原理","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gin/支持跨域.md"}'),o={name:"knowledge-deposition/GoLang/Gin/支持跨域.md"},p=l("",14),e=[p];function t(c,r,D,F,y,i){return a(),n("div",null,e)}const u=s(o,[["render",t]]);export{C as __pageData,u as default};
diff --git "a/assets/knowledge-deposition_GoLang_Gin_\350\257\267\346\261\202\345\217\202\346\225\260.md.5be26865.js" "b/assets/knowledge-deposition_GoLang_Gin_\350\257\267\346\261\202\345\217\202\346\225\260.md.ce823438.js"
similarity index 99%
rename from "assets/knowledge-deposition_GoLang_Gin_\350\257\267\346\261\202\345\217\202\346\225\260.md.5be26865.js"
rename to "assets/knowledge-deposition_GoLang_Gin_\350\257\267\346\261\202\345\217\202\346\225\260.md.ce823438.js"
index 91019e76..e8e53318 100644
--- "a/assets/knowledge-deposition_GoLang_Gin_\350\257\267\346\261\202\345\217\202\346\225\260.md.5be26865.js"
+++ "b/assets/knowledge-deposition_GoLang_Gin_\350\257\267\346\261\202\345\217\202\346\225\260.md.ce823438.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const o="/static-blog/image/go/form_data.png",u=JSON.parse('{"title":"请求参数","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"GET请求","slug":"get请求","link":"#get请求","children":[{"level":3,"title":"普通参数","slug":"普通参数","link":"#普通参数","children":[]},{"level":3,"title":"数组参数","slug":"数组参数","link":"#数组参数","children":[]},{"level":3,"title":"map参数","slug":"map参数","link":"#map参数","children":[]}]},{"level":2,"title":"POST请求","slug":"post请求","link":"#post请求","children":[{"level":3,"title":"form表单参数","slug":"form表单参数","link":"#form表单参数","children":[]},{"level":3,"title":"json参数","slug":"json参数","link":"#json参数","children":[]}]},{"level":2,"title":"Param参数","slug":"param参数","link":"#param参数","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gin/请求参数.md"}'),p={name:"knowledge-deposition/GoLang/Gin/请求参数.md"},e=l(`

请求参数

GET请求

普通参数

  • ctx.Query:获取参数

  • ctx.DefaultQuery:可设置参数默认值

  • ctx.GetQuery:可验证参数是否传递

Go
func (*gin.Context).Query(key string) (value string)
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const o="/static-blog/image/go/form_data.png",u=JSON.parse('{"title":"请求参数","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"GET请求","slug":"get请求","link":"#get请求","children":[{"level":3,"title":"普通参数","slug":"普通参数","link":"#普通参数","children":[]},{"level":3,"title":"数组参数","slug":"数组参数","link":"#数组参数","children":[]},{"level":3,"title":"map参数","slug":"map参数","link":"#map参数","children":[]}]},{"level":2,"title":"POST请求","slug":"post请求","link":"#post请求","children":[{"level":3,"title":"form表单参数","slug":"form表单参数","link":"#form表单参数","children":[]},{"level":3,"title":"json参数","slug":"json参数","link":"#json参数","children":[]}]},{"level":2,"title":"Param参数","slug":"param参数","link":"#param参数","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gin/请求参数.md"}'),p={name:"knowledge-deposition/GoLang/Gin/请求参数.md"},e=l(`

请求参数

GET请求

普通参数

  • ctx.Query:获取参数

  • ctx.DefaultQuery:可设置参数默认值

  • ctx.GetQuery:可验证参数是否传递

Go
func (*gin.Context).Query(key string) (value string)
 
 func (*gin.Context).DefaultQuery(key string, defaultValue string) string
 
diff --git "a/assets/knowledge-deposition_GoLang_Gin_\350\257\267\346\261\202\345\217\202\346\225\260.md.5be26865.lean.js" "b/assets/knowledge-deposition_GoLang_Gin_\350\257\267\346\261\202\345\217\202\346\225\260.md.ce823438.lean.js"
similarity index 94%
rename from "assets/knowledge-deposition_GoLang_Gin_\350\257\267\346\261\202\345\217\202\346\225\260.md.5be26865.lean.js"
rename to "assets/knowledge-deposition_GoLang_Gin_\350\257\267\346\261\202\345\217\202\346\225\260.md.ce823438.lean.js"
index 35c65458..5d815740 100644
--- "a/assets/knowledge-deposition_GoLang_Gin_\350\257\267\346\261\202\345\217\202\346\225\260.md.5be26865.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_Gin_\350\257\267\346\261\202\345\217\202\346\225\260.md.ce823438.lean.js"
@@ -1 +1 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const o="/static-blog/image/go/form_data.png",u=JSON.parse('{"title":"请求参数","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"GET请求","slug":"get请求","link":"#get请求","children":[{"level":3,"title":"普通参数","slug":"普通参数","link":"#普通参数","children":[]},{"level":3,"title":"数组参数","slug":"数组参数","link":"#数组参数","children":[]},{"level":3,"title":"map参数","slug":"map参数","link":"#map参数","children":[]}]},{"level":2,"title":"POST请求","slug":"post请求","link":"#post请求","children":[{"level":3,"title":"form表单参数","slug":"form表单参数","link":"#form表单参数","children":[]},{"level":3,"title":"json参数","slug":"json参数","link":"#json参数","children":[]}]},{"level":2,"title":"Param参数","slug":"param参数","link":"#param参数","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gin/请求参数.md"}'),p={name:"knowledge-deposition/GoLang/Gin/请求参数.md"},e=l("",50),t=[e];function c(D,r,F,y,C,A){return n(),a("div",null,t)}const d=s(p,[["render",c]]);export{u as __pageData,d as default};
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const o="/static-blog/image/go/form_data.png",u=JSON.parse('{"title":"请求参数","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"GET请求","slug":"get请求","link":"#get请求","children":[{"level":3,"title":"普通参数","slug":"普通参数","link":"#普通参数","children":[]},{"level":3,"title":"数组参数","slug":"数组参数","link":"#数组参数","children":[]},{"level":3,"title":"map参数","slug":"map参数","link":"#map参数","children":[]}]},{"level":2,"title":"POST请求","slug":"post请求","link":"#post请求","children":[{"level":3,"title":"form表单参数","slug":"form表单参数","link":"#form表单参数","children":[]},{"level":3,"title":"json参数","slug":"json参数","link":"#json参数","children":[]}]},{"level":2,"title":"Param参数","slug":"param参数","link":"#param参数","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gin/请求参数.md"}'),p={name:"knowledge-deposition/GoLang/Gin/请求参数.md"},e=l("",50),t=[e];function c(D,r,F,y,C,A){return n(),a("div",null,t)}const d=s(p,[["render",c]]);export{u as __pageData,d as default};
diff --git "a/assets/knowledge-deposition_GoLang_Gin_\350\257\267\346\261\202\345\244\264\345\222\214\345\223\215\345\272\224\345\244\264.md.474f93f6.js" "b/assets/knowledge-deposition_GoLang_Gin_\350\257\267\346\261\202\345\244\264\345\222\214\345\223\215\345\272\224\345\244\264.md.1a6c808d.js"
similarity index 99%
rename from "assets/knowledge-deposition_GoLang_Gin_\350\257\267\346\261\202\345\244\264\345\222\214\345\223\215\345\272\224\345\244\264.md.474f93f6.js"
rename to "assets/knowledge-deposition_GoLang_Gin_\350\257\267\346\261\202\345\244\264\345\222\214\345\223\215\345\272\224\345\244\264.md.1a6c808d.js"
index 8408cd4b..dfac8d73 100644
--- "a/assets/knowledge-deposition_GoLang_Gin_\350\257\267\346\261\202\345\244\264\345\222\214\345\223\215\345\272\224\345\244\264.md.474f93f6.js"
+++ "b/assets/knowledge-deposition_GoLang_Gin_\350\257\267\346\261\202\345\244\264\345\222\214\345\223\215\345\272\224\345\244\264.md.1a6c808d.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as a,o as n,e as o}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"请求头和响应头","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"请求头","slug":"请求头","link":"#请求头","children":[]},{"level":2,"title":"响应头","slug":"响应头","link":"#响应头","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gin/请求头和响应头.md"}'),l={name:"knowledge-deposition/GoLang/Gin/请求头和响应头.md"},p=o(`

请求头和响应头

请求头

  • 获取请求头,使用ctx.GetHeader("xx")或者ctx.Request.Header.Get("xxx")
Go
func getHeaderHandler(ctx *gin.Context) {
+import{_ as s,c as a,o as n,e as o}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"请求头和响应头","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"请求头","slug":"请求头","link":"#请求头","children":[]},{"level":2,"title":"响应头","slug":"响应头","link":"#响应头","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gin/请求头和响应头.md"}'),l={name:"knowledge-deposition/GoLang/Gin/请求头和响应头.md"},p=o(`

请求头和响应头

请求头

  • 获取请求头,使用ctx.GetHeader("xx")或者ctx.Request.Header.Get("xxx")
Go
func getHeaderHandler(ctx *gin.Context) {
 	// 首字母大小写不区分  单词与单词之间用 - 连接
 	fmt.Printf("ctx.GetHeader(\\"user-agent\\"): %v\\n", ctx.GetHeader("user-agent"))
 	fmt.Printf("ctx.GetHeader(\\"admin-token\\"): %v\\n", ctx.GetHeader("admin-token"))
diff --git "a/assets/knowledge-deposition_GoLang_Gin_\350\257\267\346\261\202\345\244\264\345\222\214\345\223\215\345\272\224\345\244\264.md.474f93f6.lean.js" "b/assets/knowledge-deposition_GoLang_Gin_\350\257\267\346\261\202\345\244\264\345\222\214\345\223\215\345\272\224\345\244\264.md.1a6c808d.lean.js"
similarity index 89%
rename from "assets/knowledge-deposition_GoLang_Gin_\350\257\267\346\261\202\345\244\264\345\222\214\345\223\215\345\272\224\345\244\264.md.474f93f6.lean.js"
rename to "assets/knowledge-deposition_GoLang_Gin_\350\257\267\346\261\202\345\244\264\345\222\214\345\223\215\345\272\224\345\244\264.md.1a6c808d.lean.js"
index 41a90d33..5f18d1d9 100644
--- "a/assets/knowledge-deposition_GoLang_Gin_\350\257\267\346\261\202\345\244\264\345\222\214\345\223\215\345\272\224\345\244\264.md.474f93f6.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_Gin_\350\257\267\346\261\202\345\244\264\345\222\214\345\223\215\345\272\224\345\244\264.md.1a6c808d.lean.js"
@@ -1 +1 @@
-import{_ as s,c as a,o as n,e as o}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"请求头和响应头","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"请求头","slug":"请求头","link":"#请求头","children":[]},{"level":2,"title":"响应头","slug":"响应头","link":"#响应头","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gin/请求头和响应头.md"}'),l={name:"knowledge-deposition/GoLang/Gin/请求头和响应头.md"},p=o("",6),e=[p];function t(r,c,D,F,y,A){return n(),a("div",null,e)}const d=s(l,[["render",t]]);export{i as __pageData,d as default};
+import{_ as s,c as a,o as n,e as o}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"请求头和响应头","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"请求头","slug":"请求头","link":"#请求头","children":[]},{"level":2,"title":"响应头","slug":"响应头","link":"#响应头","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gin/请求头和响应头.md"}'),l={name:"knowledge-deposition/GoLang/Gin/请求头和响应头.md"},p=o("",6),e=[p];function t(r,c,D,F,y,A){return n(),a("div",null,e)}const d=s(l,[["render",t]]);export{i as __pageData,d as default};
diff --git "a/assets/knowledge-deposition_GoLang_Gin_\350\267\257\347\224\261\345\210\206\347\273\204.md.0731e2d5.js" "b/assets/knowledge-deposition_GoLang_Gin_\350\267\257\347\224\261\345\210\206\347\273\204.md.22bde1bb.js"
similarity index 99%
rename from "assets/knowledge-deposition_GoLang_Gin_\350\267\257\347\224\261\345\210\206\347\273\204.md.0731e2d5.js"
rename to "assets/knowledge-deposition_GoLang_Gin_\350\267\257\347\224\261\345\210\206\347\273\204.md.22bde1bb.js"
index 5bbd7ce0..8e727f95 100644
--- "a/assets/knowledge-deposition_GoLang_Gin_\350\267\257\347\224\261\345\210\206\347\273\204.md.0731e2d5.js"
+++ "b/assets/knowledge-deposition_GoLang_Gin_\350\267\257\347\224\261\345\210\206\347\273\204.md.22bde1bb.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as o}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"路由分组","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"knowledge-deposition/GoLang/Gin/路由分组.md"}'),l={name:"knowledge-deposition/GoLang/Gin/路由分组.md"},p=o(`

路由分组

可以针对不同的功能模块对路由分组

  • 使用router.Group(name)定义一个群组
Go
package main
+import{_ as s,c as n,o as a,e as o}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"路由分组","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"knowledge-deposition/GoLang/Gin/路由分组.md"}'),l={name:"knowledge-deposition/GoLang/Gin/路由分组.md"},p=o(`

路由分组

可以针对不同的功能模块对路由分组

  • 使用router.Group(name)定义一个群组
Go
package main
 
 import "github.com/gin-gonic/gin"
 
diff --git "a/assets/knowledge-deposition_GoLang_Gin_\350\267\257\347\224\261\345\210\206\347\273\204.md.0731e2d5.lean.js" "b/assets/knowledge-deposition_GoLang_Gin_\350\267\257\347\224\261\345\210\206\347\273\204.md.22bde1bb.lean.js"
similarity index 84%
rename from "assets/knowledge-deposition_GoLang_Gin_\350\267\257\347\224\261\345\210\206\347\273\204.md.0731e2d5.lean.js"
rename to "assets/knowledge-deposition_GoLang_Gin_\350\267\257\347\224\261\345\210\206\347\273\204.md.22bde1bb.lean.js"
index 902f95f1..1ee0ae72 100644
--- "a/assets/knowledge-deposition_GoLang_Gin_\350\267\257\347\224\261\345\210\206\347\273\204.md.0731e2d5.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_Gin_\350\267\257\347\224\261\345\210\206\347\273\204.md.22bde1bb.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as o}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"路由分组","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"knowledge-deposition/GoLang/Gin/路由分组.md"}'),l={name:"knowledge-deposition/GoLang/Gin/路由分组.md"},p=o("",8),t=[p];function e(D,c,F,r,y,C){return a(),n("div",null,t)}const u=s(l,[["render",e]]);export{i as __pageData,u as default};
+import{_ as s,c as n,o as a,e as o}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"路由分组","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"knowledge-deposition/GoLang/Gin/路由分组.md"}'),l={name:"knowledge-deposition/GoLang/Gin/路由分组.md"},p=o("",8),t=[p];function e(D,c,F,r,y,C){return a(),n("div",null,t)}const u=s(l,[["render",e]]);export{i as __pageData,u as default};
diff --git "a/assets/knowledge-deposition_GoLang_Gin_\351\233\206\346\210\220Swagger.md.5336a9c6.js" "b/assets/knowledge-deposition_GoLang_Gin_\351\233\206\346\210\220Swagger.md.286e03b5.js"
similarity index 99%
rename from "assets/knowledge-deposition_GoLang_Gin_\351\233\206\346\210\220Swagger.md.5336a9c6.js"
rename to "assets/knowledge-deposition_GoLang_Gin_\351\233\206\346\210\220Swagger.md.286e03b5.js"
index bda6efa1..3786ba34 100644
--- "a/assets/knowledge-deposition_GoLang_Gin_\351\233\206\346\210\220Swagger.md.5336a9c6.js"
+++ "b/assets/knowledge-deposition_GoLang_Gin_\351\233\206\346\210\220Swagger.md.286e03b5.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const C=JSON.parse('{"title":"集成Swagger","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"依赖安装和初始化","slug":"依赖安装和初始化","link":"#依赖安装和初始化","children":[{"level":3,"title":"安装Swagger","slug":"安装swagger","link":"#安装swagger","children":[]},{"level":3,"title":"安装gin-swagger扩展","slug":"安装gin-swagger扩展","link":"#安装gin-swagger扩展","children":[]},{"level":3,"title":"在Go项目的根目录初始化Swagger","slug":"在go项目的根目录初始化swagger","link":"#在go项目的根目录初始化swagger","children":[]}]},{"level":2,"title":"gin-swagger注解","slug":"gin-swagger注解","link":"#gin-swagger注解","children":[{"level":3,"title":"全局注解","slug":"全局注解","link":"#全局注解","children":[]},{"level":3,"title":"API层面注解","slug":"api层面注解","link":"#api层面注解","children":[]}]},{"level":2,"title":"代码示例","slug":"代码示例","link":"#代码示例","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gin/集成Swagger.md"}'),o={name:"knowledge-deposition/GoLang/Gin/集成Swagger.md"},e=l(`

集成Swagger

通过在代码中添加符合swagger规范的注解,可以自动生成文档

依赖安装和初始化

安装Swagger

shell
go get github.com/swaggo/swag/cmd/swag
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const C=JSON.parse('{"title":"集成Swagger","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"依赖安装和初始化","slug":"依赖安装和初始化","link":"#依赖安装和初始化","children":[{"level":3,"title":"安装Swagger","slug":"安装swagger","link":"#安装swagger","children":[]},{"level":3,"title":"安装gin-swagger扩展","slug":"安装gin-swagger扩展","link":"#安装gin-swagger扩展","children":[]},{"level":3,"title":"在Go项目的根目录初始化Swagger","slug":"在go项目的根目录初始化swagger","link":"#在go项目的根目录初始化swagger","children":[]}]},{"level":2,"title":"gin-swagger注解","slug":"gin-swagger注解","link":"#gin-swagger注解","children":[{"level":3,"title":"全局注解","slug":"全局注解","link":"#全局注解","children":[]},{"level":3,"title":"API层面注解","slug":"api层面注解","link":"#api层面注解","children":[]}]},{"level":2,"title":"代码示例","slug":"代码示例","link":"#代码示例","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gin/集成Swagger.md"}'),o={name:"knowledge-deposition/GoLang/Gin/集成Swagger.md"},e=l(`

集成Swagger

通过在代码中添加符合swagger规范的注解,可以自动生成文档

依赖安装和初始化

安装Swagger

shell
go get github.com/swaggo/swag/cmd/swag
 # 生成可执行文件
 go install github.com/swaggo/swag/cmd/swag@latest
 

查看swagger版本

shell
swag -v
diff --git "a/assets/knowledge-deposition_GoLang_Gin_\351\233\206\346\210\220Swagger.md.5336a9c6.lean.js" "b/assets/knowledge-deposition_GoLang_Gin_\351\233\206\346\210\220Swagger.md.286e03b5.lean.js"
similarity index 95%
rename from "assets/knowledge-deposition_GoLang_Gin_\351\233\206\346\210\220Swagger.md.5336a9c6.lean.js"
rename to "assets/knowledge-deposition_GoLang_Gin_\351\233\206\346\210\220Swagger.md.286e03b5.lean.js"
index 5cbd225c..32123f3c 100644
--- "a/assets/knowledge-deposition_GoLang_Gin_\351\233\206\346\210\220Swagger.md.5336a9c6.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_Gin_\351\233\206\346\210\220Swagger.md.286e03b5.lean.js"
@@ -1 +1 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const C=JSON.parse('{"title":"集成Swagger","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"依赖安装和初始化","slug":"依赖安装和初始化","link":"#依赖安装和初始化","children":[{"level":3,"title":"安装Swagger","slug":"安装swagger","link":"#安装swagger","children":[]},{"level":3,"title":"安装gin-swagger扩展","slug":"安装gin-swagger扩展","link":"#安装gin-swagger扩展","children":[]},{"level":3,"title":"在Go项目的根目录初始化Swagger","slug":"在go项目的根目录初始化swagger","link":"#在go项目的根目录初始化swagger","children":[]}]},{"level":2,"title":"gin-swagger注解","slug":"gin-swagger注解","link":"#gin-swagger注解","children":[{"level":3,"title":"全局注解","slug":"全局注解","link":"#全局注解","children":[]},{"level":3,"title":"API层面注解","slug":"api层面注解","link":"#api层面注解","children":[]}]},{"level":2,"title":"代码示例","slug":"代码示例","link":"#代码示例","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gin/集成Swagger.md"}'),o={name:"knowledge-deposition/GoLang/Gin/集成Swagger.md"},e=l("",57),p=[e];function t(c,r,i,D,y,F){return n(),a("div",null,p)}const A=s(o,[["render",t]]);export{C as __pageData,A as default};
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const C=JSON.parse('{"title":"集成Swagger","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"依赖安装和初始化","slug":"依赖安装和初始化","link":"#依赖安装和初始化","children":[{"level":3,"title":"安装Swagger","slug":"安装swagger","link":"#安装swagger","children":[]},{"level":3,"title":"安装gin-swagger扩展","slug":"安装gin-swagger扩展","link":"#安装gin-swagger扩展","children":[]},{"level":3,"title":"在Go项目的根目录初始化Swagger","slug":"在go项目的根目录初始化swagger","link":"#在go项目的根目录初始化swagger","children":[]}]},{"level":2,"title":"gin-swagger注解","slug":"gin-swagger注解","link":"#gin-swagger注解","children":[{"level":3,"title":"全局注解","slug":"全局注解","link":"#全局注解","children":[]},{"level":3,"title":"API层面注解","slug":"api层面注解","link":"#api层面注解","children":[]}]},{"level":2,"title":"代码示例","slug":"代码示例","link":"#代码示例","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gin/集成Swagger.md"}'),o={name:"knowledge-deposition/GoLang/Gin/集成Swagger.md"},e=l("",57),p=[e];function t(c,r,i,D,y,F){return n(),a("div",null,p)}const A=s(o,[["render",t]]);export{C as __pageData,A as default};
diff --git a/assets/knowledge-deposition_GoLang_Gorm_AdvancedQuery.md.c7051263.js b/assets/knowledge-deposition_GoLang_Gorm_AdvancedQuery.md.25247741.js
similarity index 99%
rename from assets/knowledge-deposition_GoLang_Gorm_AdvancedQuery.md.c7051263.js
rename to assets/knowledge-deposition_GoLang_Gorm_AdvancedQuery.md.25247741.js
index 02cff954..5d266a20 100644
--- a/assets/knowledge-deposition_GoLang_Gorm_AdvancedQuery.md.c7051263.js
+++ b/assets/knowledge-deposition_GoLang_Gorm_AdvancedQuery.md.25247741.js
@@ -1,4 +1,4 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const C=JSON.parse('{"title":"Advanced Query","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"智能选择字段","slug":"智能选择字段","link":"#智能选择字段","children":[]},{"level":2,"title":"子查询","slug":"子查询","link":"#子查询","children":[{"level":3,"title":"FROM子查询","slug":"from子查询","link":"#from子查询","children":[]}]},{"level":2,"title":"命名参数","slug":"命名参数","link":"#命名参数","children":[]},{"level":2,"title":"Find到Map中","slug":"find到map中","link":"#find到map中","children":[]},{"level":2,"title":"Scopes","slug":"scopes","link":"#scopes","children":[]},{"level":2,"title":"Count","slug":"count","link":"#count","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gorm/AdvancedQuery.md"}'),o={name:"knowledge-deposition/GoLang/Gorm/AdvancedQuery.md"},p=l(`

Advanced Query

智能选择字段

  • 选择字段可以使用Select,但是如果有多个Select操作,可以定义一个结构体,查询的时候会自动检索结构体中的字段
Go
type SmartFields struct {
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const C=JSON.parse('{"title":"Advanced Query","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"智能选择字段","slug":"智能选择字段","link":"#智能选择字段","children":[]},{"level":2,"title":"子查询","slug":"子查询","link":"#子查询","children":[{"level":3,"title":"FROM子查询","slug":"from子查询","link":"#from子查询","children":[]}]},{"level":2,"title":"命名参数","slug":"命名参数","link":"#命名参数","children":[]},{"level":2,"title":"Find到Map中","slug":"find到map中","link":"#find到map中","children":[]},{"level":2,"title":"Scopes","slug":"scopes","link":"#scopes","children":[]},{"level":2,"title":"Count","slug":"count","link":"#count","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gorm/AdvancedQuery.md"}'),o={name:"knowledge-deposition/GoLang/Gorm/AdvancedQuery.md"},p=l(`

Advanced Query

智能选择字段

  • 选择字段可以使用Select,但是如果有多个Select操作,可以定义一个结构体,查询的时候会自动检索结构体中的字段
Go
type SmartFields struct {
 	Name   string
 	Age    int
 	Gender int
diff --git a/assets/knowledge-deposition_GoLang_Gorm_AdvancedQuery.md.c7051263.lean.js b/assets/knowledge-deposition_GoLang_Gorm_AdvancedQuery.md.25247741.lean.js
similarity index 93%
rename from assets/knowledge-deposition_GoLang_Gorm_AdvancedQuery.md.c7051263.lean.js
rename to assets/knowledge-deposition_GoLang_Gorm_AdvancedQuery.md.25247741.lean.js
index 86d8fddf..95c01441 100644
--- a/assets/knowledge-deposition_GoLang_Gorm_AdvancedQuery.md.c7051263.lean.js
+++ b/assets/knowledge-deposition_GoLang_Gorm_AdvancedQuery.md.25247741.lean.js
@@ -1 +1 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const C=JSON.parse('{"title":"Advanced Query","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"智能选择字段","slug":"智能选择字段","link":"#智能选择字段","children":[]},{"level":2,"title":"子查询","slug":"子查询","link":"#子查询","children":[{"level":3,"title":"FROM子查询","slug":"from子查询","link":"#from子查询","children":[]}]},{"level":2,"title":"命名参数","slug":"命名参数","link":"#命名参数","children":[]},{"level":2,"title":"Find到Map中","slug":"find到map中","link":"#find到map中","children":[]},{"level":2,"title":"Scopes","slug":"scopes","link":"#scopes","children":[]},{"level":2,"title":"Count","slug":"count","link":"#count","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gorm/AdvancedQuery.md"}'),o={name:"knowledge-deposition/GoLang/Gorm/AdvancedQuery.md"},p=l("",23),e=[p];function t(c,r,D,F,y,i){return n(),a("div",null,e)}const d=s(o,[["render",t]]);export{C as __pageData,d as default};
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const C=JSON.parse('{"title":"Advanced Query","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"智能选择字段","slug":"智能选择字段","link":"#智能选择字段","children":[]},{"level":2,"title":"子查询","slug":"子查询","link":"#子查询","children":[{"level":3,"title":"FROM子查询","slug":"from子查询","link":"#from子查询","children":[]}]},{"level":2,"title":"命名参数","slug":"命名参数","link":"#命名参数","children":[]},{"level":2,"title":"Find到Map中","slug":"find到map中","link":"#find到map中","children":[]},{"level":2,"title":"Scopes","slug":"scopes","link":"#scopes","children":[]},{"level":2,"title":"Count","slug":"count","link":"#count","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gorm/AdvancedQuery.md"}'),o={name:"knowledge-deposition/GoLang/Gorm/AdvancedQuery.md"},p=l("",23),e=[p];function t(c,r,D,F,y,i){return n(),a("div",null,e)}const d=s(o,[["render",t]]);export{C as __pageData,d as default};
diff --git a/assets/knowledge-deposition_GoLang_Gorm_Create.md.1e32e024.js b/assets/knowledge-deposition_GoLang_Gorm_Create.md.32150fe7.js
similarity index 99%
rename from assets/knowledge-deposition_GoLang_Gorm_Create.md.1e32e024.js
rename to assets/knowledge-deposition_GoLang_Gorm_Create.md.32150fe7.js
index 1a301b2f..f4cc3a2b 100644
--- a/assets/knowledge-deposition_GoLang_Gorm_Create.md.1e32e024.js
+++ b/assets/knowledge-deposition_GoLang_Gorm_Create.md.32150fe7.js
@@ -1,4 +1,4 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"Create","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"创建记录","slug":"创建记录","link":"#创建记录","children":[{"level":3,"title":"创建单条","slug":"创建单条","link":"#创建单条","children":[]},{"level":3,"title":"创建多条","slug":"创建多条","link":"#创建多条","children":[]}]},{"level":2,"title":"使用选择的字段创建","slug":"使用选择的字段创建","link":"#使用选择的字段创建","children":[{"level":3,"title":"DB.Select","slug":"db-select","link":"#db-select","children":[]},{"level":3,"title":"DB.Omit","slug":"db-omit","link":"#db-omit","children":[]}]},{"level":2,"title":"通过map创建记录","slug":"通过map创建记录","link":"#通过map创建记录","children":[{"level":3,"title":"单个map","slug":"单个map","link":"#单个map","children":[]},{"level":3,"title":"批量插入map","slug":"批量插入map","link":"#批量插入map","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/Gorm/Create.md"}'),p={name:"knowledge-deposition/GoLang/Gorm/Create.md"},o=l(`

Create

  • 下面的操作都以该Teacher结构体为基础
Go
type Teacher struct {
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"Create","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"创建记录","slug":"创建记录","link":"#创建记录","children":[{"level":3,"title":"创建单条","slug":"创建单条","link":"#创建单条","children":[]},{"level":3,"title":"创建多条","slug":"创建多条","link":"#创建多条","children":[]}]},{"level":2,"title":"使用选择的字段创建","slug":"使用选择的字段创建","link":"#使用选择的字段创建","children":[{"level":3,"title":"DB.Select","slug":"db-select","link":"#db-select","children":[]},{"level":3,"title":"DB.Omit","slug":"db-omit","link":"#db-omit","children":[]}]},{"level":2,"title":"通过map创建记录","slug":"通过map创建记录","link":"#通过map创建记录","children":[{"level":3,"title":"单个map","slug":"单个map","link":"#单个map","children":[]},{"level":3,"title":"批量插入map","slug":"批量插入map","link":"#批量插入map","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/Gorm/Create.md"}'),p={name:"knowledge-deposition/GoLang/Gorm/Create.md"},o=l(`

Create

  • 下面的操作都以该Teacher结构体为基础
Go
type Teacher struct {
 	gorm.Model
 	Name    string \`gorm:"type:varchar(32)"\`
 	Age     uint8
diff --git a/assets/knowledge-deposition_GoLang_Gorm_Create.md.1e32e024.lean.js b/assets/knowledge-deposition_GoLang_Gorm_Create.md.32150fe7.lean.js
similarity index 95%
rename from assets/knowledge-deposition_GoLang_Gorm_Create.md.1e32e024.lean.js
rename to assets/knowledge-deposition_GoLang_Gorm_Create.md.32150fe7.lean.js
index 3d09f1f2..bba7b087 100644
--- a/assets/knowledge-deposition_GoLang_Gorm_Create.md.1e32e024.lean.js
+++ b/assets/knowledge-deposition_GoLang_Gorm_Create.md.32150fe7.lean.js
@@ -1 +1 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"Create","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"创建记录","slug":"创建记录","link":"#创建记录","children":[{"level":3,"title":"创建单条","slug":"创建单条","link":"#创建单条","children":[]},{"level":3,"title":"创建多条","slug":"创建多条","link":"#创建多条","children":[]}]},{"level":2,"title":"使用选择的字段创建","slug":"使用选择的字段创建","link":"#使用选择的字段创建","children":[{"level":3,"title":"DB.Select","slug":"db-select","link":"#db-select","children":[]},{"level":3,"title":"DB.Omit","slug":"db-omit","link":"#db-omit","children":[]}]},{"level":2,"title":"通过map创建记录","slug":"通过map创建记录","link":"#通过map创建记录","children":[{"level":3,"title":"单个map","slug":"单个map","link":"#单个map","children":[]},{"level":3,"title":"批量插入map","slug":"批量插入map","link":"#批量插入map","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/Gorm/Create.md"}'),p={name:"knowledge-deposition/GoLang/Gorm/Create.md"},o=l("",30),e=[o];function t(c,D,r,F,y,C){return n(),a("div",null,e)}const d=s(p,[["render",t]]);export{i as __pageData,d as default};
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"Create","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"创建记录","slug":"创建记录","link":"#创建记录","children":[{"level":3,"title":"创建单条","slug":"创建单条","link":"#创建单条","children":[]},{"level":3,"title":"创建多条","slug":"创建多条","link":"#创建多条","children":[]}]},{"level":2,"title":"使用选择的字段创建","slug":"使用选择的字段创建","link":"#使用选择的字段创建","children":[{"level":3,"title":"DB.Select","slug":"db-select","link":"#db-select","children":[]},{"level":3,"title":"DB.Omit","slug":"db-omit","link":"#db-omit","children":[]}]},{"level":2,"title":"通过map创建记录","slug":"通过map创建记录","link":"#通过map创建记录","children":[{"level":3,"title":"单个map","slug":"单个map","link":"#单个map","children":[]},{"level":3,"title":"批量插入map","slug":"批量插入map","link":"#批量插入map","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/Gorm/Create.md"}'),p={name:"knowledge-deposition/GoLang/Gorm/Create.md"},o=l("",30),e=[o];function t(c,D,r,F,y,C){return n(),a("div",null,e)}const d=s(p,[["render",t]]);export{i as __pageData,d as default};
diff --git a/assets/knowledge-deposition_GoLang_Gorm_Delete.md.3870ed2f.js b/assets/knowledge-deposition_GoLang_Gorm_Delete.md.70f875f7.js
similarity index 99%
rename from assets/knowledge-deposition_GoLang_Gorm_Delete.md.3870ed2f.js
rename to assets/knowledge-deposition_GoLang_Gorm_Delete.md.70f875f7.js
index d54d5a29..8956ac3a 100644
--- a/assets/knowledge-deposition_GoLang_Gorm_Delete.md.3870ed2f.js
+++ b/assets/knowledge-deposition_GoLang_Gorm_Delete.md.70f875f7.js
@@ -1 +1 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const d=JSON.parse('{"title":"Delete","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"删除单条","slug":"删除单条","link":"#删除单条","children":[]},{"level":2,"title":"根据主键删除","slug":"根据主键删除","link":"#根据主键删除","children":[]},{"level":2,"title":"批量删除","slug":"批量删除","link":"#批量删除","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gorm/Delete.md"}'),e={name:"knowledge-deposition/GoLang/Gorm/Delete.md"},o=l('

Delete

删除单条

  • 删除一条记录时,删除对象需要指定主键,否则会触发批量删除
Go
singleD := Teacher{ID: 2}\nDB.Delete(&singleD)\n// DELETE FROM `teachers` WHERE `teachers`.`id` = 2\n\nsingleD := Teacher{ID: 2}\nDB.Where("age >= ?", 80).Delete(singleD)\n// DELETE FROM `teachers` WHERE age >= 80 AND `teachers`.`id` = 2\n

根据主键删除

  • GORM允许通过内联条件指定主键来检索对象,但只支持整型数值,因为string可能导致SQL注入
Go
DB.Delete(&Teacher{}, "10")\n// DELETE FROM `teachers` WHERE `teachers`.`id` = '10'\n\nDB.Delete(&Teacher{}, []int{20, 22, 26, 28})\n// DELETE FROM `teachers` WHERE `teachers`.`id` IN (20,22,26,28)\n

批量删除

  • 如果指定的条件不包括主键,那么会执行批量删除,将会删除所有匹配的记录
Go
DB.Where("name LIKE ?", "元%").Delete(&Teacher{})\n// DELETE FROM `teachers` WHERE name LIKE '元%'\n\nDB.Delete(&Teacher{}, "name LIKE ?", "元%")\n// DELETE FROM `teachers` WHERE name LIKE '元%'\n
',10),p=[o];function t(c,r,D,F,y,i){return n(),a("div",null,p)}const A=s(e,[["render",t]]);export{d as __pageData,A as default}; +import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const d=JSON.parse('{"title":"Delete","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"删除单条","slug":"删除单条","link":"#删除单条","children":[]},{"level":2,"title":"根据主键删除","slug":"根据主键删除","link":"#根据主键删除","children":[]},{"level":2,"title":"批量删除","slug":"批量删除","link":"#批量删除","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gorm/Delete.md"}'),e={name:"knowledge-deposition/GoLang/Gorm/Delete.md"},o=l('

Delete

删除单条

  • 删除一条记录时,删除对象需要指定主键,否则会触发批量删除
Go
singleD := Teacher{ID: 2}\nDB.Delete(&singleD)\n// DELETE FROM `teachers` WHERE `teachers`.`id` = 2\n\nsingleD := Teacher{ID: 2}\nDB.Where("age >= ?", 80).Delete(singleD)\n// DELETE FROM `teachers` WHERE age >= 80 AND `teachers`.`id` = 2\n

根据主键删除

  • GORM允许通过内联条件指定主键来检索对象,但只支持整型数值,因为string可能导致SQL注入
Go
DB.Delete(&Teacher{}, "10")\n// DELETE FROM `teachers` WHERE `teachers`.`id` = '10'\n\nDB.Delete(&Teacher{}, []int{20, 22, 26, 28})\n// DELETE FROM `teachers` WHERE `teachers`.`id` IN (20,22,26,28)\n

批量删除

  • 如果指定的条件不包括主键,那么会执行批量删除,将会删除所有匹配的记录
Go
DB.Where("name LIKE ?", "元%").Delete(&Teacher{})\n// DELETE FROM `teachers` WHERE name LIKE '元%'\n\nDB.Delete(&Teacher{}, "name LIKE ?", "元%")\n// DELETE FROM `teachers` WHERE name LIKE '元%'\n
',10),p=[o];function t(c,r,D,F,y,i){return n(),a("div",null,p)}const A=s(e,[["render",t]]);export{d as __pageData,A as default}; diff --git a/assets/knowledge-deposition_GoLang_Gorm_Delete.md.3870ed2f.lean.js b/assets/knowledge-deposition_GoLang_Gorm_Delete.md.70f875f7.lean.js similarity index 90% rename from assets/knowledge-deposition_GoLang_Gorm_Delete.md.3870ed2f.lean.js rename to assets/knowledge-deposition_GoLang_Gorm_Delete.md.70f875f7.lean.js index 53169b6f..82fdc6a4 100644 --- a/assets/knowledge-deposition_GoLang_Gorm_Delete.md.3870ed2f.lean.js +++ b/assets/knowledge-deposition_GoLang_Gorm_Delete.md.70f875f7.lean.js @@ -1 +1 @@ -import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const d=JSON.parse('{"title":"Delete","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"删除单条","slug":"删除单条","link":"#删除单条","children":[]},{"level":2,"title":"根据主键删除","slug":"根据主键删除","link":"#根据主键删除","children":[]},{"level":2,"title":"批量删除","slug":"批量删除","link":"#批量删除","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gorm/Delete.md"}'),e={name:"knowledge-deposition/GoLang/Gorm/Delete.md"},o=l("",10),p=[o];function t(c,r,D,F,y,i){return n(),a("div",null,p)}const A=s(e,[["render",t]]);export{d as __pageData,A as default}; +import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const d=JSON.parse('{"title":"Delete","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"删除单条","slug":"删除单条","link":"#删除单条","children":[]},{"level":2,"title":"根据主键删除","slug":"根据主键删除","link":"#根据主键删除","children":[]},{"level":2,"title":"批量删除","slug":"批量删除","link":"#批量删除","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gorm/Delete.md"}'),e={name:"knowledge-deposition/GoLang/Gorm/Delete.md"},o=l("",10),p=[o];function t(c,r,D,F,y,i){return n(),a("div",null,p)}const A=s(e,[["render",t]]);export{d as __pageData,A as default}; diff --git a/assets/knowledge-deposition_GoLang_Gorm_Query.md.d817b096.js b/assets/knowledge-deposition_GoLang_Gorm_Query.md.e7919829.js similarity index 99% rename from assets/knowledge-deposition_GoLang_Gorm_Query.md.d817b096.js rename to assets/knowledge-deposition_GoLang_Gorm_Query.md.e7919829.js index bfa0dbb7..01b7ee4b 100644 --- a/assets/knowledge-deposition_GoLang_Gorm_Query.md.d817b096.js +++ b/assets/knowledge-deposition_GoLang_Gorm_Query.md.e7919829.js @@ -1,4 +1,4 @@ -import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const A=JSON.parse('{"title":"Query","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"检索单个","slug":"检索单个","link":"#检索单个","children":[{"level":3,"title":"First","slug":"first","link":"#first","children":[]},{"level":3,"title":"Last","slug":"last","link":"#last","children":[]},{"level":3,"title":"Take","slug":"take","link":"#take","children":[]},{"level":3,"title":"使用Take根据主键id查询","slug":"使用take根据主键id查询","link":"#使用take根据主键id查询","children":[]},{"level":3,"title":"使用Find根据主键id查询","slug":"使用find根据主键id查询","link":"#使用find根据主键id查询","children":[]}]},{"level":2,"title":"查询全部","slug":"查询全部","link":"#查询全部","children":[{"level":3,"title":"Find","slug":"find","link":"#find","children":[]}]},{"level":2,"title":"条件查询","slug":"条件查询","link":"#条件查询","children":[{"level":3,"title":"Where","slug":"where","link":"#where","children":[]},{"level":3,"title":"根据Struct、Map、Slice查询","slug":"根据struct、map、slice查询","link":"#根据struct、map、slice查询","children":[]}]},{"level":2,"title":"内联条件查询","slug":"内联条件查询","link":"#内联条件查询","children":[{"level":3,"title":"根据主键id查询","slug":"根据主键id查询","link":"#根据主键id查询","children":[]},{"level":3,"title":"使用普通查询条件","slug":"使用普通查询条件","link":"#使用普通查询条件","children":[]},{"level":3,"title":"使用结构体、Slice、Map","slug":"使用结构体、slice、map","link":"#使用结构体、slice、map","children":[]}]},{"level":2,"title":"Not条件","slug":"not条件","link":"#not条件","children":[]},{"level":2,"title":"Or条件","slug":"or条件","link":"#or条件","children":[]},{"level":2,"title":"Select查询选择的字段","slug":"select查询选择的字段","link":"#select查询选择的字段","children":[]},{"level":2,"title":"Order 排序","slug":"order-排序","link":"#order-排序","children":[]},{"level":2,"title":"Limit、Offset","slug":"limit、offset","link":"#limit、offset","children":[]},{"level":2,"title":"Scan","slug":"scan","link":"#scan","children":[]},{"level":2,"title":"Group分组","slug":"group分组","link":"#group分组","children":[]},{"level":2,"title":"Raw使用原生SQL","slug":"raw使用原生sql","link":"#raw使用原生sql","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gorm/Query.md"}'),o={name:"knowledge-deposition/GoLang/Gorm/Query.md"},p=l(`

Query

  • 下面的操作都以该Teacher结构体为基础
Go
type Teacher struct {
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const A=JSON.parse('{"title":"Query","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"检索单个","slug":"检索单个","link":"#检索单个","children":[{"level":3,"title":"First","slug":"first","link":"#first","children":[]},{"level":3,"title":"Last","slug":"last","link":"#last","children":[]},{"level":3,"title":"Take","slug":"take","link":"#take","children":[]},{"level":3,"title":"使用Take根据主键id查询","slug":"使用take根据主键id查询","link":"#使用take根据主键id查询","children":[]},{"level":3,"title":"使用Find根据主键id查询","slug":"使用find根据主键id查询","link":"#使用find根据主键id查询","children":[]}]},{"level":2,"title":"查询全部","slug":"查询全部","link":"#查询全部","children":[{"level":3,"title":"Find","slug":"find","link":"#find","children":[]}]},{"level":2,"title":"条件查询","slug":"条件查询","link":"#条件查询","children":[{"level":3,"title":"Where","slug":"where","link":"#where","children":[]},{"level":3,"title":"根据Struct、Map、Slice查询","slug":"根据struct、map、slice查询","link":"#根据struct、map、slice查询","children":[]}]},{"level":2,"title":"内联条件查询","slug":"内联条件查询","link":"#内联条件查询","children":[{"level":3,"title":"根据主键id查询","slug":"根据主键id查询","link":"#根据主键id查询","children":[]},{"level":3,"title":"使用普通查询条件","slug":"使用普通查询条件","link":"#使用普通查询条件","children":[]},{"level":3,"title":"使用结构体、Slice、Map","slug":"使用结构体、slice、map","link":"#使用结构体、slice、map","children":[]}]},{"level":2,"title":"Not条件","slug":"not条件","link":"#not条件","children":[]},{"level":2,"title":"Or条件","slug":"or条件","link":"#or条件","children":[]},{"level":2,"title":"Select查询选择的字段","slug":"select查询选择的字段","link":"#select查询选择的字段","children":[]},{"level":2,"title":"Order 排序","slug":"order-排序","link":"#order-排序","children":[]},{"level":2,"title":"Limit、Offset","slug":"limit、offset","link":"#limit、offset","children":[]},{"level":2,"title":"Scan","slug":"scan","link":"#scan","children":[]},{"level":2,"title":"Group分组","slug":"group分组","link":"#group分组","children":[]},{"level":2,"title":"Raw使用原生SQL","slug":"raw使用原生sql","link":"#raw使用原生sql","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gorm/Query.md"}'),o={name:"knowledge-deposition/GoLang/Gorm/Query.md"},p=l(`

Query

  • 下面的操作都以该Teacher结构体为基础
Go
type Teacher struct {
 	gorm.Model
 	Name    string \`gorm:"type:varchar(32)"\`
 	Age     uint8
diff --git a/assets/knowledge-deposition_GoLang_Gorm_Query.md.d817b096.lean.js b/assets/knowledge-deposition_GoLang_Gorm_Query.md.e7919829.lean.js
similarity index 97%
rename from assets/knowledge-deposition_GoLang_Gorm_Query.md.d817b096.lean.js
rename to assets/knowledge-deposition_GoLang_Gorm_Query.md.e7919829.lean.js
index a5d25f14..3065f1b6 100644
--- a/assets/knowledge-deposition_GoLang_Gorm_Query.md.d817b096.lean.js
+++ b/assets/knowledge-deposition_GoLang_Gorm_Query.md.e7919829.lean.js
@@ -1 +1 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const A=JSON.parse('{"title":"Query","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"检索单个","slug":"检索单个","link":"#检索单个","children":[{"level":3,"title":"First","slug":"first","link":"#first","children":[]},{"level":3,"title":"Last","slug":"last","link":"#last","children":[]},{"level":3,"title":"Take","slug":"take","link":"#take","children":[]},{"level":3,"title":"使用Take根据主键id查询","slug":"使用take根据主键id查询","link":"#使用take根据主键id查询","children":[]},{"level":3,"title":"使用Find根据主键id查询","slug":"使用find根据主键id查询","link":"#使用find根据主键id查询","children":[]}]},{"level":2,"title":"查询全部","slug":"查询全部","link":"#查询全部","children":[{"level":3,"title":"Find","slug":"find","link":"#find","children":[]}]},{"level":2,"title":"条件查询","slug":"条件查询","link":"#条件查询","children":[{"level":3,"title":"Where","slug":"where","link":"#where","children":[]},{"level":3,"title":"根据Struct、Map、Slice查询","slug":"根据struct、map、slice查询","link":"#根据struct、map、slice查询","children":[]}]},{"level":2,"title":"内联条件查询","slug":"内联条件查询","link":"#内联条件查询","children":[{"level":3,"title":"根据主键id查询","slug":"根据主键id查询","link":"#根据主键id查询","children":[]},{"level":3,"title":"使用普通查询条件","slug":"使用普通查询条件","link":"#使用普通查询条件","children":[]},{"level":3,"title":"使用结构体、Slice、Map","slug":"使用结构体、slice、map","link":"#使用结构体、slice、map","children":[]}]},{"level":2,"title":"Not条件","slug":"not条件","link":"#not条件","children":[]},{"level":2,"title":"Or条件","slug":"or条件","link":"#or条件","children":[]},{"level":2,"title":"Select查询选择的字段","slug":"select查询选择的字段","link":"#select查询选择的字段","children":[]},{"level":2,"title":"Order 排序","slug":"order-排序","link":"#order-排序","children":[]},{"level":2,"title":"Limit、Offset","slug":"limit、offset","link":"#limit、offset","children":[]},{"level":2,"title":"Scan","slug":"scan","link":"#scan","children":[]},{"level":2,"title":"Group分组","slug":"group分组","link":"#group分组","children":[]},{"level":2,"title":"Raw使用原生SQL","slug":"raw使用原生sql","link":"#raw使用原生sql","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gorm/Query.md"}'),o={name:"knowledge-deposition/GoLang/Gorm/Query.md"},p=l("",70),e=[p];function t(c,r,D,F,y,i){return n(),a("div",null,e)}const d=s(o,[["render",t]]);export{A as __pageData,d as default};
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const A=JSON.parse('{"title":"Query","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"检索单个","slug":"检索单个","link":"#检索单个","children":[{"level":3,"title":"First","slug":"first","link":"#first","children":[]},{"level":3,"title":"Last","slug":"last","link":"#last","children":[]},{"level":3,"title":"Take","slug":"take","link":"#take","children":[]},{"level":3,"title":"使用Take根据主键id查询","slug":"使用take根据主键id查询","link":"#使用take根据主键id查询","children":[]},{"level":3,"title":"使用Find根据主键id查询","slug":"使用find根据主键id查询","link":"#使用find根据主键id查询","children":[]}]},{"level":2,"title":"查询全部","slug":"查询全部","link":"#查询全部","children":[{"level":3,"title":"Find","slug":"find","link":"#find","children":[]}]},{"level":2,"title":"条件查询","slug":"条件查询","link":"#条件查询","children":[{"level":3,"title":"Where","slug":"where","link":"#where","children":[]},{"level":3,"title":"根据Struct、Map、Slice查询","slug":"根据struct、map、slice查询","link":"#根据struct、map、slice查询","children":[]}]},{"level":2,"title":"内联条件查询","slug":"内联条件查询","link":"#内联条件查询","children":[{"level":3,"title":"根据主键id查询","slug":"根据主键id查询","link":"#根据主键id查询","children":[]},{"level":3,"title":"使用普通查询条件","slug":"使用普通查询条件","link":"#使用普通查询条件","children":[]},{"level":3,"title":"使用结构体、Slice、Map","slug":"使用结构体、slice、map","link":"#使用结构体、slice、map","children":[]}]},{"level":2,"title":"Not条件","slug":"not条件","link":"#not条件","children":[]},{"level":2,"title":"Or条件","slug":"or条件","link":"#or条件","children":[]},{"level":2,"title":"Select查询选择的字段","slug":"select查询选择的字段","link":"#select查询选择的字段","children":[]},{"level":2,"title":"Order 排序","slug":"order-排序","link":"#order-排序","children":[]},{"level":2,"title":"Limit、Offset","slug":"limit、offset","link":"#limit、offset","children":[]},{"level":2,"title":"Scan","slug":"scan","link":"#scan","children":[]},{"level":2,"title":"Group分组","slug":"group分组","link":"#group分组","children":[]},{"level":2,"title":"Raw使用原生SQL","slug":"raw使用原生sql","link":"#raw使用原生sql","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gorm/Query.md"}'),o={name:"knowledge-deposition/GoLang/Gorm/Query.md"},p=l("",70),e=[p];function t(c,r,D,F,y,i){return n(),a("div",null,e)}const d=s(o,[["render",t]]);export{A as __pageData,d as default};
diff --git a/assets/knowledge-deposition_GoLang_Gorm_Update.md.52550cdf.js b/assets/knowledge-deposition_GoLang_Gorm_Update.md.9fe613fe.js
similarity index 99%
rename from assets/knowledge-deposition_GoLang_Gorm_Update.md.52550cdf.js
rename to assets/knowledge-deposition_GoLang_Gorm_Update.md.9fe613fe.js
index 34ac5b7b..7103e59c 100644
--- a/assets/knowledge-deposition_GoLang_Gorm_Update.md.52550cdf.js
+++ b/assets/knowledge-deposition_GoLang_Gorm_Update.md.9fe613fe.js
@@ -1 +1 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"Update","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"保存所有字段","slug":"保存所有字段","link":"#保存所有字段","children":[]},{"level":2,"title":"更新单列","slug":"更新单列","link":"#更新单列","children":[]},{"level":2,"title":"更新多列","slug":"更新多列","link":"#更新多列","children":[]},{"level":2,"title":"更新指定字段","slug":"更新指定字段","link":"#更新指定字段","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gorm/Update.md"}'),o={name:"knowledge-deposition/GoLang/Gorm/Update.md"},p=l('

Update

保存所有字段

  • Save会保存所有字段,包括零值

  • Save是一个组合函数,如果保存的数据不包含主键,它将执行Create,否则将执行Update(包含所有字段)

Go
var first Teacher\nDB.First(&first)\nfirst.Name = "First Save"\nfirst.Age = 88\nDB.Save(&first)\n// UPDATE `teachers` SET `name`='First Save',`age`=88,`gender`=1 WHERE `id` = 1\n\nvar s Teacher\ns.Age = 98\nDB.Save(&s)\n// INSERT INTO `teachers` (`name`,`age`,`gender`) VALUES ('',98,0)\n\nDB.Save(&Teacher{ID: 11, Name: "魔灵", Age: 20, Gender: 1})\n// UPDATE `teachers` SET `name`='魔灵',`age`=20,`gender`=1 WHERE `id` = 11\n

更新单列

  • 使用Update更新单列时,需要指定条件,否则的话会返回ErrMissingWhereClause错误

  • 当使用了Model方法,且该对象主键有值,该值会被用于构建条件

Go
DB.Model(&Teacher{}).Where("age = ? AND gender = ?", "98", "0").Update("name", "动灵")\n// UPDATE `teachers` SET `name`='动灵' WHERE age = '98' AND gender = '0'\n\nvar u Teacher\nDB.Take(&u)\nDB.Model(&u).Update("name", "剑灵")\n// SELECT * FROM `teachers` LIMIT 1\n// UPDATE `teachers` SET `name`='剑灵' WHERE `id` = 1\n

更新多列

  • Updates方法支持structmap[string]interface{}参数

  • 当使用struct更新时,默认情况下,GORM只会更新非零值的字段

Go
s := Teacher{ID: 2}\nDB.Model(&s).Updates(Teacher{Age: 19})\n// UPDATE `teachers` SET `age`=19 WHERE `id` = 2\n\ns := Teacher{ID: 2}\nDB.Model(&s).Updates(Teacher{Age: 19, Name: "吴文登"})\n// UPDATE `teachers` SET `name`='吴文登',`age`=19 WHERE `id` = 2\n

更新指定字段

Go
// 使用Select指定更新的字段\ns := Teacher{ID: 2}\nDB.Model(&s).Select("age", "gender").Updates(Teacher{Age: 19, Name: "吴文登", Gender: 1})\n// UPDATE `teachers` SET `age`=19,`gender`=1 WHERE `id` = 2\n
',12),e=[p];function t(c,r,D,F,y,A){return n(),a("div",null,e)}const d=s(o,[["render",t]]);export{i as __pageData,d as default}; +import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"Update","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"保存所有字段","slug":"保存所有字段","link":"#保存所有字段","children":[]},{"level":2,"title":"更新单列","slug":"更新单列","link":"#更新单列","children":[]},{"level":2,"title":"更新多列","slug":"更新多列","link":"#更新多列","children":[]},{"level":2,"title":"更新指定字段","slug":"更新指定字段","link":"#更新指定字段","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gorm/Update.md"}'),o={name:"knowledge-deposition/GoLang/Gorm/Update.md"},p=l('

Update

保存所有字段

  • Save会保存所有字段,包括零值

  • Save是一个组合函数,如果保存的数据不包含主键,它将执行Create,否则将执行Update(包含所有字段)

Go
var first Teacher\nDB.First(&first)\nfirst.Name = "First Save"\nfirst.Age = 88\nDB.Save(&first)\n// UPDATE `teachers` SET `name`='First Save',`age`=88,`gender`=1 WHERE `id` = 1\n\nvar s Teacher\ns.Age = 98\nDB.Save(&s)\n// INSERT INTO `teachers` (`name`,`age`,`gender`) VALUES ('',98,0)\n\nDB.Save(&Teacher{ID: 11, Name: "魔灵", Age: 20, Gender: 1})\n// UPDATE `teachers` SET `name`='魔灵',`age`=20,`gender`=1 WHERE `id` = 11\n

更新单列

  • 使用Update更新单列时,需要指定条件,否则的话会返回ErrMissingWhereClause错误

  • 当使用了Model方法,且该对象主键有值,该值会被用于构建条件

Go
DB.Model(&Teacher{}).Where("age = ? AND gender = ?", "98", "0").Update("name", "动灵")\n// UPDATE `teachers` SET `name`='动灵' WHERE age = '98' AND gender = '0'\n\nvar u Teacher\nDB.Take(&u)\nDB.Model(&u).Update("name", "剑灵")\n// SELECT * FROM `teachers` LIMIT 1\n// UPDATE `teachers` SET `name`='剑灵' WHERE `id` = 1\n

更新多列

  • Updates方法支持structmap[string]interface{}参数

  • 当使用struct更新时,默认情况下,GORM只会更新非零值的字段

Go
s := Teacher{ID: 2}\nDB.Model(&s).Updates(Teacher{Age: 19})\n// UPDATE `teachers` SET `age`=19 WHERE `id` = 2\n\ns := Teacher{ID: 2}\nDB.Model(&s).Updates(Teacher{Age: 19, Name: "吴文登"})\n// UPDATE `teachers` SET `name`='吴文登',`age`=19 WHERE `id` = 2\n

更新指定字段

Go
// 使用Select指定更新的字段\ns := Teacher{ID: 2}\nDB.Model(&s).Select("age", "gender").Updates(Teacher{Age: 19, Name: "吴文登", Gender: 1})\n// UPDATE `teachers` SET `age`=19,`gender`=1 WHERE `id` = 2\n
',12),e=[p];function t(c,r,D,F,y,A){return n(),a("div",null,e)}const d=s(o,[["render",t]]);export{i as __pageData,d as default}; diff --git a/assets/knowledge-deposition_GoLang_Gorm_Update.md.52550cdf.lean.js b/assets/knowledge-deposition_GoLang_Gorm_Update.md.9fe613fe.lean.js similarity index 92% rename from assets/knowledge-deposition_GoLang_Gorm_Update.md.52550cdf.lean.js rename to assets/knowledge-deposition_GoLang_Gorm_Update.md.9fe613fe.lean.js index 9898320b..c769408e 100644 --- a/assets/knowledge-deposition_GoLang_Gorm_Update.md.52550cdf.lean.js +++ b/assets/knowledge-deposition_GoLang_Gorm_Update.md.9fe613fe.lean.js @@ -1 +1 @@ -import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"Update","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"保存所有字段","slug":"保存所有字段","link":"#保存所有字段","children":[]},{"level":2,"title":"更新单列","slug":"更新单列","link":"#更新单列","children":[]},{"level":2,"title":"更新多列","slug":"更新多列","link":"#更新多列","children":[]},{"level":2,"title":"更新指定字段","slug":"更新指定字段","link":"#更新指定字段","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gorm/Update.md"}'),o={name:"knowledge-deposition/GoLang/Gorm/Update.md"},p=l("",12),e=[p];function t(c,r,D,F,y,A){return n(),a("div",null,e)}const d=s(o,[["render",t]]);export{i as __pageData,d as default}; +import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"Update","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"保存所有字段","slug":"保存所有字段","link":"#保存所有字段","children":[]},{"level":2,"title":"更新单列","slug":"更新单列","link":"#更新单列","children":[]},{"level":2,"title":"更新多列","slug":"更新多列","link":"#更新多列","children":[]},{"level":2,"title":"更新指定字段","slug":"更新指定字段","link":"#更新指定字段","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gorm/Update.md"}'),o={name:"knowledge-deposition/GoLang/Gorm/Update.md"},p=l("",12),e=[p];function t(c,r,D,F,y,A){return n(),a("div",null,e)}const d=s(o,[["render",t]]);export{i as __pageData,d as default}; diff --git "a/assets/knowledge-deposition_GoLang_Gorm_\344\272\213\345\212\241.md.9933dce2.js" "b/assets/knowledge-deposition_GoLang_Gorm_\344\272\213\345\212\241.md.8a6eb6be.js" similarity index 99% rename from "assets/knowledge-deposition_GoLang_Gorm_\344\272\213\345\212\241.md.9933dce2.js" rename to "assets/knowledge-deposition_GoLang_Gorm_\344\272\213\345\212\241.md.8a6eb6be.js" index 1057ea51..973bb649 100644 --- "a/assets/knowledge-deposition_GoLang_Gorm_\344\272\213\345\212\241.md.9933dce2.js" +++ "b/assets/knowledge-deposition_GoLang_Gorm_\344\272\213\345\212\241.md.8a6eb6be.js" @@ -1,4 +1,4 @@ -import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"事务","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"普通事务","slug":"普通事务","link":"#普通事务","children":[]},{"level":2,"title":"嵌套事务","slug":"嵌套事务","link":"#嵌套事务","children":[]},{"level":2,"title":"手动事务","slug":"手动事务","link":"#手动事务","children":[{"level":3,"title":"Commit","slug":"commit","link":"#commit","children":[]},{"level":3,"title":"Rollback","slug":"rollback","link":"#rollback","children":[]},{"level":3,"title":"记录回滚点","slug":"记录回滚点","link":"#记录回滚点","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/Gorm/事务.md"}'),o={name:"knowledge-deposition/GoLang/Gorm/事务.md"},p=l(`

事务

数据准备,会自动创建t_dogs

Go
type TDog struct {
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"事务","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"普通事务","slug":"普通事务","link":"#普通事务","children":[]},{"level":2,"title":"嵌套事务","slug":"嵌套事务","link":"#嵌套事务","children":[]},{"level":2,"title":"手动事务","slug":"手动事务","link":"#手动事务","children":[{"level":3,"title":"Commit","slug":"commit","link":"#commit","children":[]},{"level":3,"title":"Rollback","slug":"rollback","link":"#rollback","children":[]},{"level":3,"title":"记录回滚点","slug":"记录回滚点","link":"#记录回滚点","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/Gorm/事务.md"}'),o={name:"knowledge-deposition/GoLang/Gorm/事务.md"},p=l(`

事务

数据准备,会自动创建t_dogs

Go
type TDog struct {
 	Name string
 }
 
diff --git "a/assets/knowledge-deposition_GoLang_Gorm_\344\272\213\345\212\241.md.9933dce2.lean.js" "b/assets/knowledge-deposition_GoLang_Gorm_\344\272\213\345\212\241.md.8a6eb6be.lean.js"
similarity index 93%
rename from "assets/knowledge-deposition_GoLang_Gorm_\344\272\213\345\212\241.md.9933dce2.lean.js"
rename to "assets/knowledge-deposition_GoLang_Gorm_\344\272\213\345\212\241.md.8a6eb6be.lean.js"
index 1d1486da..9bf4f989 100644
--- "a/assets/knowledge-deposition_GoLang_Gorm_\344\272\213\345\212\241.md.9933dce2.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_Gorm_\344\272\213\345\212\241.md.8a6eb6be.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"事务","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"普通事务","slug":"普通事务","link":"#普通事务","children":[]},{"level":2,"title":"嵌套事务","slug":"嵌套事务","link":"#嵌套事务","children":[]},{"level":2,"title":"手动事务","slug":"手动事务","link":"#手动事务","children":[{"level":3,"title":"Commit","slug":"commit","link":"#commit","children":[]},{"level":3,"title":"Rollback","slug":"rollback","link":"#rollback","children":[]},{"level":3,"title":"记录回滚点","slug":"记录回滚点","link":"#记录回滚点","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/Gorm/事务.md"}'),o={name:"knowledge-deposition/GoLang/Gorm/事务.md"},p=l("",43),e=[p];function t(c,D,r,F,y,A){return a(),n("div",null,e)}const d=s(o,[["render",t]]);export{i as __pageData,d as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"事务","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"普通事务","slug":"普通事务","link":"#普通事务","children":[]},{"level":2,"title":"嵌套事务","slug":"嵌套事务","link":"#嵌套事务","children":[]},{"level":2,"title":"手动事务","slug":"手动事务","link":"#手动事务","children":[{"level":3,"title":"Commit","slug":"commit","link":"#commit","children":[]},{"level":3,"title":"Rollback","slug":"rollback","link":"#rollback","children":[]},{"level":3,"title":"记录回滚点","slug":"记录回滚点","link":"#记录回滚点","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/Gorm/事务.md"}'),o={name:"knowledge-deposition/GoLang/Gorm/事务.md"},p=l("",43),e=[p];function t(c,D,r,F,y,A){return a(),n("div",null,e)}const d=s(o,[["render",t]]);export{i as __pageData,d as default};
diff --git "a/assets/knowledge-deposition_GoLang_Gorm_\345\205\263\350\201\224\344\271\213\344\270\200\345\257\271\344\270\200.md.617e50e7.js" "b/assets/knowledge-deposition_GoLang_Gorm_\345\205\263\350\201\224\344\271\213\344\270\200\345\257\271\344\270\200.md.d30fe49d.js"
similarity index 99%
rename from "assets/knowledge-deposition_GoLang_Gorm_\345\205\263\350\201\224\344\271\213\344\270\200\345\257\271\344\270\200.md.617e50e7.js"
rename to "assets/knowledge-deposition_GoLang_Gorm_\345\205\263\350\201\224\344\271\213\344\270\200\345\257\271\344\270\200.md.d30fe49d.js"
index 216b7a23..3b08510a 100644
--- "a/assets/knowledge-deposition_GoLang_Gorm_\345\205\263\350\201\224\344\271\213\344\270\200\345\257\271\344\270\200.md.617e50e7.js"
+++ "b/assets/knowledge-deposition_GoLang_Gorm_\345\205\263\350\201\224\344\271\213\344\270\200\345\257\271\344\270\200.md.d30fe49d.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"关联之一对一","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"Belongs To","slug":"belongs-to","link":"#belongs-to","children":[{"level":3,"title":"创建关联","slug":"创建关联","link":"#创建关联","children":[]},{"level":3,"title":"Append替换关联","slug":"append替换关联","link":"#append替换关联","children":[]},{"level":3,"title":"Replace替换关联","slug":"replace替换关联","link":"#replace替换关联","children":[]},{"level":3,"title":"Delete删除关联","slug":"delete删除关联","link":"#delete删除关联","children":[]},{"level":3,"title":"Clear清除所有关联","slug":"clear清除所有关联","link":"#clear清除所有关联","children":[]},{"level":3,"title":"查询关联数据","slug":"查询关联数据","link":"#查询关联数据","children":[]}]},{"level":2,"title":"Has One","slug":"has-one","link":"#has-one","children":[{"level":3,"title":"创建数据","slug":"创建数据","link":"#创建数据","children":[]},{"level":3,"title":"Append替换数据","slug":"append替换数据","link":"#append替换数据","children":[]},{"level":3,"title":"Replace替换数据","slug":"replace替换数据","link":"#replace替换数据","children":[]},{"level":3,"title":"Delete、Clear","slug":"delete、clear","link":"#delete、clear","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/Gorm/关联之一对一.md"}'),p={name:"knowledge-deposition/GoLang/Gorm/关联之一对一.md"},o=l(`

关联之一对一

一对一的场景下,有两种模式,一种是Belongs To(属于),一种是Has One(拥有一个)

Belongs To

belongs to可以理解为A身上打了B标签A知道B的所有信息,但是BA一无所知,可以理解为单相思自作多情,一方会在自己这边记住对方,而对方却毫不知情

Go
type Dog struct {
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"关联之一对一","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"Belongs To","slug":"belongs-to","link":"#belongs-to","children":[{"level":3,"title":"创建关联","slug":"创建关联","link":"#创建关联","children":[]},{"level":3,"title":"Append替换关联","slug":"append替换关联","link":"#append替换关联","children":[]},{"level":3,"title":"Replace替换关联","slug":"replace替换关联","link":"#replace替换关联","children":[]},{"level":3,"title":"Delete删除关联","slug":"delete删除关联","link":"#delete删除关联","children":[]},{"level":3,"title":"Clear清除所有关联","slug":"clear清除所有关联","link":"#clear清除所有关联","children":[]},{"level":3,"title":"查询关联数据","slug":"查询关联数据","link":"#查询关联数据","children":[]}]},{"level":2,"title":"Has One","slug":"has-one","link":"#has-one","children":[{"level":3,"title":"创建数据","slug":"创建数据","link":"#创建数据","children":[]},{"level":3,"title":"Append替换数据","slug":"append替换数据","link":"#append替换数据","children":[]},{"level":3,"title":"Replace替换数据","slug":"replace替换数据","link":"#replace替换数据","children":[]},{"level":3,"title":"Delete、Clear","slug":"delete、clear","link":"#delete、clear","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/Gorm/关联之一对一.md"}'),p={name:"knowledge-deposition/GoLang/Gorm/关联之一对一.md"},o=l(`

关联之一对一

一对一的场景下,有两种模式,一种是Belongs To(属于),一种是Has One(拥有一个)

Belongs To

belongs to可以理解为A身上打了B标签A知道B的所有信息,但是BA一无所知,可以理解为单相思自作多情,一方会在自己这边记住对方,而对方却毫不知情

Go
type Dog struct {
 	ID        uint
 	Name      string
 	GirlGod   GirlGod
diff --git "a/assets/knowledge-deposition_GoLang_Gorm_\345\205\263\350\201\224\344\271\213\344\270\200\345\257\271\344\270\200.md.617e50e7.lean.js" "b/assets/knowledge-deposition_GoLang_Gorm_\345\205\263\350\201\224\344\271\213\344\270\200\345\257\271\344\270\200.md.d30fe49d.lean.js"
similarity index 96%
rename from "assets/knowledge-deposition_GoLang_Gorm_\345\205\263\350\201\224\344\271\213\344\270\200\345\257\271\344\270\200.md.617e50e7.lean.js"
rename to "assets/knowledge-deposition_GoLang_Gorm_\345\205\263\350\201\224\344\271\213\344\270\200\345\257\271\344\270\200.md.d30fe49d.lean.js"
index c230749b..817465b3 100644
--- "a/assets/knowledge-deposition_GoLang_Gorm_\345\205\263\350\201\224\344\271\213\344\270\200\345\257\271\344\270\200.md.617e50e7.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_Gorm_\345\205\263\350\201\224\344\271\213\344\270\200\345\257\271\344\270\200.md.d30fe49d.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"关联之一对一","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"Belongs To","slug":"belongs-to","link":"#belongs-to","children":[{"level":3,"title":"创建关联","slug":"创建关联","link":"#创建关联","children":[]},{"level":3,"title":"Append替换关联","slug":"append替换关联","link":"#append替换关联","children":[]},{"level":3,"title":"Replace替换关联","slug":"replace替换关联","link":"#replace替换关联","children":[]},{"level":3,"title":"Delete删除关联","slug":"delete删除关联","link":"#delete删除关联","children":[]},{"level":3,"title":"Clear清除所有关联","slug":"clear清除所有关联","link":"#clear清除所有关联","children":[]},{"level":3,"title":"查询关联数据","slug":"查询关联数据","link":"#查询关联数据","children":[]}]},{"level":2,"title":"Has One","slug":"has-one","link":"#has-one","children":[{"level":3,"title":"创建数据","slug":"创建数据","link":"#创建数据","children":[]},{"level":3,"title":"Append替换数据","slug":"append替换数据","link":"#append替换数据","children":[]},{"level":3,"title":"Replace替换数据","slug":"replace替换数据","link":"#replace替换数据","children":[]},{"level":3,"title":"Delete、Clear","slug":"delete、clear","link":"#delete、clear","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/Gorm/关联之一对一.md"}'),p={name:"knowledge-deposition/GoLang/Gorm/关联之一对一.md"},o=l("",73),e=[o];function t(c,D,r,F,y,C){return a(),n("div",null,e)}const d=s(p,[["render",t]]);export{i as __pageData,d as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"关联之一对一","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"Belongs To","slug":"belongs-to","link":"#belongs-to","children":[{"level":3,"title":"创建关联","slug":"创建关联","link":"#创建关联","children":[]},{"level":3,"title":"Append替换关联","slug":"append替换关联","link":"#append替换关联","children":[]},{"level":3,"title":"Replace替换关联","slug":"replace替换关联","link":"#replace替换关联","children":[]},{"level":3,"title":"Delete删除关联","slug":"delete删除关联","link":"#delete删除关联","children":[]},{"level":3,"title":"Clear清除所有关联","slug":"clear清除所有关联","link":"#clear清除所有关联","children":[]},{"level":3,"title":"查询关联数据","slug":"查询关联数据","link":"#查询关联数据","children":[]}]},{"level":2,"title":"Has One","slug":"has-one","link":"#has-one","children":[{"level":3,"title":"创建数据","slug":"创建数据","link":"#创建数据","children":[]},{"level":3,"title":"Append替换数据","slug":"append替换数据","link":"#append替换数据","children":[]},{"level":3,"title":"Replace替换数据","slug":"replace替换数据","link":"#replace替换数据","children":[]},{"level":3,"title":"Delete、Clear","slug":"delete、clear","link":"#delete、clear","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/Gorm/关联之一对一.md"}'),p={name:"knowledge-deposition/GoLang/Gorm/关联之一对一.md"},o=l("",73),e=[o];function t(c,D,r,F,y,C){return a(),n("div",null,e)}const d=s(p,[["render",t]]);export{i as __pageData,d as default};
diff --git "a/assets/knowledge-deposition_GoLang_Gorm_\345\205\263\350\201\224\344\271\213\344\270\200\345\257\271\345\244\232.md.bfab2338.js" "b/assets/knowledge-deposition_GoLang_Gorm_\345\205\263\350\201\224\344\271\213\344\270\200\345\257\271\345\244\232.md.4d4b119c.js"
similarity index 99%
rename from "assets/knowledge-deposition_GoLang_Gorm_\345\205\263\350\201\224\344\271\213\344\270\200\345\257\271\345\244\232.md.bfab2338.js"
rename to "assets/knowledge-deposition_GoLang_Gorm_\345\205\263\350\201\224\344\271\213\344\270\200\345\257\271\345\244\232.md.4d4b119c.js"
index dff3e97f..a4635687 100644
--- "a/assets/knowledge-deposition_GoLang_Gorm_\345\205\263\350\201\224\344\271\213\344\270\200\345\257\271\345\244\232.md.bfab2338.js"
+++ "b/assets/knowledge-deposition_GoLang_Gorm_\345\205\263\350\201\224\344\271\213\344\270\200\345\257\271\345\244\232.md.4d4b119c.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"关联之一对多","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"操作数据","slug":"操作数据","link":"#操作数据","children":[{"level":3,"title":"Append","slug":"append","link":"#append","children":[]},{"level":3,"title":"Replace","slug":"replace","link":"#replace","children":[]},{"level":3,"title":"Delete","slug":"delete","link":"#delete","children":[]},{"level":3,"title":"Clear","slug":"clear","link":"#clear","children":[]}]},{"level":2,"title":"查询数据","slug":"查询数据","link":"#查询数据","children":[{"level":3,"title":"使用自定义预加载SQL方式查询","slug":"使用自定义预加载sql方式查询","link":"#使用自定义预加载sql方式查询","children":[]},{"level":3,"title":"使用预加载条件查询方式","slug":"使用预加载条件查询方式","link":"#使用预加载条件查询方式","children":[]},{"level":3,"title":"链式预加载方式查询","slug":"链式预加载方式查询","link":"#链式预加载方式查询","children":[]},{"level":3,"title":"Joins查询","slug":"joins查询","link":"#joins查询","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/Gorm/关联之一对多.md"}'),p={name:"knowledge-deposition/GoLang/Gorm/关联之一对多.md"},o=l(`

关联之一对多

一个女神可以有多个狗哥,一个狗哥只属于一个女神

结构体如下:

Go
type HMDog struct {
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"关联之一对多","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"操作数据","slug":"操作数据","link":"#操作数据","children":[{"level":3,"title":"Append","slug":"append","link":"#append","children":[]},{"level":3,"title":"Replace","slug":"replace","link":"#replace","children":[]},{"level":3,"title":"Delete","slug":"delete","link":"#delete","children":[]},{"level":3,"title":"Clear","slug":"clear","link":"#clear","children":[]}]},{"level":2,"title":"查询数据","slug":"查询数据","link":"#查询数据","children":[{"level":3,"title":"使用自定义预加载SQL方式查询","slug":"使用自定义预加载sql方式查询","link":"#使用自定义预加载sql方式查询","children":[]},{"level":3,"title":"使用预加载条件查询方式","slug":"使用预加载条件查询方式","link":"#使用预加载条件查询方式","children":[]},{"level":3,"title":"链式预加载方式查询","slug":"链式预加载方式查询","link":"#链式预加载方式查询","children":[]},{"level":3,"title":"Joins查询","slug":"joins查询","link":"#joins查询","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/Gorm/关联之一对多.md"}'),p={name:"knowledge-deposition/GoLang/Gorm/关联之一对多.md"},o=l(`

关联之一对多

一个女神可以有多个狗哥,一个狗哥只属于一个女神

结构体如下:

Go
type HMDog struct {
 	ID          uint
 	Name        string
 	HMGirlGodID uint // 外键,就是HMGirlGod.ID
diff --git "a/assets/knowledge-deposition_GoLang_Gorm_\345\205\263\350\201\224\344\271\213\344\270\200\345\257\271\345\244\232.md.bfab2338.lean.js" "b/assets/knowledge-deposition_GoLang_Gorm_\345\205\263\350\201\224\344\271\213\344\270\200\345\257\271\345\244\232.md.4d4b119c.lean.js"
similarity index 95%
rename from "assets/knowledge-deposition_GoLang_Gorm_\345\205\263\350\201\224\344\271\213\344\270\200\345\257\271\345\244\232.md.bfab2338.lean.js"
rename to "assets/knowledge-deposition_GoLang_Gorm_\345\205\263\350\201\224\344\271\213\344\270\200\345\257\271\345\244\232.md.4d4b119c.lean.js"
index 354412a5..7f0cb7c3 100644
--- "a/assets/knowledge-deposition_GoLang_Gorm_\345\205\263\350\201\224\344\271\213\344\270\200\345\257\271\345\244\232.md.bfab2338.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_Gorm_\345\205\263\350\201\224\344\271\213\344\270\200\345\257\271\345\244\232.md.4d4b119c.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"关联之一对多","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"操作数据","slug":"操作数据","link":"#操作数据","children":[{"level":3,"title":"Append","slug":"append","link":"#append","children":[]},{"level":3,"title":"Replace","slug":"replace","link":"#replace","children":[]},{"level":3,"title":"Delete","slug":"delete","link":"#delete","children":[]},{"level":3,"title":"Clear","slug":"clear","link":"#clear","children":[]}]},{"level":2,"title":"查询数据","slug":"查询数据","link":"#查询数据","children":[{"level":3,"title":"使用自定义预加载SQL方式查询","slug":"使用自定义预加载sql方式查询","link":"#使用自定义预加载sql方式查询","children":[]},{"level":3,"title":"使用预加载条件查询方式","slug":"使用预加载条件查询方式","link":"#使用预加载条件查询方式","children":[]},{"level":3,"title":"链式预加载方式查询","slug":"链式预加载方式查询","link":"#链式预加载方式查询","children":[]},{"level":3,"title":"Joins查询","slug":"joins查询","link":"#joins查询","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/Gorm/关联之一对多.md"}'),p={name:"knowledge-deposition/GoLang/Gorm/关联之一对多.md"},o=l("",75),e=[o];function t(c,D,r,F,y,C){return a(),n("div",null,e)}const d=s(p,[["render",t]]);export{i as __pageData,d as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"关联之一对多","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"操作数据","slug":"操作数据","link":"#操作数据","children":[{"level":3,"title":"Append","slug":"append","link":"#append","children":[]},{"level":3,"title":"Replace","slug":"replace","link":"#replace","children":[]},{"level":3,"title":"Delete","slug":"delete","link":"#delete","children":[]},{"level":3,"title":"Clear","slug":"clear","link":"#clear","children":[]}]},{"level":2,"title":"查询数据","slug":"查询数据","link":"#查询数据","children":[{"level":3,"title":"使用自定义预加载SQL方式查询","slug":"使用自定义预加载sql方式查询","link":"#使用自定义预加载sql方式查询","children":[]},{"level":3,"title":"使用预加载条件查询方式","slug":"使用预加载条件查询方式","link":"#使用预加载条件查询方式","children":[]},{"level":3,"title":"链式预加载方式查询","slug":"链式预加载方式查询","link":"#链式预加载方式查询","children":[]},{"level":3,"title":"Joins查询","slug":"joins查询","link":"#joins查询","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/Gorm/关联之一对多.md"}'),p={name:"knowledge-deposition/GoLang/Gorm/关联之一对多.md"},o=l("",75),e=[o];function t(c,D,r,F,y,C){return a(),n("div",null,e)}const d=s(p,[["render",t]]);export{i as __pageData,d as default};
diff --git "a/assets/knowledge-deposition_GoLang_Gorm_\345\205\263\350\201\224\344\271\213\345\244\232\345\257\271\345\244\232.md.34fdda09.js" "b/assets/knowledge-deposition_GoLang_Gorm_\345\205\263\350\201\224\344\271\213\345\244\232\345\257\271\345\244\232.md.9a5cad71.js"
similarity index 99%
rename from "assets/knowledge-deposition_GoLang_Gorm_\345\205\263\350\201\224\344\271\213\345\244\232\345\257\271\345\244\232.md.34fdda09.js"
rename to "assets/knowledge-deposition_GoLang_Gorm_\345\205\263\350\201\224\344\271\213\345\244\232\345\257\271\345\244\232.md.9a5cad71.js"
index bc37cfe9..c81d6336 100644
--- "a/assets/knowledge-deposition_GoLang_Gorm_\345\205\263\350\201\224\344\271\213\345\244\232\345\257\271\345\244\232.md.34fdda09.js"
+++ "b/assets/knowledge-deposition_GoLang_Gorm_\345\205\263\350\201\224\344\271\213\345\244\232\345\257\271\345\244\232.md.9a5cad71.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"关联之多对多","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"自动迁移","slug":"自动迁移","link":"#自动迁移","children":[]},{"level":2,"title":"准备数据","slug":"准备数据","link":"#准备数据","children":[]},{"level":2,"title":"增删改","slug":"增删改","link":"#增删改","children":[]},{"level":2,"title":"查询","slug":"查询","link":"#查询","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gorm/关联之多对多.md"}'),o={name:"knowledge-deposition/GoLang/Gorm/关联之多对多.md"},p=l(`

关联之多对多

一个女神可以有多个狗哥,一个狗哥也可以有多个女神

Go
type M2MWallet struct {
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"关联之多对多","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"自动迁移","slug":"自动迁移","link":"#自动迁移","children":[]},{"level":2,"title":"准备数据","slug":"准备数据","link":"#准备数据","children":[]},{"level":2,"title":"增删改","slug":"增删改","link":"#增删改","children":[]},{"level":2,"title":"查询","slug":"查询","link":"#查询","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gorm/关联之多对多.md"}'),o={name:"knowledge-deposition/GoLang/Gorm/关联之多对多.md"},p=l(`

关联之多对多

一个女神可以有多个狗哥,一个狗哥也可以有多个女神

Go
type M2MWallet struct {
 	ID       uint
 	Amount   float64
 	M2MDogID uint // 外键,就是M2MDog.ID
diff --git "a/assets/knowledge-deposition_GoLang_Gorm_\345\205\263\350\201\224\344\271\213\345\244\232\345\257\271\345\244\232.md.34fdda09.lean.js" "b/assets/knowledge-deposition_GoLang_Gorm_\345\205\263\350\201\224\344\271\213\345\244\232\345\257\271\345\244\232.md.9a5cad71.lean.js"
similarity index 91%
rename from "assets/knowledge-deposition_GoLang_Gorm_\345\205\263\350\201\224\344\271\213\345\244\232\345\257\271\345\244\232.md.34fdda09.lean.js"
rename to "assets/knowledge-deposition_GoLang_Gorm_\345\205\263\350\201\224\344\271\213\345\244\232\345\257\271\345\244\232.md.9a5cad71.lean.js"
index 408d9dbc..e07fdefe 100644
--- "a/assets/knowledge-deposition_GoLang_Gorm_\345\205\263\350\201\224\344\271\213\345\244\232\345\257\271\345\244\232.md.34fdda09.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_Gorm_\345\205\263\350\201\224\344\271\213\345\244\232\345\257\271\345\244\232.md.9a5cad71.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"关联之多对多","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"自动迁移","slug":"自动迁移","link":"#自动迁移","children":[]},{"level":2,"title":"准备数据","slug":"准备数据","link":"#准备数据","children":[]},{"level":2,"title":"增删改","slug":"增删改","link":"#增删改","children":[]},{"level":2,"title":"查询","slug":"查询","link":"#查询","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gorm/关联之多对多.md"}'),o={name:"knowledge-deposition/GoLang/Gorm/关联之多对多.md"},p=l("",24),e=[p];function t(c,D,r,y,F,C){return a(),n("div",null,e)}const d=s(o,[["render",t]]);export{i as __pageData,d as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"关联之多对多","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"自动迁移","slug":"自动迁移","link":"#自动迁移","children":[]},{"level":2,"title":"准备数据","slug":"准备数据","link":"#准备数据","children":[]},{"level":2,"title":"增删改","slug":"增删改","link":"#增删改","children":[]},{"level":2,"title":"查询","slug":"查询","link":"#查询","children":[]}],"relativePath":"knowledge-deposition/GoLang/Gorm/关联之多对多.md"}'),o={name:"knowledge-deposition/GoLang/Gorm/关联之多对多.md"},p=l("",24),e=[p];function t(c,D,r,y,F,C){return a(),n("div",null,e)}const d=s(o,[["render",t]]);export{i as __pageData,d as default};
diff --git "a/assets/knowledge-deposition_GoLang_Gorm_\346\250\241\345\236\213\345\256\232\344\271\211.md.68bf6c3d.js" "b/assets/knowledge-deposition_GoLang_Gorm_\346\250\241\345\236\213\345\256\232\344\271\211.md.2175756f.js"
similarity index 99%
rename from "assets/knowledge-deposition_GoLang_Gorm_\346\250\241\345\236\213\345\256\232\344\271\211.md.68bf6c3d.js"
rename to "assets/knowledge-deposition_GoLang_Gorm_\346\250\241\345\236\213\345\256\232\344\271\211.md.2175756f.js"
index f383b7bc..e92d7100 100644
--- "a/assets/knowledge-deposition_GoLang_Gorm_\346\250\241\345\236\213\345\256\232\344\271\211.md.68bf6c3d.js"
+++ "b/assets/knowledge-deposition_GoLang_Gorm_\346\250\241\345\236\213\345\256\232\344\271\211.md.2175756f.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const d=JSON.parse('{"title":"模型定义","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"模型定义","slug":"模型定义-1","link":"#模型定义-1","children":[]},{"level":2,"title":"约定","slug":"约定","link":"#约定","children":[{"level":3,"title":"命名策略","slug":"命名策略","link":"#命名策略","children":[]},{"level":3,"title":"自定义表/字段名","slug":"自定义表-字段名","link":"#自定义表-字段名","children":[]}]},{"level":2,"title":"gorm.Model","slug":"gorm-model","link":"#gorm-model","children":[]},{"level":2,"title":"高级选项","slug":"高级选项","link":"#高级选项","children":[{"level":3,"title":"嵌套结构体","slug":"嵌套结构体","link":"#嵌套结构体","children":[]},{"level":3,"title":"设置时间格式","slug":"设置时间格式","link":"#设置时间格式","children":[]},{"level":3,"title":"字段标签","slug":"字段标签","link":"#字段标签","children":[]},{"level":3,"title":"自动生成表结构","slug":"自动生成表结构","link":"#自动生成表结构","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/Gorm/模型定义.md"}'),e={name:"knowledge-deposition/GoLang/Gorm/模型定义.md"},o=l(`

模型定义

模型定义

模型是标准的struct,由Go的基本数据类型、实现了ScannerValuer接口的自定义类型及其指针或别名组成

例如:

Go
type User struct {
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const d=JSON.parse('{"title":"模型定义","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"模型定义","slug":"模型定义-1","link":"#模型定义-1","children":[]},{"level":2,"title":"约定","slug":"约定","link":"#约定","children":[{"level":3,"title":"命名策略","slug":"命名策略","link":"#命名策略","children":[]},{"level":3,"title":"自定义表/字段名","slug":"自定义表-字段名","link":"#自定义表-字段名","children":[]}]},{"level":2,"title":"gorm.Model","slug":"gorm-model","link":"#gorm-model","children":[]},{"level":2,"title":"高级选项","slug":"高级选项","link":"#高级选项","children":[{"level":3,"title":"嵌套结构体","slug":"嵌套结构体","link":"#嵌套结构体","children":[]},{"level":3,"title":"设置时间格式","slug":"设置时间格式","link":"#设置时间格式","children":[]},{"level":3,"title":"字段标签","slug":"字段标签","link":"#字段标签","children":[]},{"level":3,"title":"自动生成表结构","slug":"自动生成表结构","link":"#自动生成表结构","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/Gorm/模型定义.md"}'),e={name:"knowledge-deposition/GoLang/Gorm/模型定义.md"},o=l(`

模型定义

模型定义

模型是标准的struct,由Go的基本数据类型、实现了ScannerValuer接口的自定义类型及其指针或别名组成

例如:

Go
type User struct {
   ID           uint
   Name         string
   Email        *string
diff --git "a/assets/knowledge-deposition_GoLang_Gorm_\346\250\241\345\236\213\345\256\232\344\271\211.md.68bf6c3d.lean.js" "b/assets/knowledge-deposition_GoLang_Gorm_\346\250\241\345\236\213\345\256\232\344\271\211.md.2175756f.lean.js"
similarity index 95%
rename from "assets/knowledge-deposition_GoLang_Gorm_\346\250\241\345\236\213\345\256\232\344\271\211.md.68bf6c3d.lean.js"
rename to "assets/knowledge-deposition_GoLang_Gorm_\346\250\241\345\236\213\345\256\232\344\271\211.md.2175756f.lean.js"
index e10c76e6..ea0c26f0 100644
--- "a/assets/knowledge-deposition_GoLang_Gorm_\346\250\241\345\236\213\345\256\232\344\271\211.md.68bf6c3d.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_Gorm_\346\250\241\345\236\213\345\256\232\344\271\211.md.2175756f.lean.js"
@@ -1 +1 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const d=JSON.parse('{"title":"模型定义","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"模型定义","slug":"模型定义-1","link":"#模型定义-1","children":[]},{"level":2,"title":"约定","slug":"约定","link":"#约定","children":[{"level":3,"title":"命名策略","slug":"命名策略","link":"#命名策略","children":[]},{"level":3,"title":"自定义表/字段名","slug":"自定义表-字段名","link":"#自定义表-字段名","children":[]}]},{"level":2,"title":"gorm.Model","slug":"gorm-model","link":"#gorm-model","children":[]},{"level":2,"title":"高级选项","slug":"高级选项","link":"#高级选项","children":[{"level":3,"title":"嵌套结构体","slug":"嵌套结构体","link":"#嵌套结构体","children":[]},{"level":3,"title":"设置时间格式","slug":"设置时间格式","link":"#设置时间格式","children":[]},{"level":3,"title":"字段标签","slug":"字段标签","link":"#字段标签","children":[]},{"level":3,"title":"自动生成表结构","slug":"自动生成表结构","link":"#自动生成表结构","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/Gorm/模型定义.md"}'),e={name:"knowledge-deposition/GoLang/Gorm/模型定义.md"},o=l("",44),p=[o];function t(c,r,i,C,y,D){return n(),a("div",null,p)}const F=s(e,[["render",t]]);export{d as __pageData,F as default};
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const d=JSON.parse('{"title":"模型定义","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"模型定义","slug":"模型定义-1","link":"#模型定义-1","children":[]},{"level":2,"title":"约定","slug":"约定","link":"#约定","children":[{"level":3,"title":"命名策略","slug":"命名策略","link":"#命名策略","children":[]},{"level":3,"title":"自定义表/字段名","slug":"自定义表-字段名","link":"#自定义表-字段名","children":[]}]},{"level":2,"title":"gorm.Model","slug":"gorm-model","link":"#gorm-model","children":[]},{"level":2,"title":"高级选项","slug":"高级选项","link":"#高级选项","children":[{"level":3,"title":"嵌套结构体","slug":"嵌套结构体","link":"#嵌套结构体","children":[]},{"level":3,"title":"设置时间格式","slug":"设置时间格式","link":"#设置时间格式","children":[]},{"level":3,"title":"字段标签","slug":"字段标签","link":"#字段标签","children":[]},{"level":3,"title":"自动生成表结构","slug":"自动生成表结构","link":"#自动生成表结构","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/Gorm/模型定义.md"}'),e={name:"knowledge-deposition/GoLang/Gorm/模型定义.md"},o=l("",44),p=[o];function t(c,r,i,C,y,D){return n(),a("div",null,p)}const F=s(e,[["render",t]]);export{d as __pageData,F as default};
diff --git "a/assets/knowledge-deposition_GoLang_Gorm_\350\207\252\345\256\232\344\271\211\346\225\260\346\215\256\347\261\273\345\236\213.md.be58d009.js" "b/assets/knowledge-deposition_GoLang_Gorm_\350\207\252\345\256\232\344\271\211\346\225\260\346\215\256\347\261\273\345\236\213.md.58e6b0be.js"
similarity index 99%
rename from "assets/knowledge-deposition_GoLang_Gorm_\350\207\252\345\256\232\344\271\211\346\225\260\346\215\256\347\261\273\345\236\213.md.be58d009.js"
rename to "assets/knowledge-deposition_GoLang_Gorm_\350\207\252\345\256\232\344\271\211\346\225\260\346\215\256\347\261\273\345\236\213.md.58e6b0be.js"
index 3ca2dda1..177de48e 100644
--- "a/assets/knowledge-deposition_GoLang_Gorm_\350\207\252\345\256\232\344\271\211\346\225\260\346\215\256\347\261\273\345\236\213.md.be58d009.js"
+++ "b/assets/knowledge-deposition_GoLang_Gorm_\350\207\252\345\256\232\344\271\211\346\225\260\346\215\256\347\261\273\345\236\213.md.58e6b0be.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"自定义数据类型","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"代码示例","slug":"代码示例","link":"#代码示例","children":[{"level":3,"title":"准备数据和自动建表","slug":"准备数据和自动建表","link":"#准备数据和自动建表","children":[]},{"level":3,"title":"实现Valuer接口,处理存入数据库中的值","slug":"实现valuer接口-处理存入数据库中的值","link":"#实现valuer接口-处理存入数据库中的值","children":[]},{"level":3,"title":"实现Scanner接口,将从数据库中取到的值进行格式化","slug":"实现scanner接口-将从数据库中取到的值进行格式化","link":"#实现scanner接口-将从数据库中取到的值进行格式化","children":[]},{"level":3,"title":"完整代码","slug":"完整代码","link":"#完整代码","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/Gorm/自定义数据类型.md"}'),p={name:"knowledge-deposition/GoLang/Gorm/自定义数据类型.md"},o=l(`

自定义数据类型

在使用GORM进行Go语言的数据库操作时,有时候会遇到内置数据类型不能满足需求的情况。可以通过实现GORM的ScannerValuer接口来创建自定义数据类型,使其能够与数据库交互。

TIP

要在GORM中使用这些自定义类型,需要实现两个接口

  • Scanner:用于从数据库读取值

  • Valuer:用于将值写入数据库

ScannerValuer接口定义如下,如果要使用自定义数据类型,需要实现ScanValue方法

Go
type Scanner interface {
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"自定义数据类型","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"代码示例","slug":"代码示例","link":"#代码示例","children":[{"level":3,"title":"准备数据和自动建表","slug":"准备数据和自动建表","link":"#准备数据和自动建表","children":[]},{"level":3,"title":"实现Valuer接口,处理存入数据库中的值","slug":"实现valuer接口-处理存入数据库中的值","link":"#实现valuer接口-处理存入数据库中的值","children":[]},{"level":3,"title":"实现Scanner接口,将从数据库中取到的值进行格式化","slug":"实现scanner接口-将从数据库中取到的值进行格式化","link":"#实现scanner接口-将从数据库中取到的值进行格式化","children":[]},{"level":3,"title":"完整代码","slug":"完整代码","link":"#完整代码","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/Gorm/自定义数据类型.md"}'),p={name:"knowledge-deposition/GoLang/Gorm/自定义数据类型.md"},o=l(`

自定义数据类型

在使用GORM进行Go语言的数据库操作时,有时候会遇到内置数据类型不能满足需求的情况。可以通过实现GORM的ScannerValuer接口来创建自定义数据类型,使其能够与数据库交互。

TIP

要在GORM中使用这些自定义类型,需要实现两个接口

  • Scanner:用于从数据库读取值

  • Valuer:用于将值写入数据库

ScannerValuer接口定义如下,如果要使用自定义数据类型,需要实现ScanValue方法

Go
type Scanner interface {
 	// Scan assigns a value from a database driver.
 	//
 	// The src value will be of one of the following types:
diff --git "a/assets/knowledge-deposition_GoLang_Gorm_\350\207\252\345\256\232\344\271\211\346\225\260\346\215\256\347\261\273\345\236\213.md.be58d009.lean.js" "b/assets/knowledge-deposition_GoLang_Gorm_\350\207\252\345\256\232\344\271\211\346\225\260\346\215\256\347\261\273\345\236\213.md.58e6b0be.lean.js"
similarity index 94%
rename from "assets/knowledge-deposition_GoLang_Gorm_\350\207\252\345\256\232\344\271\211\346\225\260\346\215\256\347\261\273\345\236\213.md.be58d009.lean.js"
rename to "assets/knowledge-deposition_GoLang_Gorm_\350\207\252\345\256\232\344\271\211\346\225\260\346\215\256\347\261\273\345\236\213.md.58e6b0be.lean.js"
index 82027703..99ed479c 100644
--- "a/assets/knowledge-deposition_GoLang_Gorm_\350\207\252\345\256\232\344\271\211\346\225\260\346\215\256\347\261\273\345\236\213.md.be58d009.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_Gorm_\350\207\252\345\256\232\344\271\211\346\225\260\346\215\256\347\261\273\345\236\213.md.58e6b0be.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"自定义数据类型","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"代码示例","slug":"代码示例","link":"#代码示例","children":[{"level":3,"title":"准备数据和自动建表","slug":"准备数据和自动建表","link":"#准备数据和自动建表","children":[]},{"level":3,"title":"实现Valuer接口,处理存入数据库中的值","slug":"实现valuer接口-处理存入数据库中的值","link":"#实现valuer接口-处理存入数据库中的值","children":[]},{"level":3,"title":"实现Scanner接口,将从数据库中取到的值进行格式化","slug":"实现scanner接口-将从数据库中取到的值进行格式化","link":"#实现scanner接口-将从数据库中取到的值进行格式化","children":[]},{"level":3,"title":"完整代码","slug":"完整代码","link":"#完整代码","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/Gorm/自定义数据类型.md"}'),p={name:"knowledge-deposition/GoLang/Gorm/自定义数据类型.md"},o=l("",16),e=[o];function t(c,r,D,y,F,A){return a(),n("div",null,e)}const u=s(p,[["render",t]]);export{i as __pageData,u as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"自定义数据类型","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"代码示例","slug":"代码示例","link":"#代码示例","children":[{"level":3,"title":"准备数据和自动建表","slug":"准备数据和自动建表","link":"#准备数据和自动建表","children":[]},{"level":3,"title":"实现Valuer接口,处理存入数据库中的值","slug":"实现valuer接口-处理存入数据库中的值","link":"#实现valuer接口-处理存入数据库中的值","children":[]},{"level":3,"title":"实现Scanner接口,将从数据库中取到的值进行格式化","slug":"实现scanner接口-将从数据库中取到的值进行格式化","link":"#实现scanner接口-将从数据库中取到的值进行格式化","children":[]},{"level":3,"title":"完整代码","slug":"完整代码","link":"#完整代码","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/Gorm/自定义数据类型.md"}'),p={name:"knowledge-deposition/GoLang/Gorm/自定义数据类型.md"},o=l("",16),e=[o];function t(c,r,D,y,F,A){return a(),n("div",null,e)}const u=s(p,[["render",t]]);export{i as __pageData,u as default};
diff --git "a/assets/knowledge-deposition_GoLang_Gorm_\350\277\236\346\216\245\346\225\260\346\215\256\345\272\223.md.e4b93656.js" "b/assets/knowledge-deposition_GoLang_Gorm_\350\277\236\346\216\245\346\225\260\346\215\256\345\272\223.md.f195036b.js"
similarity index 99%
rename from "assets/knowledge-deposition_GoLang_Gorm_\350\277\236\346\216\245\346\225\260\346\215\256\345\272\223.md.e4b93656.js"
rename to "assets/knowledge-deposition_GoLang_Gorm_\350\277\236\346\216\245\346\225\260\346\215\256\345\272\223.md.f195036b.js"
index 06219a1d..65f59c40 100644
--- "a/assets/knowledge-deposition_GoLang_Gorm_\350\277\236\346\216\245\346\225\260\346\215\256\345\272\223.md.e4b93656.js"
+++ "b/assets/knowledge-deposition_GoLang_Gorm_\350\277\236\346\216\245\346\225\260\346\215\256\345\272\223.md.f195036b.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"连接数据库","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"连接Mysql数据库","slug":"连接mysql数据库","link":"#连接mysql数据库","children":[{"level":3,"title":"项目初始化","slug":"项目初始化","link":"#项目初始化","children":[]},{"level":3,"title":"下载依赖","slug":"下载依赖","link":"#下载依赖","children":[]},{"level":3,"title":"连接数据库","slug":"连接数据库-1","link":"#连接数据库-1","children":[]}]},{"level":2,"title":"高级配置","slug":"高级配置","link":"#高级配置","children":[{"level":3,"title":"日志配置","slug":"日志配置","link":"#日志配置","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/Gorm/连接数据库.md"}'),o={name:"knowledge-deposition/GoLang/Gorm/连接数据库.md"},p=l(`

连接数据库

  • GORM官方支持的数据库类型有:MySQLPostgreSQLSQliteSQL Server

连接Mysql数据库

项目初始化

shell
go mod init gorm-related
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"连接数据库","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"连接Mysql数据库","slug":"连接mysql数据库","link":"#连接mysql数据库","children":[{"level":3,"title":"项目初始化","slug":"项目初始化","link":"#项目初始化","children":[]},{"level":3,"title":"下载依赖","slug":"下载依赖","link":"#下载依赖","children":[]},{"level":3,"title":"连接数据库","slug":"连接数据库-1","link":"#连接数据库-1","children":[]}]},{"level":2,"title":"高级配置","slug":"高级配置","link":"#高级配置","children":[{"level":3,"title":"日志配置","slug":"日志配置","link":"#日志配置","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/Gorm/连接数据库.md"}'),o={name:"knowledge-deposition/GoLang/Gorm/连接数据库.md"},p=l(`

连接数据库

  • GORM官方支持的数据库类型有:MySQLPostgreSQLSQliteSQL Server

连接Mysql数据库

项目初始化

shell
go mod init gorm-related
 
  • 项目目录
shell
.
 ├── config
    └── db.yaml # 配置文件
diff --git "a/assets/knowledge-deposition_GoLang_Gorm_\350\277\236\346\216\245\346\225\260\346\215\256\345\272\223.md.e4b93656.lean.js" "b/assets/knowledge-deposition_GoLang_Gorm_\350\277\236\346\216\245\346\225\260\346\215\256\345\272\223.md.f195036b.lean.js"
similarity index 93%
rename from "assets/knowledge-deposition_GoLang_Gorm_\350\277\236\346\216\245\346\225\260\346\215\256\345\272\223.md.e4b93656.lean.js"
rename to "assets/knowledge-deposition_GoLang_Gorm_\350\277\236\346\216\245\346\225\260\346\215\256\345\272\223.md.f195036b.lean.js"
index b7ffbfec..5b4f312c 100644
--- "a/assets/knowledge-deposition_GoLang_Gorm_\350\277\236\346\216\245\346\225\260\346\215\256\345\272\223.md.e4b93656.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_Gorm_\350\277\236\346\216\245\346\225\260\346\215\256\345\272\223.md.f195036b.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"连接数据库","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"连接Mysql数据库","slug":"连接mysql数据库","link":"#连接mysql数据库","children":[{"level":3,"title":"项目初始化","slug":"项目初始化","link":"#项目初始化","children":[]},{"level":3,"title":"下载依赖","slug":"下载依赖","link":"#下载依赖","children":[]},{"level":3,"title":"连接数据库","slug":"连接数据库-1","link":"#连接数据库-1","children":[]}]},{"level":2,"title":"高级配置","slug":"高级配置","link":"#高级配置","children":[{"level":3,"title":"日志配置","slug":"日志配置","link":"#日志配置","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/Gorm/连接数据库.md"}'),o={name:"knowledge-deposition/GoLang/Gorm/连接数据库.md"},p=l("",37),e=[p];function t(c,r,D,y,F,C){return a(),n("div",null,e)}const d=s(o,[["render",t]]);export{i as __pageData,d as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"连接数据库","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"连接Mysql数据库","slug":"连接mysql数据库","link":"#连接mysql数据库","children":[{"level":3,"title":"项目初始化","slug":"项目初始化","link":"#项目初始化","children":[]},{"level":3,"title":"下载依赖","slug":"下载依赖","link":"#下载依赖","children":[]},{"level":3,"title":"连接数据库","slug":"连接数据库-1","link":"#连接数据库-1","children":[]}]},{"level":2,"title":"高级配置","slug":"高级配置","link":"#高级配置","children":[{"level":3,"title":"日志配置","slug":"日志配置","link":"#日志配置","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/Gorm/连接数据库.md"}'),o={name:"knowledge-deposition/GoLang/Gorm/连接数据库.md"},p=l("",37),e=[p];function t(c,r,D,y,F,C){return a(),n("div",null,e)}const d=s(o,[["render",t]]);export{i as __pageData,d as default};
diff --git a/assets/knowledge-deposition_GoLang_JWT_JWT.md.2fbc5e68.js b/assets/knowledge-deposition_GoLang_JWT_JWT.md.402a05cd.js
similarity index 92%
rename from assets/knowledge-deposition_GoLang_JWT_JWT.md.2fbc5e68.js
rename to assets/knowledge-deposition_GoLang_JWT_JWT.md.402a05cd.js
index 0baf53f3..25b05041 100644
--- a/assets/knowledge-deposition_GoLang_JWT_JWT.md.2fbc5e68.js
+++ b/assets/knowledge-deposition_GoLang_JWT_JWT.md.402a05cd.js
@@ -1 +1 @@
-import{_ as a,c as o,o as n,a as e,b as t}from"./app.7354b8c5.js";const W=JSON.parse('{"title":"JWT","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"原理","slug":"原理","link":"#原理","children":[]}],"relativePath":"knowledge-deposition/GoLang/JWT/JWT.md"}'),s={name:"knowledge-deposition/GoLang/JWT/JWT.md"},d=e("h1",{id:"jwt",tabindex:"-1"},[t("JWT "),e("a",{class:"header-anchor",href:"#jwt","aria-hidden":"true"},"#")],-1),r=e("p",null,"JWT(JSON Web Token)是目前最流行的跨域认证解决方案",-1),i=e("h2",{id:"原理",tabindex:"-1"},[t("原理 "),e("a",{class:"header-anchor",href:"#原理","aria-hidden":"true"},"#")],-1),c=[d,r,i];function l(_,h,p,u,J,T){return n(),o("div",null,c)}const m=a(s,[["render",l]]);export{W as __pageData,m as default};
+import{_ as a,c as o,o as n,a as e,b as t}from"./app.4a806fb4.js";const W=JSON.parse('{"title":"JWT","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"原理","slug":"原理","link":"#原理","children":[]}],"relativePath":"knowledge-deposition/GoLang/JWT/JWT.md"}'),s={name:"knowledge-deposition/GoLang/JWT/JWT.md"},d=e("h1",{id:"jwt",tabindex:"-1"},[t("JWT "),e("a",{class:"header-anchor",href:"#jwt","aria-hidden":"true"},"#")],-1),r=e("p",null,"JWT(JSON Web Token)是目前最流行的跨域认证解决方案",-1),i=e("h2",{id:"原理",tabindex:"-1"},[t("原理 "),e("a",{class:"header-anchor",href:"#原理","aria-hidden":"true"},"#")],-1),c=[d,r,i];function l(_,h,p,u,J,T){return n(),o("div",null,c)}const m=a(s,[["render",l]]);export{W as __pageData,m as default};
diff --git a/assets/knowledge-deposition_GoLang_JWT_JWT.md.2fbc5e68.lean.js b/assets/knowledge-deposition_GoLang_JWT_JWT.md.402a05cd.lean.js
similarity index 92%
rename from assets/knowledge-deposition_GoLang_JWT_JWT.md.2fbc5e68.lean.js
rename to assets/knowledge-deposition_GoLang_JWT_JWT.md.402a05cd.lean.js
index 0baf53f3..25b05041 100644
--- a/assets/knowledge-deposition_GoLang_JWT_JWT.md.2fbc5e68.lean.js
+++ b/assets/knowledge-deposition_GoLang_JWT_JWT.md.402a05cd.lean.js
@@ -1 +1 @@
-import{_ as a,c as o,o as n,a as e,b as t}from"./app.7354b8c5.js";const W=JSON.parse('{"title":"JWT","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"原理","slug":"原理","link":"#原理","children":[]}],"relativePath":"knowledge-deposition/GoLang/JWT/JWT.md"}'),s={name:"knowledge-deposition/GoLang/JWT/JWT.md"},d=e("h1",{id:"jwt",tabindex:"-1"},[t("JWT "),e("a",{class:"header-anchor",href:"#jwt","aria-hidden":"true"},"#")],-1),r=e("p",null,"JWT(JSON Web Token)是目前最流行的跨域认证解决方案",-1),i=e("h2",{id:"原理",tabindex:"-1"},[t("原理 "),e("a",{class:"header-anchor",href:"#原理","aria-hidden":"true"},"#")],-1),c=[d,r,i];function l(_,h,p,u,J,T){return n(),o("div",null,c)}const m=a(s,[["render",l]]);export{W as __pageData,m as default};
+import{_ as a,c as o,o as n,a as e,b as t}from"./app.4a806fb4.js";const W=JSON.parse('{"title":"JWT","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"原理","slug":"原理","link":"#原理","children":[]}],"relativePath":"knowledge-deposition/GoLang/JWT/JWT.md"}'),s={name:"knowledge-deposition/GoLang/JWT/JWT.md"},d=e("h1",{id:"jwt",tabindex:"-1"},[t("JWT "),e("a",{class:"header-anchor",href:"#jwt","aria-hidden":"true"},"#")],-1),r=e("p",null,"JWT(JSON Web Token)是目前最流行的跨域认证解决方案",-1),i=e("h2",{id:"原理",tabindex:"-1"},[t("原理 "),e("a",{class:"header-anchor",href:"#原理","aria-hidden":"true"},"#")],-1),c=[d,r,i];function l(_,h,p,u,J,T){return n(),o("div",null,c)}const m=a(s,[["render",l]]);export{W as __pageData,m as default};
diff --git a/assets/knowledge-deposition_GoLang_Logger_Logrus_Hook.md.99b69a20.js b/assets/knowledge-deposition_GoLang_Logger_Logrus_Hook.md.d190ad72.js
similarity index 99%
rename from assets/knowledge-deposition_GoLang_Logger_Logrus_Hook.md.99b69a20.js
rename to assets/knowledge-deposition_GoLang_Logger_Logrus_Hook.md.d190ad72.js
index bc82f8da..e7dbea88 100644
--- a/assets/knowledge-deposition_GoLang_Logger_Logrus_Hook.md.99b69a20.js
+++ b/assets/knowledge-deposition_GoLang_Logger_Logrus_Hook.md.d190ad72.js
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as o}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"Hook","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"knowledge-deposition/GoLang/Logger/Logrus/Hook.md"}'),l={name:"knowledge-deposition/GoLang/Logger/Logrus/Hook.md"},p=o(`

Hook

  • 通过使用hook,可以扩展logrus的功能

  • 可以为logrus设置hook,每条日志输出前都会执行hook的特定方法

  • 点击查看更多

Hook定义如下

Go
type Hook interface {
+import{_ as s,c as n,o as a,e as o}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"Hook","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"knowledge-deposition/GoLang/Logger/Logrus/Hook.md"}'),l={name:"knowledge-deposition/GoLang/Logger/Logrus/Hook.md"},p=o(`

Hook

  • 通过使用hook,可以扩展logrus的功能

  • 可以为logrus设置hook,每条日志输出前都会执行hook的特定方法

  • 点击查看更多

Hook定义如下

Go
type Hook interface {
 	Levels() []Level
 	Fire(*Entry) error
 }
diff --git a/assets/knowledge-deposition_GoLang_Logger_Logrus_Hook.md.99b69a20.lean.js b/assets/knowledge-deposition_GoLang_Logger_Logrus_Hook.md.d190ad72.lean.js
similarity index 84%
rename from assets/knowledge-deposition_GoLang_Logger_Logrus_Hook.md.99b69a20.lean.js
rename to assets/knowledge-deposition_GoLang_Logger_Logrus_Hook.md.d190ad72.lean.js
index bc756c97..14b59607 100644
--- a/assets/knowledge-deposition_GoLang_Logger_Logrus_Hook.md.99b69a20.lean.js
+++ b/assets/knowledge-deposition_GoLang_Logger_Logrus_Hook.md.d190ad72.lean.js
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as o}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"Hook","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"knowledge-deposition/GoLang/Logger/Logrus/Hook.md"}'),l={name:"knowledge-deposition/GoLang/Logger/Logrus/Hook.md"},p=o("",8),e=[p];function t(c,r,D,F,y,A){return a(),n("div",null,e)}const u=s(l,[["render",t]]);export{i as __pageData,u as default};
+import{_ as s,c as n,o as a,e as o}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"Hook","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"knowledge-deposition/GoLang/Logger/Logrus/Hook.md"}'),l={name:"knowledge-deposition/GoLang/Logger/Logrus/Hook.md"},p=o("",8),e=[p];function t(c,r,D,F,y,A){return a(),n("div",null,e)}const u=s(l,[["render",t]]);export{i as __pageData,u as default};
diff --git "a/assets/knowledge-deposition_GoLang_Logger_Logrus_\345\237\272\347\241\200\347\224\250\346\263\225.md.80bd7d94.js" "b/assets/knowledge-deposition_GoLang_Logger_Logrus_\345\237\272\347\241\200\347\224\250\346\263\225.md.0f507f2b.js"
similarity index 99%
rename from "assets/knowledge-deposition_GoLang_Logger_Logrus_\345\237\272\347\241\200\347\224\250\346\263\225.md.80bd7d94.js"
rename to "assets/knowledge-deposition_GoLang_Logger_Logrus_\345\237\272\347\241\200\347\224\250\346\263\225.md.0f507f2b.js"
index e95b87cb..40aebe21 100644
--- "a/assets/knowledge-deposition_GoLang_Logger_Logrus_\345\237\272\347\241\200\347\224\250\346\263\225.md.80bd7d94.js"
+++ "b/assets/knowledge-deposition_GoLang_Logger_Logrus_\345\237\272\347\241\200\347\224\250\346\263\225.md.0f507f2b.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const o="/static-blog/image/go/logrus_1.png",p="/static-blog/image/go/logrus_2.png",e="/static-blog/image/go/logrus_text_color.png",t="/static-blog/image/go/logrus_bg_color.png",c="/static-blog/image/go/logrus_custom_color.png",m=JSON.parse('{"title":"基础用法","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"下载依赖","slug":"下载依赖","link":"#下载依赖","children":[]},{"level":2,"title":"输出log","slug":"输出log","link":"#输出log","children":[]},{"level":2,"title":"日志等级","slug":"日志等级","link":"#日志等级","children":[]},{"level":2,"title":"获取日志等级","slug":"获取日志等级","link":"#获取日志等级","children":[]},{"level":2,"title":"修改日志等级","slug":"修改日志等级","link":"#修改日志等级","children":[]},{"level":2,"title":"输出日志添加额外字段","slug":"输出日志添加额外字段","link":"#输出日志添加额外字段","children":[{"level":3,"title":"添加单个字段","slug":"添加单个字段","link":"#添加单个字段","children":[]},{"level":3,"title":"同时添加多个字段","slug":"同时添加多个字段","link":"#同时添加多个字段","children":[]}]},{"level":2,"title":"设置日志展示调用文件路径、行数、函数名称","slug":"设置日志展示调用文件路径、行数、函数名称","link":"#设置日志展示调用文件路径、行数、函数名称","children":[]},{"level":2,"title":"设置日志格式","slug":"设置日志格式","link":"#设置日志格式","children":[{"level":3,"title":"修改日志为json格式","slug":"修改日志为json格式","link":"#修改日志为json格式","children":[]}]},{"level":2,"title":"将日志输出到日志文件中","slug":"将日志输出到日志文件中","link":"#将日志输出到日志文件中","children":[]},{"level":2,"title":"自定义颜色","slug":"自定义颜色","link":"#自定义颜色","children":[{"level":3,"title":"文本颜色","slug":"文本颜色","link":"#文本颜色","children":[]},{"level":3,"title":"文本背景色","slug":"文本背景色","link":"#文本背景色","children":[]}]},{"level":2,"title":"实现自定义设置输入日志颜色","slug":"实现自定义设置输入日志颜色","link":"#实现自定义设置输入日志颜色","children":[]}],"relativePath":"knowledge-deposition/GoLang/Logger/Logrus/基础用法.md"}'),r={name:"knowledge-deposition/GoLang/Logger/Logrus/基础用法.md"},D=l(`

基础用法

下载依赖

Go
go get github.com/sirupsen/logrus
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const o="/static-blog/image/go/logrus_1.png",p="/static-blog/image/go/logrus_2.png",e="/static-blog/image/go/logrus_text_color.png",t="/static-blog/image/go/logrus_bg_color.png",c="/static-blog/image/go/logrus_custom_color.png",m=JSON.parse('{"title":"基础用法","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"下载依赖","slug":"下载依赖","link":"#下载依赖","children":[]},{"level":2,"title":"输出log","slug":"输出log","link":"#输出log","children":[]},{"level":2,"title":"日志等级","slug":"日志等级","link":"#日志等级","children":[]},{"level":2,"title":"获取日志等级","slug":"获取日志等级","link":"#获取日志等级","children":[]},{"level":2,"title":"修改日志等级","slug":"修改日志等级","link":"#修改日志等级","children":[]},{"level":2,"title":"输出日志添加额外字段","slug":"输出日志添加额外字段","link":"#输出日志添加额外字段","children":[{"level":3,"title":"添加单个字段","slug":"添加单个字段","link":"#添加单个字段","children":[]},{"level":3,"title":"同时添加多个字段","slug":"同时添加多个字段","link":"#同时添加多个字段","children":[]}]},{"level":2,"title":"设置日志展示调用文件路径、行数、函数名称","slug":"设置日志展示调用文件路径、行数、函数名称","link":"#设置日志展示调用文件路径、行数、函数名称","children":[]},{"level":2,"title":"设置日志格式","slug":"设置日志格式","link":"#设置日志格式","children":[{"level":3,"title":"修改日志为json格式","slug":"修改日志为json格式","link":"#修改日志为json格式","children":[]}]},{"level":2,"title":"将日志输出到日志文件中","slug":"将日志输出到日志文件中","link":"#将日志输出到日志文件中","children":[]},{"level":2,"title":"自定义颜色","slug":"自定义颜色","link":"#自定义颜色","children":[{"level":3,"title":"文本颜色","slug":"文本颜色","link":"#文本颜色","children":[]},{"level":3,"title":"文本背景色","slug":"文本背景色","link":"#文本背景色","children":[]}]},{"level":2,"title":"实现自定义设置输入日志颜色","slug":"实现自定义设置输入日志颜色","link":"#实现自定义设置输入日志颜色","children":[]}],"relativePath":"knowledge-deposition/GoLang/Logger/Logrus/基础用法.md"}'),r={name:"knowledge-deposition/GoLang/Logger/Logrus/基础用法.md"},D=l(`

基础用法

下载依赖

Go
go get github.com/sirupsen/logrus
 

输出log

Go
logrus.Errorln("logrus => Error")
 logrus.Warningln("logrus => Warn")
 logrus.Infoln("logrus => Info")
diff --git "a/assets/knowledge-deposition_GoLang_Logger_Logrus_\345\237\272\347\241\200\347\224\250\346\263\225.md.80bd7d94.lean.js" "b/assets/knowledge-deposition_GoLang_Logger_Logrus_\345\237\272\347\241\200\347\224\250\346\263\225.md.0f507f2b.lean.js"
similarity index 97%
rename from "assets/knowledge-deposition_GoLang_Logger_Logrus_\345\237\272\347\241\200\347\224\250\346\263\225.md.80bd7d94.lean.js"
rename to "assets/knowledge-deposition_GoLang_Logger_Logrus_\345\237\272\347\241\200\347\224\250\346\263\225.md.0f507f2b.lean.js"
index cde91d73..40b48166 100644
--- "a/assets/knowledge-deposition_GoLang_Logger_Logrus_\345\237\272\347\241\200\347\224\250\346\263\225.md.80bd7d94.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_Logger_Logrus_\345\237\272\347\241\200\347\224\250\346\263\225.md.0f507f2b.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const o="/static-blog/image/go/logrus_1.png",p="/static-blog/image/go/logrus_2.png",e="/static-blog/image/go/logrus_text_color.png",t="/static-blog/image/go/logrus_bg_color.png",c="/static-blog/image/go/logrus_custom_color.png",m=JSON.parse('{"title":"基础用法","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"下载依赖","slug":"下载依赖","link":"#下载依赖","children":[]},{"level":2,"title":"输出log","slug":"输出log","link":"#输出log","children":[]},{"level":2,"title":"日志等级","slug":"日志等级","link":"#日志等级","children":[]},{"level":2,"title":"获取日志等级","slug":"获取日志等级","link":"#获取日志等级","children":[]},{"level":2,"title":"修改日志等级","slug":"修改日志等级","link":"#修改日志等级","children":[]},{"level":2,"title":"输出日志添加额外字段","slug":"输出日志添加额外字段","link":"#输出日志添加额外字段","children":[{"level":3,"title":"添加单个字段","slug":"添加单个字段","link":"#添加单个字段","children":[]},{"level":3,"title":"同时添加多个字段","slug":"同时添加多个字段","link":"#同时添加多个字段","children":[]}]},{"level":2,"title":"设置日志展示调用文件路径、行数、函数名称","slug":"设置日志展示调用文件路径、行数、函数名称","link":"#设置日志展示调用文件路径、行数、函数名称","children":[]},{"level":2,"title":"设置日志格式","slug":"设置日志格式","link":"#设置日志格式","children":[{"level":3,"title":"修改日志为json格式","slug":"修改日志为json格式","link":"#修改日志为json格式","children":[]}]},{"level":2,"title":"将日志输出到日志文件中","slug":"将日志输出到日志文件中","link":"#将日志输出到日志文件中","children":[]},{"level":2,"title":"自定义颜色","slug":"自定义颜色","link":"#自定义颜色","children":[{"level":3,"title":"文本颜色","slug":"文本颜色","link":"#文本颜色","children":[]},{"level":3,"title":"文本背景色","slug":"文本背景色","link":"#文本背景色","children":[]}]},{"level":2,"title":"实现自定义设置输入日志颜色","slug":"实现自定义设置输入日志颜色","link":"#实现自定义设置输入日志颜色","children":[]}],"relativePath":"knowledge-deposition/GoLang/Logger/Logrus/基础用法.md"}'),r={name:"knowledge-deposition/GoLang/Logger/Logrus/基础用法.md"},D=l("",50),F=[D];function y(C,A,i,u,d,g){return a(),n("div",null,F)}const f=s(r,[["render",y]]);export{m as __pageData,f as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const o="/static-blog/image/go/logrus_1.png",p="/static-blog/image/go/logrus_2.png",e="/static-blog/image/go/logrus_text_color.png",t="/static-blog/image/go/logrus_bg_color.png",c="/static-blog/image/go/logrus_custom_color.png",m=JSON.parse('{"title":"基础用法","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"下载依赖","slug":"下载依赖","link":"#下载依赖","children":[]},{"level":2,"title":"输出log","slug":"输出log","link":"#输出log","children":[]},{"level":2,"title":"日志等级","slug":"日志等级","link":"#日志等级","children":[]},{"level":2,"title":"获取日志等级","slug":"获取日志等级","link":"#获取日志等级","children":[]},{"level":2,"title":"修改日志等级","slug":"修改日志等级","link":"#修改日志等级","children":[]},{"level":2,"title":"输出日志添加额外字段","slug":"输出日志添加额外字段","link":"#输出日志添加额外字段","children":[{"level":3,"title":"添加单个字段","slug":"添加单个字段","link":"#添加单个字段","children":[]},{"level":3,"title":"同时添加多个字段","slug":"同时添加多个字段","link":"#同时添加多个字段","children":[]}]},{"level":2,"title":"设置日志展示调用文件路径、行数、函数名称","slug":"设置日志展示调用文件路径、行数、函数名称","link":"#设置日志展示调用文件路径、行数、函数名称","children":[]},{"level":2,"title":"设置日志格式","slug":"设置日志格式","link":"#设置日志格式","children":[{"level":3,"title":"修改日志为json格式","slug":"修改日志为json格式","link":"#修改日志为json格式","children":[]}]},{"level":2,"title":"将日志输出到日志文件中","slug":"将日志输出到日志文件中","link":"#将日志输出到日志文件中","children":[]},{"level":2,"title":"自定义颜色","slug":"自定义颜色","link":"#自定义颜色","children":[{"level":3,"title":"文本颜色","slug":"文本颜色","link":"#文本颜色","children":[]},{"level":3,"title":"文本背景色","slug":"文本背景色","link":"#文本背景色","children":[]}]},{"level":2,"title":"实现自定义设置输入日志颜色","slug":"实现自定义设置输入日志颜色","link":"#实现自定义设置输入日志颜色","children":[]}],"relativePath":"knowledge-deposition/GoLang/Logger/Logrus/基础用法.md"}'),r={name:"knowledge-deposition/GoLang/Logger/Logrus/基础用法.md"},D=l("",50),F=[D];function y(C,A,i,u,d,g){return a(),n("div",null,F)}const f=s(r,[["render",y]]);export{m as __pageData,f as default};
diff --git "a/assets/knowledge-deposition_GoLang_Logger_Logrus_\346\227\245\345\277\227\345\210\206\345\211\262.md.7ac92ceb.js" "b/assets/knowledge-deposition_GoLang_Logger_Logrus_\346\227\245\345\277\227\345\210\206\345\211\262.md.dd69bf24.js"
similarity index 99%
rename from "assets/knowledge-deposition_GoLang_Logger_Logrus_\346\227\245\345\277\227\345\210\206\345\211\262.md.7ac92ceb.js"
rename to "assets/knowledge-deposition_GoLang_Logger_Logrus_\346\227\245\345\277\227\345\210\206\345\211\262.md.dd69bf24.js"
index 729c9533..cb2e0b29 100644
--- "a/assets/knowledge-deposition_GoLang_Logger_Logrus_\346\227\245\345\277\227\345\210\206\345\211\262.md.7ac92ceb.js"
+++ "b/assets/knowledge-deposition_GoLang_Logger_Logrus_\346\227\245\345\277\227\345\210\206\345\211\262.md.dd69bf24.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"日志分割","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"knowledge-deposition/GoLang/Logger/Logrus/日志分割.md"}'),p={name:"knowledge-deposition/GoLang/Logger/Logrus/日志分割.md"},o=l(`

日志分割

功能

  • 根据设置的时间纬度切割日志,每个时间点都新创建一个文件夹

  • 单个日志文件超过一定大小就压缩成.gz文件

  • 只输出DEBUGERROR日志(想要定制也可以)

按照分钟切割生成logs文件目录如下

shell
logs
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"日志分割","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"knowledge-deposition/GoLang/Logger/Logrus/日志分割.md"}'),p={name:"knowledge-deposition/GoLang/Logger/Logrus/日志分割.md"},o=l(`

日志分割

功能

  • 根据设置的时间纬度切割日志,每个时间点都新创建一个文件夹

  • 单个日志文件超过一定大小就压缩成.gz文件

  • 只输出DEBUGERROR日志(想要定制也可以)

按照分钟切割生成logs文件目录如下

shell
logs
 ├── debug
    ├── 202308232347
    │   ├── 202308232347-debug-0.log.gz
diff --git "a/assets/knowledge-deposition_GoLang_Logger_Logrus_\346\227\245\345\277\227\345\210\206\345\211\262.md.7ac92ceb.lean.js" "b/assets/knowledge-deposition_GoLang_Logger_Logrus_\346\227\245\345\277\227\345\210\206\345\211\262.md.dd69bf24.lean.js"
similarity index 85%
rename from "assets/knowledge-deposition_GoLang_Logger_Logrus_\346\227\245\345\277\227\345\210\206\345\211\262.md.7ac92ceb.lean.js"
rename to "assets/knowledge-deposition_GoLang_Logger_Logrus_\346\227\245\345\277\227\345\210\206\345\211\262.md.dd69bf24.lean.js"
index 41c08bbb..916de087 100644
--- "a/assets/knowledge-deposition_GoLang_Logger_Logrus_\346\227\245\345\277\227\345\210\206\345\211\262.md.7ac92ceb.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_Logger_Logrus_\346\227\245\345\277\227\345\210\206\345\211\262.md.dd69bf24.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"日志分割","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"knowledge-deposition/GoLang/Logger/Logrus/日志分割.md"}'),p={name:"knowledge-deposition/GoLang/Logger/Logrus/日志分割.md"},o=l("",7),t=[o];function e(c,r,D,y,C,F){return a(),n("div",null,t)}const u=s(p,[["render",e]]);export{i as __pageData,u as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"日志分割","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"knowledge-deposition/GoLang/Logger/Logrus/日志分割.md"}'),p={name:"knowledge-deposition/GoLang/Logger/Logrus/日志分割.md"},o=l("",7),t=[o];function e(c,r,D,y,C,F){return a(),n("div",null,t)}const u=s(p,[["render",e]]);export{i as __pageData,u as default};
diff --git "a/assets/knowledge-deposition_GoLang_Logger_Zap_zap\344\275\277\347\224\250.md.ba025bb4.js" "b/assets/knowledge-deposition_GoLang_Logger_Zap_zap\344\275\277\347\224\250.md.49627403.js"
similarity index 99%
rename from "assets/knowledge-deposition_GoLang_Logger_Zap_zap\344\275\277\347\224\250.md.ba025bb4.js"
rename to "assets/knowledge-deposition_GoLang_Logger_Zap_zap\344\275\277\347\224\250.md.49627403.js"
index 860b21b2..e149f461 100644
--- "a/assets/knowledge-deposition_GoLang_Logger_Zap_zap\344\275\277\347\224\250.md.ba025bb4.js"
+++ "b/assets/knowledge-deposition_GoLang_Logger_Zap_zap\344\275\277\347\224\250.md.49627403.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"zap使用","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"日志记录器","slug":"日志记录器","link":"#日志记录器","children":[]},{"level":2,"title":"基础用法","slug":"基础用法","link":"#基础用法","children":[]},{"level":2,"title":"定制Logger","slug":"定制logger","link":"#定制logger","children":[{"level":3,"title":"将日志写入文件并在控制台打印","slug":"将日志写入文件并在控制台打印","link":"#将日志写入文件并在控制台打印","children":[]},{"level":3,"title":"将error日志单独生成文件","slug":"将error日志单独生成文件","link":"#将error日志单独生成文件","children":[]},{"level":3,"title":"日志切割归档","slug":"日志切割归档","link":"#日志切割归档","children":[]}]},{"level":2,"title":"将zap集成到gin中","slug":"将zap集成到gin中","link":"#将zap集成到gin中","children":[{"level":3,"title":"完整代码","slug":"完整代码","link":"#完整代码","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/Logger/Zap/zap使用.md"}'),o={name:"knowledge-deposition/GoLang/Logger/Zap/zap使用.md"},p=l(`

zap使用

zapUber开发的一款高性能、结构化日志库,以其极低的内存分配和CPU消耗而著称

下载依赖

shell
go get -u go.uber.org/zap
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"zap使用","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"日志记录器","slug":"日志记录器","link":"#日志记录器","children":[]},{"level":2,"title":"基础用法","slug":"基础用法","link":"#基础用法","children":[]},{"level":2,"title":"定制Logger","slug":"定制logger","link":"#定制logger","children":[{"level":3,"title":"将日志写入文件并在控制台打印","slug":"将日志写入文件并在控制台打印","link":"#将日志写入文件并在控制台打印","children":[]},{"level":3,"title":"将error日志单独生成文件","slug":"将error日志单独生成文件","link":"#将error日志单独生成文件","children":[]},{"level":3,"title":"日志切割归档","slug":"日志切割归档","link":"#日志切割归档","children":[]}]},{"level":2,"title":"将zap集成到gin中","slug":"将zap集成到gin中","link":"#将zap集成到gin中","children":[{"level":3,"title":"完整代码","slug":"完整代码","link":"#完整代码","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/Logger/Zap/zap使用.md"}'),o={name:"knowledge-deposition/GoLang/Logger/Zap/zap使用.md"},p=l(`

zap使用

zapUber开发的一款高性能、结构化日志库,以其极低的内存分配和CPU消耗而著称

下载依赖

shell
go get -u go.uber.org/zap
 

日志记录器

zap提供了两种日志记录器:LoggerSugaredLogger,它们在性能易用性方面有所不同

  • *zap.Logger:提供了更为结构化且性能更高的日志记录。它使用强类型的API,在编译时就能获得类型安全检测,但是使用起来稍微复杂一些。它非常适合需要高性能和强类型的场景。使用*zap.Logger时,需要明确日志字段的类型
Go
logger.Info("failed to fetch URL",
     zap.String("url", url),
     zap.Int("attempt", 3),
diff --git "a/assets/knowledge-deposition_GoLang_Logger_Zap_zap\344\275\277\347\224\250.md.ba025bb4.lean.js" "b/assets/knowledge-deposition_GoLang_Logger_Zap_zap\344\275\277\347\224\250.md.49627403.lean.js"
similarity index 95%
rename from "assets/knowledge-deposition_GoLang_Logger_Zap_zap\344\275\277\347\224\250.md.ba025bb4.lean.js"
rename to "assets/knowledge-deposition_GoLang_Logger_Zap_zap\344\275\277\347\224\250.md.49627403.lean.js"
index 23f4df34..097c00fd 100644
--- "a/assets/knowledge-deposition_GoLang_Logger_Zap_zap\344\275\277\347\224\250.md.ba025bb4.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_Logger_Zap_zap\344\275\277\347\224\250.md.49627403.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"zap使用","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"日志记录器","slug":"日志记录器","link":"#日志记录器","children":[]},{"level":2,"title":"基础用法","slug":"基础用法","link":"#基础用法","children":[]},{"level":2,"title":"定制Logger","slug":"定制logger","link":"#定制logger","children":[{"level":3,"title":"将日志写入文件并在控制台打印","slug":"将日志写入文件并在控制台打印","link":"#将日志写入文件并在控制台打印","children":[]},{"level":3,"title":"将error日志单独生成文件","slug":"将error日志单独生成文件","link":"#将error日志单独生成文件","children":[]},{"level":3,"title":"日志切割归档","slug":"日志切割归档","link":"#日志切割归档","children":[]}]},{"level":2,"title":"将zap集成到gin中","slug":"将zap集成到gin中","link":"#将zap集成到gin中","children":[{"level":3,"title":"完整代码","slug":"完整代码","link":"#完整代码","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/Logger/Zap/zap使用.md"}'),o={name:"knowledge-deposition/GoLang/Logger/Zap/zap使用.md"},p=l("",64),t=[p];function e(c,D,r,F,y,A){return a(),n("div",null,t)}const u=s(o,[["render",e]]);export{i as __pageData,u as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"zap使用","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"日志记录器","slug":"日志记录器","link":"#日志记录器","children":[]},{"level":2,"title":"基础用法","slug":"基础用法","link":"#基础用法","children":[]},{"level":2,"title":"定制Logger","slug":"定制logger","link":"#定制logger","children":[{"level":3,"title":"将日志写入文件并在控制台打印","slug":"将日志写入文件并在控制台打印","link":"#将日志写入文件并在控制台打印","children":[]},{"level":3,"title":"将error日志单独生成文件","slug":"将error日志单独生成文件","link":"#将error日志单独生成文件","children":[]},{"level":3,"title":"日志切割归档","slug":"日志切割归档","link":"#日志切割归档","children":[]}]},{"level":2,"title":"将zap集成到gin中","slug":"将zap集成到gin中","link":"#将zap集成到gin中","children":[{"level":3,"title":"完整代码","slug":"完整代码","link":"#完整代码","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/Logger/Zap/zap使用.md"}'),o={name:"knowledge-deposition/GoLang/Logger/Zap/zap使用.md"},p=l("",64),t=[p];function e(c,D,r,F,y,A){return a(),n("div",null,t)}const u=s(o,[["render",e]]);export{i as __pageData,u as default};
diff --git "a/assets/knowledge-deposition_GoLang_\345\212\240\345\257\206_AES\345\212\240\345\257\206.md.da682d72.js" "b/assets/knowledge-deposition_GoLang_\345\212\240\345\257\206_AES\345\212\240\345\257\206.md.bfac1ae4.js"
similarity index 99%
rename from "assets/knowledge-deposition_GoLang_\345\212\240\345\257\206_AES\345\212\240\345\257\206.md.da682d72.js"
rename to "assets/knowledge-deposition_GoLang_\345\212\240\345\257\206_AES\345\212\240\345\257\206.md.bfac1ae4.js"
index 988d02ac..4c54e245 100644
--- "a/assets/knowledge-deposition_GoLang_\345\212\240\345\257\206_AES\345\212\240\345\257\206.md.da682d72.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\212\240\345\257\206_AES\345\212\240\345\257\206.md.bfac1ae4.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"AES加密","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"前端代码","slug":"前端代码","link":"#前端代码","children":[]},{"level":2,"title":"后端代码","slug":"后端代码","link":"#后端代码","children":[]},{"level":2,"title":"参考","slug":"参考","link":"#参考","children":[]}],"relativePath":"knowledge-deposition/GoLang/加密/AES加密.md"}'),p={name:"knowledge-deposition/GoLang/加密/AES加密.md"},o=l(`

AES加密

AES是常用的一种对称加密,加密和解密使用相同的key

记录前端实现AES加/解密,配合后端使用Go实现AES加/解密的过程

前端代码

  • 下载crypto-js
shell
pnpm install crypto-js
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"AES加密","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"前端代码","slug":"前端代码","link":"#前端代码","children":[]},{"level":2,"title":"后端代码","slug":"后端代码","link":"#后端代码","children":[]},{"level":2,"title":"参考","slug":"参考","link":"#参考","children":[]}],"relativePath":"knowledge-deposition/GoLang/加密/AES加密.md"}'),p={name:"knowledge-deposition/GoLang/加密/AES加密.md"},o=l(`

AES加密

AES是常用的一种对称加密,加密和解密使用相同的key

记录前端实现AES加/解密,配合后端使用Go实现AES加/解密的过程

前端代码

  • 下载crypto-js
shell
pnpm install crypto-js
 

前端实现

javascript
/**
  * AES 对称加密
  * 加密解密,加密的解密使用相同的key
diff --git "a/assets/knowledge-deposition_GoLang_\345\212\240\345\257\206_AES\345\212\240\345\257\206.md.da682d72.lean.js" "b/assets/knowledge-deposition_GoLang_\345\212\240\345\257\206_AES\345\212\240\345\257\206.md.bfac1ae4.lean.js"
similarity index 90%
rename from "assets/knowledge-deposition_GoLang_\345\212\240\345\257\206_AES\345\212\240\345\257\206.md.da682d72.lean.js"
rename to "assets/knowledge-deposition_GoLang_\345\212\240\345\257\206_AES\345\212\240\345\257\206.md.bfac1ae4.lean.js"
index 3900a715..77fba140 100644
--- "a/assets/knowledge-deposition_GoLang_\345\212\240\345\257\206_AES\345\212\240\345\257\206.md.da682d72.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\212\240\345\257\206_AES\345\212\240\345\257\206.md.bfac1ae4.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"AES加密","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"前端代码","slug":"前端代码","link":"#前端代码","children":[]},{"level":2,"title":"后端代码","slug":"后端代码","link":"#后端代码","children":[]},{"level":2,"title":"参考","slug":"参考","link":"#参考","children":[]}],"relativePath":"knowledge-deposition/GoLang/加密/AES加密.md"}'),p={name:"knowledge-deposition/GoLang/加密/AES加密.md"},o=l("",20),t=[o];function e(c,r,D,y,F,A){return a(),n("div",null,t)}const d=s(p,[["render",e]]);export{i as __pageData,d as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"AES加密","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"前端代码","slug":"前端代码","link":"#前端代码","children":[]},{"level":2,"title":"后端代码","slug":"后端代码","link":"#后端代码","children":[]},{"level":2,"title":"参考","slug":"参考","link":"#参考","children":[]}],"relativePath":"knowledge-deposition/GoLang/加密/AES加密.md"}'),p={name:"knowledge-deposition/GoLang/加密/AES加密.md"},o=l("",20),t=[o];function e(c,r,D,y,F,A){return a(),n("div",null,t)}const d=s(p,[["render",e]]);export{i as __pageData,d as default};
diff --git "a/assets/knowledge-deposition_GoLang_\345\212\240\345\257\206_RSA\345\212\240\345\257\206.md.2fd5c0ee.js" "b/assets/knowledge-deposition_GoLang_\345\212\240\345\257\206_RSA\345\212\240\345\257\206.md.c9b6bd36.js"
similarity index 99%
rename from "assets/knowledge-deposition_GoLang_\345\212\240\345\257\206_RSA\345\212\240\345\257\206.md.2fd5c0ee.js"
rename to "assets/knowledge-deposition_GoLang_\345\212\240\345\257\206_RSA\345\212\240\345\257\206.md.c9b6bd36.js"
index 39baf7a3..d4c5464c 100644
--- "a/assets/knowledge-deposition_GoLang_\345\212\240\345\257\206_RSA\345\212\240\345\257\206.md.2fd5c0ee.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\212\240\345\257\206_RSA\345\212\240\345\257\206.md.c9b6bd36.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"RSA","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"生成公钥和私钥","slug":"生成公钥和私钥","link":"#生成公钥和私钥","children":[]},{"level":2,"title":"前端代码","slug":"前端代码","link":"#前端代码","children":[]},{"level":2,"title":"后端代码","slug":"后端代码","link":"#后端代码","children":[]},{"level":2,"title":"参考","slug":"参考","link":"#参考","children":[]}],"relativePath":"knowledge-deposition/GoLang/加密/RSA加密.md"}'),p={name:"knowledge-deposition/GoLang/加密/RSA加密.md"},o=l(`

RSA

AES是常用的一种非对称加密,有公钥私钥,使用公钥加密可以通过私钥解密,同样使用私钥加密可以通过公钥解密

记录前端实现RSA加/解密,配合后端使用Go实现AES加/解密的过程

生成公钥和私钥

shell
# 生成1024位的RSA私钥:
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"RSA","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"生成公钥和私钥","slug":"生成公钥和私钥","link":"#生成公钥和私钥","children":[]},{"level":2,"title":"前端代码","slug":"前端代码","link":"#前端代码","children":[]},{"level":2,"title":"后端代码","slug":"后端代码","link":"#后端代码","children":[]},{"level":2,"title":"参考","slug":"参考","link":"#参考","children":[]}],"relativePath":"knowledge-deposition/GoLang/加密/RSA加密.md"}'),p={name:"knowledge-deposition/GoLang/加密/RSA加密.md"},o=l(`

RSA

AES是常用的一种非对称加密,有公钥私钥,使用公钥加密可以通过私钥解密,同样使用私钥加密可以通过公钥解密

记录前端实现RSA加/解密,配合后端使用Go实现AES加/解密的过程

生成公钥和私钥

shell
# 生成1024位的RSA私钥:
 openssl genrsa -out data/rsa_private_key.pem 1024
 
 # 根据私钥生成公钥:
diff --git "a/assets/knowledge-deposition_GoLang_\345\212\240\345\257\206_RSA\345\212\240\345\257\206.md.2fd5c0ee.lean.js" "b/assets/knowledge-deposition_GoLang_\345\212\240\345\257\206_RSA\345\212\240\345\257\206.md.c9b6bd36.lean.js"
similarity index 92%
rename from "assets/knowledge-deposition_GoLang_\345\212\240\345\257\206_RSA\345\212\240\345\257\206.md.2fd5c0ee.lean.js"
rename to "assets/knowledge-deposition_GoLang_\345\212\240\345\257\206_RSA\345\212\240\345\257\206.md.c9b6bd36.lean.js"
index 9e11d1ce..3ab18b6e 100644
--- "a/assets/knowledge-deposition_GoLang_\345\212\240\345\257\206_RSA\345\212\240\345\257\206.md.2fd5c0ee.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\212\240\345\257\206_RSA\345\212\240\345\257\206.md.c9b6bd36.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"RSA","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"生成公钥和私钥","slug":"生成公钥和私钥","link":"#生成公钥和私钥","children":[]},{"level":2,"title":"前端代码","slug":"前端代码","link":"#前端代码","children":[]},{"level":2,"title":"后端代码","slug":"后端代码","link":"#后端代码","children":[]},{"level":2,"title":"参考","slug":"参考","link":"#参考","children":[]}],"relativePath":"knowledge-deposition/GoLang/加密/RSA加密.md"}'),p={name:"knowledge-deposition/GoLang/加密/RSA加密.md"},o=l("",19),t=[o];function e(c,r,D,y,F,A){return a(),n("div",null,t)}const u=s(p,[["render",e]]);export{i as __pageData,u as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"RSA","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"生成公钥和私钥","slug":"生成公钥和私钥","link":"#生成公钥和私钥","children":[]},{"level":2,"title":"前端代码","slug":"前端代码","link":"#前端代码","children":[]},{"level":2,"title":"后端代码","slug":"后端代码","link":"#后端代码","children":[]},{"level":2,"title":"参考","slug":"参考","link":"#参考","children":[]}],"relativePath":"knowledge-deposition/GoLang/加密/RSA加密.md"}'),p={name:"knowledge-deposition/GoLang/加密/RSA加密.md"},o=l("",19),t=[o];function e(c,r,D,y,F,A){return a(),n("div",null,t)}const u=s(p,[["render",e]]);export{i as __pageData,u as default};
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_Context.md.7de14551.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_Context.md.f33dae97.js"
similarity index 99%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_Context.md.7de14551.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_Context.md.f33dae97.js"
index ce052a08..08176c6b 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_Context.md.7de14551.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_Context.md.f33dae97.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"Context","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"概念","slug":"概念","link":"#概念","children":[]},{"level":2,"title":"新建Context","slug":"新建context","link":"#新建context","children":[]},{"level":2,"title":"WithTimeout","slug":"withtimeout","link":"#withtimeout","children":[{"level":3,"title":"Timeout的继承问题","slug":"timeout的继承问题","link":"#timeout的继承问题","children":[]}]},{"level":2,"title":"WithCancel","slug":"withcancel","link":"#withcancel","children":[]},{"level":2,"title":"WithValue","slug":"withvalue","link":"#withvalue","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/Context.md"}'),o={name:"knowledge-deposition/GoLang/基础知识/Context.md"},p=l(`

Context

概念

  • Context本质上是一个接口
Go
type Context interface {
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"Context","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"概念","slug":"概念","link":"#概念","children":[]},{"level":2,"title":"新建Context","slug":"新建context","link":"#新建context","children":[]},{"level":2,"title":"WithTimeout","slug":"withtimeout","link":"#withtimeout","children":[{"level":3,"title":"Timeout的继承问题","slug":"timeout的继承问题","link":"#timeout的继承问题","children":[]}]},{"level":2,"title":"WithCancel","slug":"withcancel","link":"#withcancel","children":[]},{"level":2,"title":"WithValue","slug":"withvalue","link":"#withvalue","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/Context.md"}'),o={name:"knowledge-deposition/GoLang/基础知识/Context.md"},p=l(`

Context

概念

  • Context本质上是一个接口
Go
type Context interface {
     Deadline() (deadline time.Time, ok bool)
     Done() <-chan struct{}
     Err() error
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_Context.md.7de14551.lean.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_Context.md.f33dae97.lean.js"
similarity index 93%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_Context.md.7de14551.lean.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_Context.md.f33dae97.lean.js"
index 8819cc6e..0a7b6deb 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_Context.md.7de14551.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_Context.md.f33dae97.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"Context","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"概念","slug":"概念","link":"#概念","children":[]},{"level":2,"title":"新建Context","slug":"新建context","link":"#新建context","children":[]},{"level":2,"title":"WithTimeout","slug":"withtimeout","link":"#withtimeout","children":[{"level":3,"title":"Timeout的继承问题","slug":"timeout的继承问题","link":"#timeout的继承问题","children":[]}]},{"level":2,"title":"WithCancel","slug":"withcancel","link":"#withcancel","children":[]},{"level":2,"title":"WithValue","slug":"withvalue","link":"#withvalue","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/Context.md"}'),o={name:"knowledge-deposition/GoLang/基础知识/Context.md"},p=l("",30),e=[p];function t(c,D,r,F,y,A){return a(),n("div",null,e)}const d=s(o,[["render",t]]);export{i as __pageData,d as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"Context","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"概念","slug":"概念","link":"#概念","children":[]},{"level":2,"title":"新建Context","slug":"新建context","link":"#新建context","children":[]},{"level":2,"title":"WithTimeout","slug":"withtimeout","link":"#withtimeout","children":[{"level":3,"title":"Timeout的继承问题","slug":"timeout的继承问题","link":"#timeout的继承问题","children":[]}]},{"level":2,"title":"WithCancel","slug":"withcancel","link":"#withcancel","children":[]},{"level":2,"title":"WithValue","slug":"withvalue","link":"#withvalue","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/Context.md"}'),o={name:"knowledge-deposition/GoLang/基础知识/Context.md"},p=l("",30),e=[p];function t(c,D,r,F,y,A){return a(),n("div",null,e)}const d=s(o,[["render",t]]);export{i as __pageData,d as default};
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_Select.md.f521220c.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_Select.md.2a462f49.js"
similarity index 99%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_Select.md.f521220c.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_Select.md.2a462f49.js"
index 3cc8fd3a..83605bc7 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_Select.md.f521220c.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_Select.md.2a462f49.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"Select","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"select应用","slug":"select应用","link":"#select应用","children":[]},{"level":2,"title":"死锁","slug":"死锁","link":"#死锁","children":[]},{"level":2,"title":"select超时处理","slug":"select超时处理","link":"#select超时处理","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/Select.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/Select.md"},o=l(`

Select

  • select语句用在多个发送/接收通道操作中进行选择
    • select语句会一直阻塞,直到发送/接收操作准备就绪
    • 如果有多个通道操作准备完毕, select随机地选取其中之一执行
  • select里的case表达式只能对通道进行操作,不管是往通道写入数据,还是从通道读出数据

语法如下

Go
select {
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"Select","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"select应用","slug":"select应用","link":"#select应用","children":[]},{"level":2,"title":"死锁","slug":"死锁","link":"#死锁","children":[]},{"level":2,"title":"select超时处理","slug":"select超时处理","link":"#select超时处理","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/Select.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/Select.md"},o=l(`

Select

  • select语句用在多个发送/接收通道操作中进行选择
    • select语句会一直阻塞,直到发送/接收操作准备就绪
    • 如果有多个通道操作准备完毕, select随机地选取其中之一执行
  • select里的case表达式只能对通道进行操作,不管是往通道写入数据,还是从通道读出数据

语法如下

Go
select {
   case expression1:
     ...
   case expression2:
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_Select.md.f521220c.lean.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_Select.md.2a462f49.lean.js"
similarity index 90%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_Select.md.f521220c.lean.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_Select.md.2a462f49.lean.js"
index 5e1cd5ad..ae9a3613 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_Select.md.f521220c.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_Select.md.2a462f49.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"Select","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"select应用","slug":"select应用","link":"#select应用","children":[]},{"level":2,"title":"死锁","slug":"死锁","link":"#死锁","children":[]},{"level":2,"title":"select超时处理","slug":"select超时处理","link":"#select超时处理","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/Select.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/Select.md"},o=l("",25),e=[o];function t(c,D,r,F,y,A){return a(),n("div",null,e)}const d=s(p,[["render",t]]);export{i as __pageData,d as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"Select","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"select应用","slug":"select应用","link":"#select应用","children":[]},{"level":2,"title":"死锁","slug":"死锁","link":"#死锁","children":[]},{"level":2,"title":"select超时处理","slug":"select超时处理","link":"#select超时处理","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/Select.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/Select.md"},o=l("",25),e=[o];function t(c,D,r,F,y,A){return a(),n("div",null,e)}const d=s(p,[["render",t]]);export{i as __pageData,d as default};
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_Test.md.1460987b.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_Test.md.bfc61dd9.js"
similarity index 99%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_Test.md.1460987b.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_Test.md.bfc61dd9.js"
index fc3ab63b..32b313a3 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_Test.md.1460987b.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_Test.md.bfc61dd9.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"Test","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"单元测试","slug":"单元测试","link":"#单元测试","children":[{"level":3,"title":"简单测试","slug":"简单测试","link":"#简单测试","children":[]},{"level":3,"title":"子测试","slug":"子测试","link":"#子测试","children":[]},{"level":3,"title":"表驱动测试","slug":"表驱动测试","link":"#表驱动测试","children":[]},{"level":3,"title":"测试覆盖率","slug":"测试覆盖率","link":"#测试覆盖率","children":[]}]},{"level":2,"title":"基准测试","slug":"基准测试","link":"#基准测试","children":[{"level":3,"title":"常用的基准测试命令","slug":"常用的基准测试命令","link":"#常用的基准测试命令","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/基础知识/Test.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/Test.md"},o=l(`

Test

Go中,可以使用内置的测试框架来进行单元测试基准测试,帮助开发者编写、运行和管理测试代码,以确保代码的质量和稳定性

单元测试

简单测试

Go中编写一个简单测试的流程:

  1. 创建测试文件:测试文件应该与被测试的代码所在的文件放在同一个包中,测试文件需要以_test.go结尾

例如:要测试名为foo文件中的函数,需要创建一个名为foo_test.go的文件

  1. 编写测试函数:测试函数都要以Test开头,Test后面跟被测试函数的名称,参数是t *testing.T

例如:要测试名为foo的函数,可以创建一个名为TestFoo的测试函数,func TestFoo(t *testing.T)

  1. 编写测试代码:测试函数中需要编写测试代码,用来验证被测试函数的行为是否符合预期。

测试代码中,应该使用t.Errort.Fail等函数来报告测试失败结果

  1. 运行测试代码:

在命令行中使用go test命令来运行测试,如果测试通过,将输出PASS,如果测试失败,将输出失败的测试用例的详细信息

代码示例

代码目录结构

shell
.test-related
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"Test","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"单元测试","slug":"单元测试","link":"#单元测试","children":[{"level":3,"title":"简单测试","slug":"简单测试","link":"#简单测试","children":[]},{"level":3,"title":"子测试","slug":"子测试","link":"#子测试","children":[]},{"level":3,"title":"表驱动测试","slug":"表驱动测试","link":"#表驱动测试","children":[]},{"level":3,"title":"测试覆盖率","slug":"测试覆盖率","link":"#测试覆盖率","children":[]}]},{"level":2,"title":"基准测试","slug":"基准测试","link":"#基准测试","children":[{"level":3,"title":"常用的基准测试命令","slug":"常用的基准测试命令","link":"#常用的基准测试命令","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/基础知识/Test.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/Test.md"},o=l(`

Test

Go中,可以使用内置的测试框架来进行单元测试基准测试,帮助开发者编写、运行和管理测试代码,以确保代码的质量和稳定性

单元测试

简单测试

Go中编写一个简单测试的流程:

  1. 创建测试文件:测试文件应该与被测试的代码所在的文件放在同一个包中,测试文件需要以_test.go结尾

例如:要测试名为foo文件中的函数,需要创建一个名为foo_test.go的文件

  1. 编写测试函数:测试函数都要以Test开头,Test后面跟被测试函数的名称,参数是t *testing.T

例如:要测试名为foo的函数,可以创建一个名为TestFoo的测试函数,func TestFoo(t *testing.T)

  1. 编写测试代码:测试函数中需要编写测试代码,用来验证被测试函数的行为是否符合预期。

测试代码中,应该使用t.Errort.Fail等函数来报告测试失败结果

  1. 运行测试代码:

在命令行中使用go test命令来运行测试,如果测试通过,将输出PASS,如果测试失败,将输出失败的测试用例的详细信息

代码示例

代码目录结构

shell
.test-related
 ├── foo.go
 └── foo_test.go
 
Go
// foo.go
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_Test.md.1460987b.lean.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_Test.md.bfc61dd9.lean.js"
similarity index 94%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_Test.md.1460987b.lean.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_Test.md.bfc61dd9.lean.js"
index c2b13522..85fd5725 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_Test.md.1460987b.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_Test.md.bfc61dd9.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"Test","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"单元测试","slug":"单元测试","link":"#单元测试","children":[{"level":3,"title":"简单测试","slug":"简单测试","link":"#简单测试","children":[]},{"level":3,"title":"子测试","slug":"子测试","link":"#子测试","children":[]},{"level":3,"title":"表驱动测试","slug":"表驱动测试","link":"#表驱动测试","children":[]},{"level":3,"title":"测试覆盖率","slug":"测试覆盖率","link":"#测试覆盖率","children":[]}]},{"level":2,"title":"基准测试","slug":"基准测试","link":"#基准测试","children":[{"level":3,"title":"常用的基准测试命令","slug":"常用的基准测试命令","link":"#常用的基准测试命令","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/基础知识/Test.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/Test.md"},o=l("",51),e=[o];function t(c,r,D,C,y,F){return a(),n("div",null,e)}const d=s(p,[["render",t]]);export{i as __pageData,d as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"Test","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"单元测试","slug":"单元测试","link":"#单元测试","children":[{"level":3,"title":"简单测试","slug":"简单测试","link":"#简单测试","children":[]},{"level":3,"title":"子测试","slug":"子测试","link":"#子测试","children":[]},{"level":3,"title":"表驱动测试","slug":"表驱动测试","link":"#表驱动测试","children":[]},{"level":3,"title":"测试覆盖率","slug":"测试覆盖率","link":"#测试覆盖率","children":[]}]},{"level":2,"title":"基准测试","slug":"基准测试","link":"#基准测试","children":[{"level":3,"title":"常用的基准测试命令","slug":"常用的基准测试命令","link":"#常用的基准测试命令","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/基础知识/Test.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/Test.md"},o=l("",51),e=[o];function t(c,r,D,C,y,F){return a(),n("div",null,e)}const d=s(p,[["render",t]]);export{i as __pageData,d as default};
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_fmt\350\276\223\345\207\272\345\220\253\344\271\211.md.dd54b6ea.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_fmt\350\276\223\345\207\272\345\220\253\344\271\211.md.fe596fc2.js"
similarity index 99%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_fmt\350\276\223\345\207\272\345\220\253\344\271\211.md.dd54b6ea.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_fmt\350\276\223\345\207\272\345\220\253\344\271\211.md.fe596fc2.js"
index 8d6fd5e4..31e709e2 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_fmt\350\276\223\345\207\272\345\220\253\344\271\211.md.dd54b6ea.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_fmt\350\276\223\345\207\272\345\220\253\344\271\211.md.fe596fc2.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as e,o as n,e as a}from"./app.7354b8c5.js";const C=JSON.parse('{"title":"fmt使用","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"占位符含义","slug":"占位符含义","link":"#占位符含义","children":[]},{"level":2,"title":"方法","slug":"方法","link":"#方法","children":[{"level":3,"title":"fmt.Fprintf","slug":"fmt-fprintf","link":"#fmt-fprintf","children":[]},{"level":3,"title":"fmt.Println","slug":"fmt-println","link":"#fmt-println","children":[]},{"level":3,"title":"fmt.Printf","slug":"fmt-printf","link":"#fmt-printf","children":[]},{"level":3,"title":"fmt.Sprintf","slug":"fmt-sprintf","link":"#fmt-sprintf","children":[]},{"level":3,"title":"总结","slug":"总结","link":"#总结","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/基础知识/fmt输出含义.md"}'),t={name:"knowledge-deposition/GoLang/基础知识/fmt输出含义.md"},o=a(`

fmt使用

占位符含义

格式含义
%b一个二进制整数值(基数为2),或者是一个(高级的)用科学计数法表示的指数为2的浮点数
%c字符型,可以把输入的数字按照ASCII码相应转换为对应的字符
%d一个十进制数值(基数为10)
%f标准记数法表示的浮点数或者复数值
%o一个以八进制表示的数字(基数为8)
%p十六进制(基数为16)表示的一个值的地址,前缀为0x,字母使用小写的a-f表示
%q使用Go语法以及必须时使用转义,以双引号括起来的字符串或者字节切片[]byte,或者是以单引号括起来的数字
%s字符串,输出字符串中的字符直至字符串中的空字符(字符串以’\\0‘结尾,这个’\\0’即空字符)
%ttrue或者false输出的布尔值
%T使用Go语法输出的值的类型
%v输出变量的
%x十六进制表示的整型值(基数为十六),数字a-f使用小写表示
%X十六进制表示的整型值(基数为十六),数字A-F使用大写表示

方法

fmt.Fprintf

  • Fprintf函数将格式化的字符串写入io.Writer接口实现(如标准输出文件等)
Go
func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error)
+import{_ as s,c as e,o as n,e as a}from"./app.4a806fb4.js";const C=JSON.parse('{"title":"fmt使用","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"占位符含义","slug":"占位符含义","link":"#占位符含义","children":[]},{"level":2,"title":"方法","slug":"方法","link":"#方法","children":[{"level":3,"title":"fmt.Fprintf","slug":"fmt-fprintf","link":"#fmt-fprintf","children":[]},{"level":3,"title":"fmt.Println","slug":"fmt-println","link":"#fmt-println","children":[]},{"level":3,"title":"fmt.Printf","slug":"fmt-printf","link":"#fmt-printf","children":[]},{"level":3,"title":"fmt.Sprintf","slug":"fmt-sprintf","link":"#fmt-sprintf","children":[]},{"level":3,"title":"总结","slug":"总结","link":"#总结","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/基础知识/fmt输出含义.md"}'),t={name:"knowledge-deposition/GoLang/基础知识/fmt输出含义.md"},o=a(`

fmt使用

占位符含义

格式含义
%b一个二进制整数值(基数为2),或者是一个(高级的)用科学计数法表示的指数为2的浮点数
%c字符型,可以把输入的数字按照ASCII码相应转换为对应的字符
%d一个十进制数值(基数为10)
%f标准记数法表示的浮点数或者复数值
%o一个以八进制表示的数字(基数为8)
%p十六进制(基数为16)表示的一个值的地址,前缀为0x,字母使用小写的a-f表示
%q使用Go语法以及必须时使用转义,以双引号括起来的字符串或者字节切片[]byte,或者是以单引号括起来的数字
%s字符串,输出字符串中的字符直至字符串中的空字符(字符串以’\\0‘结尾,这个’\\0’即空字符)
%ttrue或者false输出的布尔值
%T使用Go语法输出的值的类型
%v输出变量的
%x十六进制表示的整型值(基数为十六),数字a-f使用小写表示
%X十六进制表示的整型值(基数为十六),数字A-F使用大写表示

方法

fmt.Fprintf

  • Fprintf函数将格式化的字符串写入io.Writer接口实现(如标准输出文件等)
Go
func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error)
 

使用示例

Go
fmt.Fprintf(os.Stdout, "Hello, %s!\\n", "Go")
 

fmt.Println

  • Println函数将给定的参数格式化为字符串并输出到标准输出,并在输出后添加一个换行符
Go
func Println(a ...interface{}) (n int, err error)
 

使用示例

Go
fmt.Println("Hello, Go!")
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_fmt\350\276\223\345\207\272\345\220\253\344\271\211.md.dd54b6ea.lean.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_fmt\350\276\223\345\207\272\345\220\253\344\271\211.md.fe596fc2.lean.js"
similarity index 93%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_fmt\350\276\223\345\207\272\345\220\253\344\271\211.md.dd54b6ea.lean.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_fmt\350\276\223\345\207\272\345\220\253\344\271\211.md.fe596fc2.lean.js"
index e7ca695c..89facb67 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_fmt\350\276\223\345\207\272\345\220\253\344\271\211.md.dd54b6ea.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_fmt\350\276\223\345\207\272\345\220\253\344\271\211.md.fe596fc2.lean.js"
@@ -1 +1 @@
-import{_ as s,c as e,o as n,e as a}from"./app.7354b8c5.js";const C=JSON.parse('{"title":"fmt使用","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"占位符含义","slug":"占位符含义","link":"#占位符含义","children":[]},{"level":2,"title":"方法","slug":"方法","link":"#方法","children":[{"level":3,"title":"fmt.Fprintf","slug":"fmt-fprintf","link":"#fmt-fprintf","children":[]},{"level":3,"title":"fmt.Println","slug":"fmt-println","link":"#fmt-println","children":[]},{"level":3,"title":"fmt.Printf","slug":"fmt-printf","link":"#fmt-printf","children":[]},{"level":3,"title":"fmt.Sprintf","slug":"fmt-sprintf","link":"#fmt-sprintf","children":[]},{"level":3,"title":"总结","slug":"总结","link":"#总结","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/基础知识/fmt输出含义.md"}'),t={name:"knowledge-deposition/GoLang/基础知识/fmt输出含义.md"},o=a("",26),l=[o];function p(c,r,d,i,D,y){return n(),e("div",null,l)}const A=s(t,[["render",p]]);export{C as __pageData,A as default};
+import{_ as s,c as e,o as n,e as a}from"./app.4a806fb4.js";const C=JSON.parse('{"title":"fmt使用","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"占位符含义","slug":"占位符含义","link":"#占位符含义","children":[]},{"level":2,"title":"方法","slug":"方法","link":"#方法","children":[{"level":3,"title":"fmt.Fprintf","slug":"fmt-fprintf","link":"#fmt-fprintf","children":[]},{"level":3,"title":"fmt.Println","slug":"fmt-println","link":"#fmt-println","children":[]},{"level":3,"title":"fmt.Printf","slug":"fmt-printf","link":"#fmt-printf","children":[]},{"level":3,"title":"fmt.Sprintf","slug":"fmt-sprintf","link":"#fmt-sprintf","children":[]},{"level":3,"title":"总结","slug":"总结","link":"#总结","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/基础知识/fmt输出含义.md"}'),t={name:"knowledge-deposition/GoLang/基础知识/fmt输出含义.md"},o=a("",26),l=[o];function p(c,r,d,i,D,y){return n(),e("div",null,l)}const A=s(t,[["render",p]]);export{C as __pageData,A as default};
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_json\345\272\217\345\210\227\345\214\226.md.50c9b73c.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_json\345\272\217\345\210\227\345\214\226.md.dfd6a49a.js"
similarity index 99%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_json\345\272\217\345\210\227\345\214\226.md.50c9b73c.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_json\345\272\217\345\210\227\345\214\226.md.dfd6a49a.js"
index 1670e4dd..e4348f5a 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_json\345\272\217\345\210\227\345\214\226.md.50c9b73c.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_json\345\272\217\345\210\227\345\214\226.md.dfd6a49a.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"json序列化","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"json.Marshal","slug":"json-marshal","link":"#json-marshal","children":[]},{"level":2,"title":"json.Unmarshal","slug":"json-unmarshal","link":"#json-unmarshal","children":[]},{"level":2,"title":"sonic","slug":"sonic","link":"#sonic","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/json序列化.md"}'),o={name:"knowledge-deposition/GoLang/基础知识/json序列化.md"},p=l(`

json序列化

json.Marshal

  • 可以使用json.Marshal方法将结构体转换为二进制流
Go
func json.Marshal(v any) ([]byte, error)
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"json序列化","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"json.Marshal","slug":"json-marshal","link":"#json-marshal","children":[]},{"level":2,"title":"json.Unmarshal","slug":"json-unmarshal","link":"#json-unmarshal","children":[]},{"level":2,"title":"sonic","slug":"sonic","link":"#sonic","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/json序列化.md"}'),o={name:"knowledge-deposition/GoLang/基础知识/json序列化.md"},p=l(`

json序列化

json.Marshal

  • 可以使用json.Marshal方法将结构体转换为二进制流
Go
func json.Marshal(v any) ([]byte, error)
 

代码示例

Go
package main
 
 import (
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_json\345\272\217\345\210\227\345\214\226.md.50c9b73c.lean.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_json\345\272\217\345\210\227\345\214\226.md.dfd6a49a.lean.js"
similarity index 91%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_json\345\272\217\345\210\227\345\214\226.md.50c9b73c.lean.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_json\345\272\217\345\210\227\345\214\226.md.dfd6a49a.lean.js"
index 079fc3bf..73e89ede 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_json\345\272\217\345\210\227\345\214\226.md.50c9b73c.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_json\345\272\217\345\210\227\345\214\226.md.dfd6a49a.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"json序列化","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"json.Marshal","slug":"json-marshal","link":"#json-marshal","children":[]},{"level":2,"title":"json.Unmarshal","slug":"json-unmarshal","link":"#json-unmarshal","children":[]},{"level":2,"title":"sonic","slug":"sonic","link":"#sonic","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/json序列化.md"}'),o={name:"knowledge-deposition/GoLang/基础知识/json序列化.md"},p=l("",13),t=[p];function e(c,r,D,y,F,C){return a(),n("div",null,t)}const u=s(o,[["render",e]]);export{i as __pageData,u as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"json序列化","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"json.Marshal","slug":"json-marshal","link":"#json-marshal","children":[]},{"level":2,"title":"json.Unmarshal","slug":"json-unmarshal","link":"#json-unmarshal","children":[]},{"level":2,"title":"sonic","slug":"sonic","link":"#sonic","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/json序列化.md"}'),o={name:"knowledge-deposition/GoLang/基础知识/json序列化.md"},p=l("",13),t=[p];function e(c,r,D,y,F,C){return a(),n("div",null,t)}const u=s(o,[["render",e]]);export{i as __pageData,u as default};
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_strings\345\214\205.md.c94073bc.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_strings\345\214\205.md.377dc095.js"
similarity index 99%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_strings\345\214\205.md.c94073bc.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_strings\345\214\205.md.377dc095.js"
index fee9c619..1b0d0c28 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_strings\345\214\205.md.c94073bc.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_strings\345\214\205.md.377dc095.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const C=JSON.parse('{"title":"strings包","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"判断前缀/后缀","slug":"判断前缀-后缀","link":"#判断前缀-后缀","children":[{"level":3,"title":"HasPrefix","slug":"hasprefix","link":"#hasprefix","children":[]},{"level":3,"title":"HasSuffix","slug":"hassuffix","link":"#hassuffix","children":[]}]},{"level":2,"title":"字符串包含","slug":"字符串包含","link":"#字符串包含","children":[]},{"level":2,"title":"字符串索引","slug":"字符串索引","link":"#字符串索引","children":[{"level":3,"title":"Index","slug":"index","link":"#index","children":[]},{"level":3,"title":"LastIndex","slug":"lastindex","link":"#lastindex","children":[]}]},{"level":2,"title":"字符串替换","slug":"字符串替换","link":"#字符串替换","children":[]},{"level":2,"title":"统计字符串出现次数","slug":"统计字符串出现次数","link":"#统计字符串出现次数","children":[]},{"level":2,"title":"重复字符串","slug":"重复字符串","link":"#重复字符串","children":[]},{"level":2,"title":"转换大小写","slug":"转换大小写","link":"#转换大小写","children":[]},{"level":2,"title":"字符串格式化","slug":"字符串格式化","link":"#字符串格式化","children":[]},{"level":2,"title":"字符串切割","slug":"字符串切割","link":"#字符串切割","children":[]},{"level":2,"title":"拼接slice到字符串","slug":"拼接slice到字符串","link":"#拼接slice到字符串","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/strings包.md"}'),o={name:"knowledge-deposition/GoLang/基础知识/strings包.md"},p=l(`

strings包

Go中使用strings包来完成对字符串的操作

判断前缀/后缀

HasPrefix

  • 使用strings.HasPrefix判断字符串str是否以prefix开头
Go
strings.HasPrefix(str, prefix string) bool
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const C=JSON.parse('{"title":"strings包","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"判断前缀/后缀","slug":"判断前缀-后缀","link":"#判断前缀-后缀","children":[{"level":3,"title":"HasPrefix","slug":"hasprefix","link":"#hasprefix","children":[]},{"level":3,"title":"HasSuffix","slug":"hassuffix","link":"#hassuffix","children":[]}]},{"level":2,"title":"字符串包含","slug":"字符串包含","link":"#字符串包含","children":[]},{"level":2,"title":"字符串索引","slug":"字符串索引","link":"#字符串索引","children":[{"level":3,"title":"Index","slug":"index","link":"#index","children":[]},{"level":3,"title":"LastIndex","slug":"lastindex","link":"#lastindex","children":[]}]},{"level":2,"title":"字符串替换","slug":"字符串替换","link":"#字符串替换","children":[]},{"level":2,"title":"统计字符串出现次数","slug":"统计字符串出现次数","link":"#统计字符串出现次数","children":[]},{"level":2,"title":"重复字符串","slug":"重复字符串","link":"#重复字符串","children":[]},{"level":2,"title":"转换大小写","slug":"转换大小写","link":"#转换大小写","children":[]},{"level":2,"title":"字符串格式化","slug":"字符串格式化","link":"#字符串格式化","children":[]},{"level":2,"title":"字符串切割","slug":"字符串切割","link":"#字符串切割","children":[]},{"level":2,"title":"拼接slice到字符串","slug":"拼接slice到字符串","link":"#拼接slice到字符串","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/strings包.md"}'),o={name:"knowledge-deposition/GoLang/基础知识/strings包.md"},p=l(`

strings包

Go中使用strings包来完成对字符串的操作

判断前缀/后缀

HasPrefix

  • 使用strings.HasPrefix判断字符串str是否以prefix开头
Go
strings.HasPrefix(str, prefix string) bool
 

代码示例

Go
str1 := "hash是开发计划"
 fmt.Println(strings.HasPrefix(str1, "hash")) // true
 fmt.Println(strings.HasPrefix(str1, "ha")) // true
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_strings\345\214\205.md.c94073bc.lean.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_strings\345\214\205.md.377dc095.lean.js"
similarity index 96%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_strings\345\214\205.md.c94073bc.lean.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_strings\345\214\205.md.377dc095.lean.js"
index 24e89552..e57fc9ab 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_strings\345\214\205.md.c94073bc.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_strings\345\214\205.md.377dc095.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const C=JSON.parse('{"title":"strings包","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"判断前缀/后缀","slug":"判断前缀-后缀","link":"#判断前缀-后缀","children":[{"level":3,"title":"HasPrefix","slug":"hasprefix","link":"#hasprefix","children":[]},{"level":3,"title":"HasSuffix","slug":"hassuffix","link":"#hassuffix","children":[]}]},{"level":2,"title":"字符串包含","slug":"字符串包含","link":"#字符串包含","children":[]},{"level":2,"title":"字符串索引","slug":"字符串索引","link":"#字符串索引","children":[{"level":3,"title":"Index","slug":"index","link":"#index","children":[]},{"level":3,"title":"LastIndex","slug":"lastindex","link":"#lastindex","children":[]}]},{"level":2,"title":"字符串替换","slug":"字符串替换","link":"#字符串替换","children":[]},{"level":2,"title":"统计字符串出现次数","slug":"统计字符串出现次数","link":"#统计字符串出现次数","children":[]},{"level":2,"title":"重复字符串","slug":"重复字符串","link":"#重复字符串","children":[]},{"level":2,"title":"转换大小写","slug":"转换大小写","link":"#转换大小写","children":[]},{"level":2,"title":"字符串格式化","slug":"字符串格式化","link":"#字符串格式化","children":[]},{"level":2,"title":"字符串切割","slug":"字符串切割","link":"#字符串切割","children":[]},{"level":2,"title":"拼接slice到字符串","slug":"拼接slice到字符串","link":"#拼接slice到字符串","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/strings包.md"}'),o={name:"knowledge-deposition/GoLang/基础知识/strings包.md"},p=l("",64),t=[p];function e(c,r,D,F,y,A){return a(),n("div",null,t)}const d=s(o,[["render",e]]);export{C as __pageData,d as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const C=JSON.parse('{"title":"strings包","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"判断前缀/后缀","slug":"判断前缀-后缀","link":"#判断前缀-后缀","children":[{"level":3,"title":"HasPrefix","slug":"hasprefix","link":"#hasprefix","children":[]},{"level":3,"title":"HasSuffix","slug":"hassuffix","link":"#hassuffix","children":[]}]},{"level":2,"title":"字符串包含","slug":"字符串包含","link":"#字符串包含","children":[]},{"level":2,"title":"字符串索引","slug":"字符串索引","link":"#字符串索引","children":[{"level":3,"title":"Index","slug":"index","link":"#index","children":[]},{"level":3,"title":"LastIndex","slug":"lastindex","link":"#lastindex","children":[]}]},{"level":2,"title":"字符串替换","slug":"字符串替换","link":"#字符串替换","children":[]},{"level":2,"title":"统计字符串出现次数","slug":"统计字符串出现次数","link":"#统计字符串出现次数","children":[]},{"level":2,"title":"重复字符串","slug":"重复字符串","link":"#重复字符串","children":[]},{"level":2,"title":"转换大小写","slug":"转换大小写","link":"#转换大小写","children":[]},{"level":2,"title":"字符串格式化","slug":"字符串格式化","link":"#字符串格式化","children":[]},{"level":2,"title":"字符串切割","slug":"字符串切割","link":"#字符串切割","children":[]},{"level":2,"title":"拼接slice到字符串","slug":"拼接slice到字符串","link":"#拼接slice到字符串","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/strings包.md"}'),o={name:"knowledge-deposition/GoLang/基础知识/strings包.md"},p=l("",64),t=[p];function e(c,r,D,F,y,A){return a(),n("div",null,t)}const d=s(o,[["render",e]]);export{C as __pageData,d as default};
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_time\345\214\205.md.4e4b16f6.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_time\345\214\205.md.858d3479.js"
similarity index 99%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_time\345\214\205.md.4e4b16f6.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_time\345\214\205.md.858d3479.js"
index a4e0630d..fe63f4d5 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_time\345\214\205.md.4e4b16f6.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_time\345\214\205.md.858d3479.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const C=JSON.parse('{"title":"time包","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"查看当前时间","slug":"查看当前时间","link":"#查看当前时间","children":[]},{"level":2,"title":"获取两个时间的间隔","slug":"获取两个时间的间隔","link":"#获取两个时间的间隔","children":[{"level":3,"title":"time.Time.Sub","slug":"time-time-sub","link":"#time-time-sub","children":[]},{"level":3,"title":"time.Since","slug":"time-since","link":"#time-since","children":[]}]},{"level":2,"title":"两个时间相加","slug":"两个时间相加","link":"#两个时间相加","children":[{"level":3,"title":"time.Time.Add","slug":"time-time-add","link":"#time-time-add","children":[]}]},{"level":2,"title":"时间格式化","slug":"时间格式化","link":"#时间格式化","children":[]},{"level":2,"title":"Timer和Ticker","slug":"timer和ticker","link":"#timer和ticker","children":[{"level":3,"title":"Timer","slug":"timer","link":"#timer","children":[]},{"level":3,"title":"计时器","slug":"计时器","link":"#计时器","children":[]},{"level":3,"title":"速率限制","slug":"速率限制","link":"#速率限制","children":[]},{"level":3,"title":"控制并发数量","slug":"控制并发数量","link":"#控制并发数量","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/基础知识/time包.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/time包.md"},o=l(`

time包

查看当前时间

Go
func Now() Time
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const C=JSON.parse('{"title":"time包","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"查看当前时间","slug":"查看当前时间","link":"#查看当前时间","children":[]},{"level":2,"title":"获取两个时间的间隔","slug":"获取两个时间的间隔","link":"#获取两个时间的间隔","children":[{"level":3,"title":"time.Time.Sub","slug":"time-time-sub","link":"#time-time-sub","children":[]},{"level":3,"title":"time.Since","slug":"time-since","link":"#time-since","children":[]}]},{"level":2,"title":"两个时间相加","slug":"两个时间相加","link":"#两个时间相加","children":[{"level":3,"title":"time.Time.Add","slug":"time-time-add","link":"#time-time-add","children":[]}]},{"level":2,"title":"时间格式化","slug":"时间格式化","link":"#时间格式化","children":[]},{"level":2,"title":"Timer和Ticker","slug":"timer和ticker","link":"#timer和ticker","children":[{"level":3,"title":"Timer","slug":"timer","link":"#timer","children":[]},{"level":3,"title":"计时器","slug":"计时器","link":"#计时器","children":[]},{"level":3,"title":"速率限制","slug":"速率限制","link":"#速率限制","children":[]},{"level":3,"title":"控制并发数量","slug":"控制并发数量","link":"#控制并发数量","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/基础知识/time包.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/time包.md"},o=l(`

time包

查看当前时间

Go
func Now() Time
 

TIP

时间戳精确到

代码示例

Go
// 获取当前时间
 t := time.Now()
 // 获取当前时间戳
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_time\345\214\205.md.4e4b16f6.lean.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_time\345\214\205.md.858d3479.lean.js"
similarity index 96%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_time\345\214\205.md.4e4b16f6.lean.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_time\345\214\205.md.858d3479.lean.js"
index 883d3938..203c665a 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_time\345\214\205.md.4e4b16f6.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_time\345\214\205.md.858d3479.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const C=JSON.parse('{"title":"time包","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"查看当前时间","slug":"查看当前时间","link":"#查看当前时间","children":[]},{"level":2,"title":"获取两个时间的间隔","slug":"获取两个时间的间隔","link":"#获取两个时间的间隔","children":[{"level":3,"title":"time.Time.Sub","slug":"time-time-sub","link":"#time-time-sub","children":[]},{"level":3,"title":"time.Since","slug":"time-since","link":"#time-since","children":[]}]},{"level":2,"title":"两个时间相加","slug":"两个时间相加","link":"#两个时间相加","children":[{"level":3,"title":"time.Time.Add","slug":"time-time-add","link":"#time-time-add","children":[]}]},{"level":2,"title":"时间格式化","slug":"时间格式化","link":"#时间格式化","children":[]},{"level":2,"title":"Timer和Ticker","slug":"timer和ticker","link":"#timer和ticker","children":[{"level":3,"title":"Timer","slug":"timer","link":"#timer","children":[]},{"level":3,"title":"计时器","slug":"计时器","link":"#计时器","children":[]},{"level":3,"title":"速率限制","slug":"速率限制","link":"#速率限制","children":[]},{"level":3,"title":"控制并发数量","slug":"控制并发数量","link":"#控制并发数量","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/基础知识/time包.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/time包.md"},o=l("",39),t=[o];function e(c,r,D,y,F,i){return a(),n("div",null,t)}const d=s(p,[["render",e]]);export{C as __pageData,d as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const C=JSON.parse('{"title":"time包","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"查看当前时间","slug":"查看当前时间","link":"#查看当前时间","children":[]},{"level":2,"title":"获取两个时间的间隔","slug":"获取两个时间的间隔","link":"#获取两个时间的间隔","children":[{"level":3,"title":"time.Time.Sub","slug":"time-time-sub","link":"#time-time-sub","children":[]},{"level":3,"title":"time.Since","slug":"time-since","link":"#time-since","children":[]}]},{"level":2,"title":"两个时间相加","slug":"两个时间相加","link":"#两个时间相加","children":[{"level":3,"title":"time.Time.Add","slug":"time-time-add","link":"#time-time-add","children":[]}]},{"level":2,"title":"时间格式化","slug":"时间格式化","link":"#时间格式化","children":[]},{"level":2,"title":"Timer和Ticker","slug":"timer和ticker","link":"#timer和ticker","children":[{"level":3,"title":"Timer","slug":"timer","link":"#timer","children":[]},{"level":3,"title":"计时器","slug":"计时器","link":"#计时器","children":[]},{"level":3,"title":"速率限制","slug":"速率限制","link":"#速率限制","children":[]},{"level":3,"title":"控制并发数量","slug":"控制并发数量","link":"#控制并发数量","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/基础知识/time包.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/time包.md"},o=l("",39),t=[o];function e(c,r,D,y,F,i){return a(),n("div",null,t)}const d=s(p,[["render",e]]);export{C as __pageData,d as default};
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_url\345\214\205.md.52febc22.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_url\345\214\205.md.4e0ba066.js"
similarity index 99%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_url\345\214\205.md.52febc22.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_url\345\214\205.md.4e0ba066.js"
index 518fee2a..f996b6ac 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_url\345\214\205.md.52febc22.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_url\345\214\205.md.4e0ba066.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const C=JSON.parse('{"title":"url包","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"url.Parse","slug":"url-parse","link":"#url-parse","children":[]},{"level":2,"title":"url.ParseRequestURI","slug":"url-parserequesturi","link":"#url-parserequesturi","children":[]},{"level":2,"title":"url.PathEscape和url.PathUnescape","slug":"url-pathescape和url-pathunescape","link":"#url-pathescape和url-pathunescape","children":[]},{"level":2,"title":"url.QueryEscape和url.QueryUnescape","slug":"url-queryescape和url-queryunescape","link":"#url-queryescape和url-queryunescape","children":[]},{"level":2,"title":"url.ParseQuery","slug":"url-parsequery","link":"#url-parsequery","children":[]},{"level":2,"title":"url.Values","slug":"url-values","link":"#url-values","children":[]},{"level":2,"title":"url.JoinPath","slug":"url-joinpath","link":"#url-joinpath","children":[]},{"level":2,"title":"url.UserInfo","slug":"url-userinfo","link":"#url-userinfo","children":[]},{"level":2,"title":"url.URL.String","slug":"url-url-string","link":"#url-url-string","children":[]},{"level":2,"title":"url.URL.Query","slug":"url-url-query","link":"#url-url-query","children":[]},{"level":2,"title":"url.URL.Hostname和url.URL.Port","slug":"url-url-hostname和url-url-port","link":"#url-url-hostname和url-url-port","children":[]},{"level":2,"title":"url.URL.IsAbs","slug":"url-url-isabs","link":"#url-url-isabs","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/url包.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/url包.md"},o=l(`

url包

net/url包在Go语言中用于解析和构建URL

url.Parse

url.Parse方法用于解析一个URL字符串并返回一个*url.URL对象。url.URL对象如下:

Go
// URL's String method uses the EscapedPath method to obtain the path.
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const C=JSON.parse('{"title":"url包","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"url.Parse","slug":"url-parse","link":"#url-parse","children":[]},{"level":2,"title":"url.ParseRequestURI","slug":"url-parserequesturi","link":"#url-parserequesturi","children":[]},{"level":2,"title":"url.PathEscape和url.PathUnescape","slug":"url-pathescape和url-pathunescape","link":"#url-pathescape和url-pathunescape","children":[]},{"level":2,"title":"url.QueryEscape和url.QueryUnescape","slug":"url-queryescape和url-queryunescape","link":"#url-queryescape和url-queryunescape","children":[]},{"level":2,"title":"url.ParseQuery","slug":"url-parsequery","link":"#url-parsequery","children":[]},{"level":2,"title":"url.Values","slug":"url-values","link":"#url-values","children":[]},{"level":2,"title":"url.JoinPath","slug":"url-joinpath","link":"#url-joinpath","children":[]},{"level":2,"title":"url.UserInfo","slug":"url-userinfo","link":"#url-userinfo","children":[]},{"level":2,"title":"url.URL.String","slug":"url-url-string","link":"#url-url-string","children":[]},{"level":2,"title":"url.URL.Query","slug":"url-url-query","link":"#url-url-query","children":[]},{"level":2,"title":"url.URL.Hostname和url.URL.Port","slug":"url-url-hostname和url-url-port","link":"#url-url-hostname和url-url-port","children":[]},{"level":2,"title":"url.URL.IsAbs","slug":"url-url-isabs","link":"#url-url-isabs","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/url包.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/url包.md"},o=l(`

url包

net/url包在Go语言中用于解析和构建URL

url.Parse

url.Parse方法用于解析一个URL字符串并返回一个*url.URL对象。url.URL对象如下:

Go
// URL's String method uses the EscapedPath method to obtain the path.
 type URL struct {
 	Scheme      string
 	Opaque      string    // encoded opaque data
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_url\345\214\205.md.52febc22.lean.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_url\345\214\205.md.4e0ba066.lean.js"
similarity index 96%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_url\345\214\205.md.52febc22.lean.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_url\345\214\205.md.4e0ba066.lean.js"
index e5fbcb48..1539f7b9 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_url\345\214\205.md.52febc22.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_url\345\214\205.md.4e0ba066.lean.js"
@@ -1 +1 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const C=JSON.parse('{"title":"url包","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"url.Parse","slug":"url-parse","link":"#url-parse","children":[]},{"level":2,"title":"url.ParseRequestURI","slug":"url-parserequesturi","link":"#url-parserequesturi","children":[]},{"level":2,"title":"url.PathEscape和url.PathUnescape","slug":"url-pathescape和url-pathunescape","link":"#url-pathescape和url-pathunescape","children":[]},{"level":2,"title":"url.QueryEscape和url.QueryUnescape","slug":"url-queryescape和url-queryunescape","link":"#url-queryescape和url-queryunescape","children":[]},{"level":2,"title":"url.ParseQuery","slug":"url-parsequery","link":"#url-parsequery","children":[]},{"level":2,"title":"url.Values","slug":"url-values","link":"#url-values","children":[]},{"level":2,"title":"url.JoinPath","slug":"url-joinpath","link":"#url-joinpath","children":[]},{"level":2,"title":"url.UserInfo","slug":"url-userinfo","link":"#url-userinfo","children":[]},{"level":2,"title":"url.URL.String","slug":"url-url-string","link":"#url-url-string","children":[]},{"level":2,"title":"url.URL.Query","slug":"url-url-query","link":"#url-url-query","children":[]},{"level":2,"title":"url.URL.Hostname和url.URL.Port","slug":"url-url-hostname和url-url-port","link":"#url-url-hostname和url-url-port","children":[]},{"level":2,"title":"url.URL.IsAbs","slug":"url-url-isabs","link":"#url-url-isabs","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/url包.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/url包.md"},o=l("",51),e=[o];function t(c,r,D,F,y,A){return n(),a("div",null,e)}const u=s(p,[["render",t]]);export{C as __pageData,u as default};
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const C=JSON.parse('{"title":"url包","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"url.Parse","slug":"url-parse","link":"#url-parse","children":[]},{"level":2,"title":"url.ParseRequestURI","slug":"url-parserequesturi","link":"#url-parserequesturi","children":[]},{"level":2,"title":"url.PathEscape和url.PathUnescape","slug":"url-pathescape和url-pathunescape","link":"#url-pathescape和url-pathunescape","children":[]},{"level":2,"title":"url.QueryEscape和url.QueryUnescape","slug":"url-queryescape和url-queryunescape","link":"#url-queryescape和url-queryunescape","children":[]},{"level":2,"title":"url.ParseQuery","slug":"url-parsequery","link":"#url-parsequery","children":[]},{"level":2,"title":"url.Values","slug":"url-values","link":"#url-values","children":[]},{"level":2,"title":"url.JoinPath","slug":"url-joinpath","link":"#url-joinpath","children":[]},{"level":2,"title":"url.UserInfo","slug":"url-userinfo","link":"#url-userinfo","children":[]},{"level":2,"title":"url.URL.String","slug":"url-url-string","link":"#url-url-string","children":[]},{"level":2,"title":"url.URL.Query","slug":"url-url-query","link":"#url-url-query","children":[]},{"level":2,"title":"url.URL.Hostname和url.URL.Port","slug":"url-url-hostname和url-url-port","link":"#url-url-hostname和url-url-port","children":[]},{"level":2,"title":"url.URL.IsAbs","slug":"url-url-isabs","link":"#url-url-isabs","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/url包.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/url包.md"},o=l("",51),e=[o];function t(c,r,D,F,y,A){return n(),a("div",null,e)}const u=s(p,[["render",t]]);export{C as __pageData,u as default};
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\207\275\346\225\260.md.f9923c5b.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\207\275\346\225\260.md.d84c6cd1.js"
similarity index 99%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\207\275\346\225\260.md.f9923c5b.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\207\275\346\225\260.md.d84c6cd1.js"
index 1aab668f..2e5345e2 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\207\275\346\225\260.md.f9923c5b.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\207\275\346\225\260.md.d84c6cd1.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"函数","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"函数声明","slug":"函数声明","link":"#函数声明","children":[]},{"level":2,"title":"函数参数","slug":"函数参数","link":"#函数参数","children":[{"level":3,"title":"固定长度的参数","slug":"固定长度的参数","link":"#固定长度的参数","children":[]},{"level":3,"title":"不固定长度,多个参数类型一致","slug":"不固定长度-多个参数类型一致","link":"#不固定长度-多个参数类型一致","children":[]},{"level":3,"title":"不固定长度,参数类型不一致","slug":"不固定长度-参数类型不一致","link":"#不固定长度-参数类型不一致","children":[]}]},{"level":2,"title":"解序列","slug":"解序列","link":"#解序列","children":[]},{"level":2,"title":"函数返回值","slug":"函数返回值","link":"#函数返回值","children":[{"level":3,"title":"一个返回值","slug":"一个返回值","link":"#一个返回值","children":[]},{"level":3,"title":"多个返回值","slug":"多个返回值","link":"#多个返回值","children":[]},{"level":3,"title":"返回值命名","slug":"返回值命名","link":"#返回值命名","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/基础知识/函数.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/函数.md"},o=l(`

函数

函数声明

Go
func function_name(arguments) [function_result_value] {
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"函数","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"函数声明","slug":"函数声明","link":"#函数声明","children":[]},{"level":2,"title":"函数参数","slug":"函数参数","link":"#函数参数","children":[{"level":3,"title":"固定长度的参数","slug":"固定长度的参数","link":"#固定长度的参数","children":[]},{"level":3,"title":"不固定长度,多个参数类型一致","slug":"不固定长度-多个参数类型一致","link":"#不固定长度-多个参数类型一致","children":[]},{"level":3,"title":"不固定长度,参数类型不一致","slug":"不固定长度-参数类型不一致","link":"#不固定长度-参数类型不一致","children":[]}]},{"level":2,"title":"解序列","slug":"解序列","link":"#解序列","children":[]},{"level":2,"title":"函数返回值","slug":"函数返回值","link":"#函数返回值","children":[{"level":3,"title":"一个返回值","slug":"一个返回值","link":"#一个返回值","children":[]},{"level":3,"title":"多个返回值","slug":"多个返回值","link":"#多个返回值","children":[]},{"level":3,"title":"返回值命名","slug":"返回值命名","link":"#返回值命名","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/基础知识/函数.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/函数.md"},o=l(`

函数

函数声明

Go
func function_name(arguments) [function_result_value] {
   ...
 }
 

函数参数

固定长度的参数

  • 如果函数参数的类型都一样可以只在最后一个参数后面写类型
Go
// 如果参数的类型都一样可以只在最后一个参数后面写类型
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\207\275\346\225\260.md.f9923c5b.lean.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\207\275\346\225\260.md.d84c6cd1.lean.js"
similarity index 95%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\207\275\346\225\260.md.f9923c5b.lean.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\207\275\346\225\260.md.d84c6cd1.lean.js"
index d9fd1377..8ec40449 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\207\275\346\225\260.md.f9923c5b.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\207\275\346\225\260.md.d84c6cd1.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"函数","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"函数声明","slug":"函数声明","link":"#函数声明","children":[]},{"level":2,"title":"函数参数","slug":"函数参数","link":"#函数参数","children":[{"level":3,"title":"固定长度的参数","slug":"固定长度的参数","link":"#固定长度的参数","children":[]},{"level":3,"title":"不固定长度,多个参数类型一致","slug":"不固定长度-多个参数类型一致","link":"#不固定长度-多个参数类型一致","children":[]},{"level":3,"title":"不固定长度,参数类型不一致","slug":"不固定长度-参数类型不一致","link":"#不固定长度-参数类型不一致","children":[]}]},{"level":2,"title":"解序列","slug":"解序列","link":"#解序列","children":[]},{"level":2,"title":"函数返回值","slug":"函数返回值","link":"#函数返回值","children":[{"level":3,"title":"一个返回值","slug":"一个返回值","link":"#一个返回值","children":[]},{"level":3,"title":"多个返回值","slug":"多个返回值","link":"#多个返回值","children":[]},{"level":3,"title":"返回值命名","slug":"返回值命名","link":"#返回值命名","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/基础知识/函数.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/函数.md"},o=l("",35),e=[o];function t(c,D,r,y,F,A){return a(),n("div",null,e)}const u=s(p,[["render",t]]);export{i as __pageData,u as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"函数","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"函数声明","slug":"函数声明","link":"#函数声明","children":[]},{"level":2,"title":"函数参数","slug":"函数参数","link":"#函数参数","children":[{"level":3,"title":"固定长度的参数","slug":"固定长度的参数","link":"#固定长度的参数","children":[]},{"level":3,"title":"不固定长度,多个参数类型一致","slug":"不固定长度-多个参数类型一致","link":"#不固定长度-多个参数类型一致","children":[]},{"level":3,"title":"不固定长度,参数类型不一致","slug":"不固定长度-参数类型不一致","link":"#不固定长度-参数类型不一致","children":[]}]},{"level":2,"title":"解序列","slug":"解序列","link":"#解序列","children":[]},{"level":2,"title":"函数返回值","slug":"函数返回值","link":"#函数返回值","children":[{"level":3,"title":"一个返回值","slug":"一个返回值","link":"#一个返回值","children":[]},{"level":3,"title":"多个返回值","slug":"多个返回值","link":"#多个返回值","children":[]},{"level":3,"title":"返回值命名","slug":"返回值命名","link":"#返回值命名","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/基础知识/函数.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/函数.md"},o=l("",35),e=[o];function t(c,D,r,y,F,A){return a(),n("div",null,e)}const u=s(p,[["render",t]]);export{i as __pageData,u as default};
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\215\217\347\250\213.md.67b11186.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\215\217\347\250\213.md.e61d6f2f.js"
similarity index 99%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\215\217\347\250\213.md.67b11186.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\215\217\347\250\213.md.e61d6f2f.js"
index 9b554d23..b0dc9737 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\215\217\347\250\213.md.67b11186.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\215\217\347\250\213.md.e61d6f2f.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const C=JSON.parse('{"title":"协程Groutine","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"启动一个协程","slug":"启动一个协程","link":"#启动一个协程","children":[]},{"level":2,"title":"启动多个协程","slug":"启动多个协程","link":"#启动多个协程","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/协程.md"}'),o={name:"knowledge-deposition/GoLang/基础知识/协程.md"},p=l(`

协程Groutine

  • Go语言的协程(Groutine)是与其他函数或方法一起并发运行的工作方式

  • 协程可以看作是轻量级线程,与线程相比,创建一个协程的成本很小,因此在Go应用中,常常会看到会有很多协程并发地运行

启动一个协程

  • 调用函数或者方法时,如果在前面加上关键字go,就可以让一个新的Go协程并发地运行
Go
// 定义一个函数
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const C=JSON.parse('{"title":"协程Groutine","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"启动一个协程","slug":"启动一个协程","link":"#启动一个协程","children":[]},{"level":2,"title":"启动多个协程","slug":"启动多个协程","link":"#启动多个协程","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/协程.md"}'),o={name:"knowledge-deposition/GoLang/基础知识/协程.md"},p=l(`

协程Groutine

  • Go语言的协程(Groutine)是与其他函数或方法一起并发运行的工作方式

  • 协程可以看作是轻量级线程,与线程相比,创建一个协程的成本很小,因此在Go应用中,常常会看到会有很多协程并发地运行

启动一个协程

  • 调用函数或者方法时,如果在前面加上关键字go,就可以让一个新的Go协程并发地运行
Go
// 定义一个函数
 func func_name(arguments) return_value {
   ...
 }
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\215\217\347\250\213.md.67b11186.lean.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\215\217\347\250\213.md.e61d6f2f.lean.js"
similarity index 90%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\215\217\347\250\213.md.67b11186.lean.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\215\217\347\250\213.md.e61d6f2f.lean.js"
index f01d0c96..e770e1f3 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\215\217\347\250\213.md.67b11186.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\215\217\347\250\213.md.e61d6f2f.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const C=JSON.parse('{"title":"协程Groutine","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"启动一个协程","slug":"启动一个协程","link":"#启动一个协程","children":[]},{"level":2,"title":"启动多个协程","slug":"启动多个协程","link":"#启动多个协程","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/协程.md"}'),o={name:"knowledge-deposition/GoLang/基础知识/协程.md"},p=l("",10),e=[p];function t(c,r,D,y,i,F){return a(),n("div",null,e)}const d=s(o,[["render",t]]);export{C as __pageData,d as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const C=JSON.parse('{"title":"协程Groutine","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"启动一个协程","slug":"启动一个协程","link":"#启动一个协程","children":[]},{"level":2,"title":"启动多个协程","slug":"启动多个协程","link":"#启动多个协程","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/协程.md"}'),o={name:"knowledge-deposition/GoLang/基础知识/协程.md"},p=l("",10),e=[p];function t(c,r,D,y,i,F){return a(),n("div",null,e)}const d=s(o,[["render",t]]);export{C as __pageData,d as default};
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\215\217\347\250\213\345\256\211\345\205\250.md.a1450797.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\215\217\347\250\213\345\256\211\345\205\250.md.9597e397.js"
similarity index 99%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\215\217\347\250\213\345\256\211\345\205\250.md.a1450797.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\215\217\347\250\213\345\256\211\345\205\250.md.9597e397.js"
index 149bde2c..f646f774 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\215\217\347\250\213\345\256\211\345\205\250.md.a1450797.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\215\217\347\250\213\345\256\211\345\205\250.md.9597e397.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"协程安全","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"互斥锁(Mutex)","slug":"互斥锁-mutex","link":"#互斥锁-mutex","children":[]},{"level":2,"title":"读写锁RWMutex","slug":"读写锁rwmutex","link":"#读写锁rwmutex","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/协程安全.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/协程安全.md"},o=l(`

协程安全

当程序并发执行时,如果同时操作一份数据, 就可能会出现问题,如下:

我想让钱包中的钱增加,于是开启了1万个协程,每次将钱包的钱增加1万,理想的结果最终是10000*10000 = 100000000,但运行结果却不尽人意

第一次结果:93380000,第二次结果92660000,第三次结果92560000

Go
type WalletV1 struct {
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"协程安全","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"互斥锁(Mutex)","slug":"互斥锁-mutex","link":"#互斥锁-mutex","children":[]},{"level":2,"title":"读写锁RWMutex","slug":"读写锁rwmutex","link":"#读写锁rwmutex","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/协程安全.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/协程安全.md"},o=l(`

协程安全

当程序并发执行时,如果同时操作一份数据, 就可能会出现问题,如下:

我想让钱包中的钱增加,于是开启了1万个协程,每次将钱包的钱增加1万,理想的结果最终是10000*10000 = 100000000,但运行结果却不尽人意

第一次结果:93380000,第二次结果92660000,第三次结果92560000

Go
type WalletV1 struct {
 	balance int
 }
 
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\215\217\347\250\213\345\256\211\345\205\250.md.a1450797.lean.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\215\217\347\250\213\345\256\211\345\205\250.md.9597e397.lean.js"
similarity index 90%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\215\217\347\250\213\345\256\211\345\205\250.md.a1450797.lean.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\215\217\347\250\213\345\256\211\345\205\250.md.9597e397.lean.js"
index 0697e557..680fb37c 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\215\217\347\250\213\345\256\211\345\205\250.md.a1450797.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\215\217\347\250\213\345\256\211\345\205\250.md.9597e397.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"协程安全","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"互斥锁(Mutex)","slug":"互斥锁-mutex","link":"#互斥锁-mutex","children":[]},{"level":2,"title":"读写锁RWMutex","slug":"读写锁rwmutex","link":"#读写锁rwmutex","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/协程安全.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/协程安全.md"},o=l("",16),e=[o];function t(c,D,r,F,y,A){return a(),n("div",null,e)}const d=s(p,[["render",t]]);export{i as __pageData,d as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"协程安全","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"互斥锁(Mutex)","slug":"互斥锁-mutex","link":"#互斥锁-mutex","children":[]},{"level":2,"title":"读写锁RWMutex","slug":"读写锁rwmutex","link":"#读写锁rwmutex","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/协程安全.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/协程安全.md"},o=l("",16),e=[o];function t(c,D,r,F,y,A){return a(),n("div",null,e)}const d=s(p,[["render",t]]);export{i as __pageData,d as default};
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\217\230\351\207\217\345\270\270\351\207\217.md.bbbc63c3.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\217\230\351\207\217\345\270\270\351\207\217.md.e02ff635.js"
similarity index 99%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\217\230\351\207\217\345\270\270\351\207\217.md.bbbc63c3.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\217\230\351\207\217\345\270\270\351\207\217.md.e02ff635.js"
index 51a601dd..fe761253 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\217\230\351\207\217\345\270\270\351\207\217.md.bbbc63c3.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\217\230\351\207\217\345\270\270\351\207\217.md.e02ff635.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const A=JSON.parse('{"title":"变量常量","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"声明变量","slug":"声明变量","link":"#声明变量","children":[{"level":3,"title":"使用var关键字来声明变量","slug":"使用var关键字来声明变量","link":"#使用var关键字来声明变量","children":[]},{"level":3,"title":"使用:=来声明变量","slug":"使用-来声明变量","link":"#使用-来声明变量","children":[]}]},{"level":2,"title":"常量","slug":"常量","link":"#常量","children":[{"level":3,"title":"使用const关键字来声明常量","slug":"使用const关键字来声明常量","link":"#使用const关键字来声明常量","children":[]},{"level":3,"title":"使用iota设置自增","slug":"使用iota设置自增","link":"#使用iota设置自增","children":[]},{"level":3,"title":"iota也支持运算","slug":"iota也支持运算","link":"#iota也支持运算","children":[]},{"level":3,"title":"使用_忽略一些值","slug":"使用-忽略一些值","link":"#使用-忽略一些值","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/基础知识/变量常量.md"}'),o={name:"knowledge-deposition/GoLang/基础知识/变量常量.md"},p=l(`

变量常量

声明变量

Go
// 下面两种形式都可以声明一个变量
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const A=JSON.parse('{"title":"变量常量","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"声明变量","slug":"声明变量","link":"#声明变量","children":[{"level":3,"title":"使用var关键字来声明变量","slug":"使用var关键字来声明变量","link":"#使用var关键字来声明变量","children":[]},{"level":3,"title":"使用:=来声明变量","slug":"使用-来声明变量","link":"#使用-来声明变量","children":[]}]},{"level":2,"title":"常量","slug":"常量","link":"#常量","children":[{"level":3,"title":"使用const关键字来声明常量","slug":"使用const关键字来声明常量","link":"#使用const关键字来声明常量","children":[]},{"level":3,"title":"使用iota设置自增","slug":"使用iota设置自增","link":"#使用iota设置自增","children":[]},{"level":3,"title":"iota也支持运算","slug":"iota也支持运算","link":"#iota也支持运算","children":[]},{"level":3,"title":"使用_忽略一些值","slug":"使用-忽略一些值","link":"#使用-忽略一些值","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/基础知识/变量常量.md"}'),o={name:"knowledge-deposition/GoLang/基础知识/变量常量.md"},p=l(`

变量常量

声明变量

Go
// 下面两种形式都可以声明一个变量
 var varibale_name [variable_type] = variable_value
 varibale_name := variable_value
 

使用var关键字来声明变量

Go
var a int = 1
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\217\230\351\207\217\345\270\270\351\207\217.md.bbbc63c3.lean.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\217\230\351\207\217\345\270\270\351\207\217.md.e02ff635.lean.js"
similarity index 95%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\217\230\351\207\217\345\270\270\351\207\217.md.bbbc63c3.lean.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\217\230\351\207\217\345\270\270\351\207\217.md.e02ff635.lean.js"
index 584e5423..9f27d89a 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\217\230\351\207\217\345\270\270\351\207\217.md.bbbc63c3.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\217\230\351\207\217\345\270\270\351\207\217.md.e02ff635.lean.js"
@@ -1 +1 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const A=JSON.parse('{"title":"变量常量","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"声明变量","slug":"声明变量","link":"#声明变量","children":[{"level":3,"title":"使用var关键字来声明变量","slug":"使用var关键字来声明变量","link":"#使用var关键字来声明变量","children":[]},{"level":3,"title":"使用:=来声明变量","slug":"使用-来声明变量","link":"#使用-来声明变量","children":[]}]},{"level":2,"title":"常量","slug":"常量","link":"#常量","children":[{"level":3,"title":"使用const关键字来声明常量","slug":"使用const关键字来声明常量","link":"#使用const关键字来声明常量","children":[]},{"level":3,"title":"使用iota设置自增","slug":"使用iota设置自增","link":"#使用iota设置自增","children":[]},{"level":3,"title":"iota也支持运算","slug":"iota也支持运算","link":"#iota也支持运算","children":[]},{"level":3,"title":"使用_忽略一些值","slug":"使用-忽略一些值","link":"#使用-忽略一些值","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/基础知识/变量常量.md"}'),o={name:"knowledge-deposition/GoLang/基础知识/变量常量.md"},p=l("",19),e=[p];function t(c,r,D,y,i,C){return n(),a("div",null,e)}const d=s(o,[["render",t]]);export{A as __pageData,d as default};
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const A=JSON.parse('{"title":"变量常量","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"声明变量","slug":"声明变量","link":"#声明变量","children":[{"level":3,"title":"使用var关键字来声明变量","slug":"使用var关键字来声明变量","link":"#使用var关键字来声明变量","children":[]},{"level":3,"title":"使用:=来声明变量","slug":"使用-来声明变量","link":"#使用-来声明变量","children":[]}]},{"level":2,"title":"常量","slug":"常量","link":"#常量","children":[{"level":3,"title":"使用const关键字来声明常量","slug":"使用const关键字来声明常量","link":"#使用const关键字来声明常量","children":[]},{"level":3,"title":"使用iota设置自增","slug":"使用iota设置自增","link":"#使用iota设置自增","children":[]},{"level":3,"title":"iota也支持运算","slug":"iota也支持运算","link":"#iota也支持运算","children":[]},{"level":3,"title":"使用_忽略一些值","slug":"使用-忽略一些值","link":"#使用-忽略一些值","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/基础知识/变量常量.md"}'),o={name:"knowledge-deposition/GoLang/基础知识/变量常量.md"},p=l("",19),e=[p];function t(c,r,D,y,i,C){return n(),a("div",null,e)}const d=s(o,[["render",t]]);export{A as __pageData,d as default};
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\237\272\347\241\200\346\225\260\346\215\256\347\261\273\345\236\213.md.f8e101d3.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\237\272\347\241\200\346\225\260\346\215\256\347\261\273\345\236\213.md.ff38ab8d.js"
similarity index 99%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\237\272\347\241\200\346\225\260\346\215\256\347\261\273\345\236\213.md.f8e101d3.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\237\272\347\241\200\346\225\260\346\215\256\347\261\273\345\236\213.md.ff38ab8d.js"
index 7980fd88..e91f60b4 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\237\272\347\241\200\346\225\260\346\215\256\347\261\273\345\236\213.md.f8e101d3.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\237\272\347\241\200\346\225\260\346\215\256\347\261\273\345\236\213.md.ff38ab8d.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const C=JSON.parse('{"title":"基础数据类型","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"整型","slug":"整型","link":"#整型","children":[{"level":3,"title":"有符号整型","slug":"有符号整型","link":"#有符号整型","children":[]},{"level":3,"title":"无符号整型","slug":"无符号整型","link":"#无符号整型","children":[]}]},{"level":2,"title":"浮点型","slug":"浮点型","link":"#浮点型","children":[]},{"level":2,"title":"字符","slug":"字符","link":"#字符","children":[]},{"level":2,"title":"字符串","slug":"字符串","link":"#字符串","children":[]},{"level":2,"title":"布尔","slug":"布尔","link":"#布尔","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/基础数据类型.md"}'),t={name:"knowledge-deposition/GoLang/基础知识/基础数据类型.md"},o=l(`

基础数据类型

整型

有符号整型

  • int8
  • int16
  • int32
  • int64
  • int

示例

Go
package main
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const C=JSON.parse('{"title":"基础数据类型","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"整型","slug":"整型","link":"#整型","children":[{"level":3,"title":"有符号整型","slug":"有符号整型","link":"#有符号整型","children":[]},{"level":3,"title":"无符号整型","slug":"无符号整型","link":"#无符号整型","children":[]}]},{"level":2,"title":"浮点型","slug":"浮点型","link":"#浮点型","children":[]},{"level":2,"title":"字符","slug":"字符","link":"#字符","children":[]},{"level":2,"title":"字符串","slug":"字符串","link":"#字符串","children":[]},{"level":2,"title":"布尔","slug":"布尔","link":"#布尔","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/基础数据类型.md"}'),t={name:"knowledge-deposition/GoLang/基础知识/基础数据类型.md"},o=l(`

基础数据类型

整型

有符号整型

  • int8
  • int16
  • int32
  • int64
  • int

示例

Go
package main
 
 import (
 	"fmt"
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\237\272\347\241\200\346\225\260\346\215\256\347\261\273\345\236\213.md.f8e101d3.lean.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\237\272\347\241\200\346\225\260\346\215\256\347\261\273\345\236\213.md.ff38ab8d.lean.js"
similarity index 93%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\237\272\347\241\200\346\225\260\346\215\256\347\261\273\345\236\213.md.f8e101d3.lean.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\237\272\347\241\200\346\225\260\346\215\256\347\261\273\345\236\213.md.ff38ab8d.lean.js"
index 715a5f82..faaa149e 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\237\272\347\241\200\346\225\260\346\215\256\347\261\273\345\236\213.md.f8e101d3.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\345\237\272\347\241\200\346\225\260\346\215\256\347\261\273\345\236\213.md.ff38ab8d.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const C=JSON.parse('{"title":"基础数据类型","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"整型","slug":"整型","link":"#整型","children":[{"level":3,"title":"有符号整型","slug":"有符号整型","link":"#有符号整型","children":[]},{"level":3,"title":"无符号整型","slug":"无符号整型","link":"#无符号整型","children":[]}]},{"level":2,"title":"浮点型","slug":"浮点型","link":"#浮点型","children":[]},{"level":2,"title":"字符","slug":"字符","link":"#字符","children":[]},{"level":2,"title":"字符串","slug":"字符串","link":"#字符串","children":[]},{"level":2,"title":"布尔","slug":"布尔","link":"#布尔","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/基础数据类型.md"}'),t={name:"knowledge-deposition/GoLang/基础知识/基础数据类型.md"},o=l("",29),p=[o];function e(c,r,D,y,F,i){return a(),n("div",null,p)}const d=s(t,[["render",e]]);export{C as __pageData,d as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const C=JSON.parse('{"title":"基础数据类型","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"整型","slug":"整型","link":"#整型","children":[{"level":3,"title":"有符号整型","slug":"有符号整型","link":"#有符号整型","children":[]},{"level":3,"title":"无符号整型","slug":"无符号整型","link":"#无符号整型","children":[]}]},{"level":2,"title":"浮点型","slug":"浮点型","link":"#浮点型","children":[]},{"level":2,"title":"字符","slug":"字符","link":"#字符","children":[]},{"level":2,"title":"字符串","slug":"字符串","link":"#字符串","children":[]},{"level":2,"title":"布尔","slug":"布尔","link":"#布尔","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/基础数据类型.md"}'),t={name:"knowledge-deposition/GoLang/基础知识/基础数据类型.md"},o=l("",29),p=[o];function e(c,r,D,y,F,i){return a(),n("div",null,p)}const d=s(t,[["render",e]]);export{C as __pageData,d as default};
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\214\207\351\222\210.md.1d05b090.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\214\207\351\222\210.md.1411fccf.js"
similarity index 99%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\214\207\351\222\210.md.1d05b090.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\214\207\351\222\210.md.1411fccf.js"
index 1b652f25..0d5763d9 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\214\207\351\222\210.md.1d05b090.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\214\207\351\222\210.md.1411fccf.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"指针","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"指针操作符","slug":"指针操作符","link":"#指针操作符","children":[]},{"level":2,"title":"创建指针","slug":"创建指针","link":"#创建指针","children":[]},{"level":2,"title":"指针的类型","slug":"指针的类型","link":"#指针的类型","children":[]},{"level":2,"title":"指针的零值","slug":"指针的零值","link":"#指针的零值","children":[]},{"level":2,"title":"函数传递指针参数","slug":"函数传递指针参数","link":"#函数传递指针参数","children":[]},{"level":2,"title":"指针和切片","slug":"指针和切片","link":"#指针和切片","children":[{"level":3,"title":"通过传入切片改变原数组的值","slug":"通过传入切片改变原数组的值","link":"#通过传入切片改变原数组的值","children":[]},{"level":3,"title":"通过传入数组的指针来修改原数组","slug":"通过传入数组的指针来修改原数组","link":"#通过传入数组的指针来修改原数组","children":[]}]},{"level":2,"title":"Go中不支持指针运算","slug":"go中不支持指针运算","link":"#go中不支持指针运算","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/指针.md"}'),o={name:"knowledge-deposition/GoLang/基础知识/指针.md"},p=l(`

指针

  • 指针也是一种类型,也可以创建变量,称之为指针变量;

  • 指针变量的类型为*Type,该指针指向一个Type类型的变量;

  • 指针存储某个实际变量的内存地址,通过记录某个变量的地址,从而间接的操作该变量;

指针操作符

  • &: 该操作符可以获取到一个变量的内存地址

  • *: 有两种含义:

    • 如果*操作符在赋值操作的左边(也就是等号(=)的左边),则表示该指针指向的变量
    • 如果*操作符在赋值操作的右边(也就是等号(=)的右边边),则表示该指针指向的变量的值,又称指针的解引用
Go
func p() {
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"指针","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"指针操作符","slug":"指针操作符","link":"#指针操作符","children":[]},{"level":2,"title":"创建指针","slug":"创建指针","link":"#创建指针","children":[]},{"level":2,"title":"指针的类型","slug":"指针的类型","link":"#指针的类型","children":[]},{"level":2,"title":"指针的零值","slug":"指针的零值","link":"#指针的零值","children":[]},{"level":2,"title":"函数传递指针参数","slug":"函数传递指针参数","link":"#函数传递指针参数","children":[]},{"level":2,"title":"指针和切片","slug":"指针和切片","link":"#指针和切片","children":[{"level":3,"title":"通过传入切片改变原数组的值","slug":"通过传入切片改变原数组的值","link":"#通过传入切片改变原数组的值","children":[]},{"level":3,"title":"通过传入数组的指针来修改原数组","slug":"通过传入数组的指针来修改原数组","link":"#通过传入数组的指针来修改原数组","children":[]}]},{"level":2,"title":"Go中不支持指针运算","slug":"go中不支持指针运算","link":"#go中不支持指针运算","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/指针.md"}'),o={name:"knowledge-deposition/GoLang/基础知识/指针.md"},p=l(`

指针

  • 指针也是一种类型,也可以创建变量,称之为指针变量;

  • 指针变量的类型为*Type,该指针指向一个Type类型的变量;

  • 指针存储某个实际变量的内存地址,通过记录某个变量的地址,从而间接的操作该变量;

指针操作符

  • &: 该操作符可以获取到一个变量的内存地址

  • *: 有两种含义:

    • 如果*操作符在赋值操作的左边(也就是等号(=)的左边),则表示该指针指向的变量
    • 如果*操作符在赋值操作的右边(也就是等号(=)的右边边),则表示该指针指向的变量的值,又称指针的解引用
Go
func p() {
 	x := "蛇灵-血灵"
 	y := &x
 	
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\214\207\351\222\210.md.1d05b090.lean.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\214\207\351\222\210.md.1411fccf.lean.js"
similarity index 95%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\214\207\351\222\210.md.1d05b090.lean.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\214\207\351\222\210.md.1411fccf.lean.js"
index acdd3c86..a856f322 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\214\207\351\222\210.md.1d05b090.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\214\207\351\222\210.md.1411fccf.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"指针","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"指针操作符","slug":"指针操作符","link":"#指针操作符","children":[]},{"level":2,"title":"创建指针","slug":"创建指针","link":"#创建指针","children":[]},{"level":2,"title":"指针的类型","slug":"指针的类型","link":"#指针的类型","children":[]},{"level":2,"title":"指针的零值","slug":"指针的零值","link":"#指针的零值","children":[]},{"level":2,"title":"函数传递指针参数","slug":"函数传递指针参数","link":"#函数传递指针参数","children":[]},{"level":2,"title":"指针和切片","slug":"指针和切片","link":"#指针和切片","children":[{"level":3,"title":"通过传入切片改变原数组的值","slug":"通过传入切片改变原数组的值","link":"#通过传入切片改变原数组的值","children":[]},{"level":3,"title":"通过传入数组的指针来修改原数组","slug":"通过传入数组的指针来修改原数组","link":"#通过传入数组的指针来修改原数组","children":[]}]},{"level":2,"title":"Go中不支持指针运算","slug":"go中不支持指针运算","link":"#go中不支持指针运算","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/指针.md"}'),o={name:"knowledge-deposition/GoLang/基础知识/指针.md"},p=l("",32),e=[p];function t(c,r,D,y,F,A){return a(),n("div",null,e)}const d=s(o,[["render",t]]);export{i as __pageData,d as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"指针","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"指针操作符","slug":"指针操作符","link":"#指针操作符","children":[]},{"level":2,"title":"创建指针","slug":"创建指针","link":"#创建指针","children":[]},{"level":2,"title":"指针的类型","slug":"指针的类型","link":"#指针的类型","children":[]},{"level":2,"title":"指针的零值","slug":"指针的零值","link":"#指针的零值","children":[]},{"level":2,"title":"函数传递指针参数","slug":"函数传递指针参数","link":"#函数传递指针参数","children":[]},{"level":2,"title":"指针和切片","slug":"指针和切片","link":"#指针和切片","children":[{"level":3,"title":"通过传入切片改变原数组的值","slug":"通过传入切片改变原数组的值","link":"#通过传入切片改变原数组的值","children":[]},{"level":3,"title":"通过传入数组的指针来修改原数组","slug":"通过传入数组的指针来修改原数组","link":"#通过传入数组的指针来修改原数组","children":[]}]},{"level":2,"title":"Go中不支持指针运算","slug":"go中不支持指针运算","link":"#go中不支持指针运算","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/指针.md"}'),o={name:"knowledge-deposition/GoLang/基础知识/指针.md"},p=l("",32),e=[p];function t(c,r,D,y,F,A){return a(),n("div",null,e)}const d=s(o,[["render",t]]);export{i as __pageData,d as default};
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\216\245\345\217\243.md.d4683051.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\216\245\345\217\243.md.10af3955.js"
similarity index 99%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\216\245\345\217\243.md.d4683051.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\216\245\345\217\243.md.10af3955.js"
index 96b03f0b..392e016d 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\216\245\345\217\243.md.d4683051.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\216\245\345\217\243.md.10af3955.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"接口","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"定义接口","slug":"定义接口","link":"#定义接口","children":[]},{"level":2,"title":"实现接口","slug":"实现接口","link":"#实现接口","children":[]},{"level":2,"title":"接口的多态","slug":"接口的多态","link":"#接口的多态","children":[]},{"level":2,"title":"接口内部表示","slug":"接口内部表示","link":"#接口内部表示","children":[]},{"level":2,"title":"空接口","slug":"空接口","link":"#空接口","children":[]},{"level":2,"title":"类型断言","slug":"类型断言","link":"#类型断言","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/接口.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/接口.md"},o=l(`

接口

  • go的接口是一种抽象的自定义类型,没法直接实例化,它声明了一个或者多个方法的签名;
  • 如果一个struct实现了一个接口定义的所有方法,我们就说这个struct实现了这个接口。注意这里的实现隐式的,不用显示声明某个struct实现了哪个接口

定义接口

Go
type interface_name interface {
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"接口","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"定义接口","slug":"定义接口","link":"#定义接口","children":[]},{"level":2,"title":"实现接口","slug":"实现接口","link":"#实现接口","children":[]},{"level":2,"title":"接口的多态","slug":"接口的多态","link":"#接口的多态","children":[]},{"level":2,"title":"接口内部表示","slug":"接口内部表示","link":"#接口内部表示","children":[]},{"level":2,"title":"空接口","slug":"空接口","link":"#空接口","children":[]},{"level":2,"title":"类型断言","slug":"类型断言","link":"#类型断言","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/接口.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/接口.md"},o=l(`

接口

  • go的接口是一种抽象的自定义类型,没法直接实例化,它声明了一个或者多个方法的签名;
  • 如果一个struct实现了一个接口定义的所有方法,我们就说这个struct实现了这个接口。注意这里的实现隐式的,不用显示声明某个struct实现了哪个接口

定义接口

Go
type interface_name interface {
   method1()
   method2()
   ...
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\216\245\345\217\243.md.d4683051.lean.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\216\245\345\217\243.md.10af3955.lean.js"
similarity index 93%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\216\245\345\217\243.md.d4683051.lean.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\216\245\345\217\243.md.10af3955.lean.js"
index ef51b141..99f073a1 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\216\245\345\217\243.md.d4683051.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\216\245\345\217\243.md.10af3955.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"接口","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"定义接口","slug":"定义接口","link":"#定义接口","children":[]},{"level":2,"title":"实现接口","slug":"实现接口","link":"#实现接口","children":[]},{"level":2,"title":"接口的多态","slug":"接口的多态","link":"#接口的多态","children":[]},{"level":2,"title":"接口内部表示","slug":"接口内部表示","link":"#接口内部表示","children":[]},{"level":2,"title":"空接口","slug":"空接口","link":"#空接口","children":[]},{"level":2,"title":"类型断言","slug":"类型断言","link":"#类型断言","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/接口.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/接口.md"},o=l("",25),e=[o];function t(c,D,r,y,F,A){return a(),n("div",null,e)}const d=s(p,[["render",t]]);export{i as __pageData,d as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"接口","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"定义接口","slug":"定义接口","link":"#定义接口","children":[]},{"level":2,"title":"实现接口","slug":"实现接口","link":"#实现接口","children":[]},{"level":2,"title":"接口的多态","slug":"接口的多态","link":"#接口的多态","children":[]},{"level":2,"title":"接口内部表示","slug":"接口内部表示","link":"#接口内部表示","children":[]},{"level":2,"title":"空接口","slug":"空接口","link":"#空接口","children":[]},{"level":2,"title":"类型断言","slug":"类型断言","link":"#类型断言","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/接口.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/接口.md"},o=l("",25),e=[o];function t(c,D,r,y,F,A){return a(),n("div",null,e)}const d=s(p,[["render",t]]);export{i as __pageData,d as default};
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\225\260\347\273\204\343\200\201\345\210\207\347\211\207\343\200\201Map.md.7cd93973.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\225\260\347\273\204\343\200\201\345\210\207\347\211\207\343\200\201Map.md.076b5002.js"
similarity index 99%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\225\260\347\273\204\343\200\201\345\210\207\347\211\207\343\200\201Map.md.7cd93973.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\225\260\347\273\204\343\200\201\345\210\207\347\211\207\343\200\201Map.md.076b5002.js"
index 91811d67..9767a4f5 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\225\260\347\273\204\343\200\201\345\210\207\347\211\207\343\200\201Map.md.7cd93973.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\225\260\347\273\204\343\200\201\345\210\207\347\211\207\343\200\201Map.md.076b5002.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"数组、切片、Map","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"数组","slug":"数组","link":"#数组","children":[{"level":3,"title":"数组声明","slug":"数组声明","link":"#数组声明","children":[]},{"level":3,"title":"获取数组长度","slug":"获取数组长度","link":"#获取数组长度","children":[]},{"level":3,"title":"遍历数组","slug":"遍历数组","link":"#遍历数组","children":[]},{"level":3,"title":"数组是值类型","slug":"数组是值类型","link":"#数组是值类型","children":[]}]},{"level":2,"title":"Slice切片","slug":"slice切片","link":"#slice切片","children":[{"level":3,"title":"创建切片","slug":"创建切片","link":"#创建切片","children":[]},{"level":3,"title":"切片的长度和容量","slug":"切片的长度和容量","link":"#切片的长度和容量","children":[]},{"level":3,"title":"获取切片元素","slug":"获取切片元素","link":"#获取切片元素","children":[]},{"level":3,"title":"为切片追加元素","slug":"为切片追加元素","link":"#为切片追加元素","children":[]},{"level":3,"title":"多维切片","slug":"多维切片","link":"#多维切片","children":[]},{"level":3,"title":"Map","slug":"map","link":"#map","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/基础知识/数组、切片、Map.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/数组、切片、Map.md"},o=l(`

数组、切片、Map

数组

TIP

数组是值类型不是引用类型

数组是一个由固定长度特定类型元素组成的序列,一个数组可以由零个多个元素组成。由于长度固定,所以在实际应用中很少使用,一般都使用Slice(切片),它是可以动态的增长和收缩的序列

数组声明

声明数组的几种方式

Go
var variable_name [arr_length]value_type
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"数组、切片、Map","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"数组","slug":"数组","link":"#数组","children":[{"level":3,"title":"数组声明","slug":"数组声明","link":"#数组声明","children":[]},{"level":3,"title":"获取数组长度","slug":"获取数组长度","link":"#获取数组长度","children":[]},{"level":3,"title":"遍历数组","slug":"遍历数组","link":"#遍历数组","children":[]},{"level":3,"title":"数组是值类型","slug":"数组是值类型","link":"#数组是值类型","children":[]}]},{"level":2,"title":"Slice切片","slug":"slice切片","link":"#slice切片","children":[{"level":3,"title":"创建切片","slug":"创建切片","link":"#创建切片","children":[]},{"level":3,"title":"切片的长度和容量","slug":"切片的长度和容量","link":"#切片的长度和容量","children":[]},{"level":3,"title":"获取切片元素","slug":"获取切片元素","link":"#获取切片元素","children":[]},{"level":3,"title":"为切片追加元素","slug":"为切片追加元素","link":"#为切片追加元素","children":[]},{"level":3,"title":"多维切片","slug":"多维切片","link":"#多维切片","children":[]},{"level":3,"title":"Map","slug":"map","link":"#map","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/基础知识/数组、切片、Map.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/数组、切片、Map.md"},o=l(`

数组、切片、Map

数组

TIP

数组是值类型不是引用类型

数组是一个由固定长度特定类型元素组成的序列,一个数组可以由零个多个元素组成。由于长度固定,所以在实际应用中很少使用,一般都使用Slice(切片),它是可以动态的增长和收缩的序列

数组声明

声明数组的几种方式

Go
var variable_name [arr_length]value_type
 var variable_name = [arr_length]value_type{val1, val2, ...}
 variable_name := [arr_length]value_type{val1, val2, ...}
 variable_name := [...]value_type{val1, val2, ...}
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\225\260\347\273\204\343\200\201\345\210\207\347\211\207\343\200\201Map.md.7cd93973.lean.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\225\260\347\273\204\343\200\201\345\210\207\347\211\207\343\200\201Map.md.076b5002.lean.js"
similarity index 96%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\225\260\347\273\204\343\200\201\345\210\207\347\211\207\343\200\201Map.md.7cd93973.lean.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\225\260\347\273\204\343\200\201\345\210\207\347\211\207\343\200\201Map.md.076b5002.lean.js"
index 2ecfa172..8fec29aa 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\225\260\347\273\204\343\200\201\345\210\207\347\211\207\343\200\201Map.md.7cd93973.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\225\260\347\273\204\343\200\201\345\210\207\347\211\207\343\200\201Map.md.076b5002.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"数组、切片、Map","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"数组","slug":"数组","link":"#数组","children":[{"level":3,"title":"数组声明","slug":"数组声明","link":"#数组声明","children":[]},{"level":3,"title":"获取数组长度","slug":"获取数组长度","link":"#获取数组长度","children":[]},{"level":3,"title":"遍历数组","slug":"遍历数组","link":"#遍历数组","children":[]},{"level":3,"title":"数组是值类型","slug":"数组是值类型","link":"#数组是值类型","children":[]}]},{"level":2,"title":"Slice切片","slug":"slice切片","link":"#slice切片","children":[{"level":3,"title":"创建切片","slug":"创建切片","link":"#创建切片","children":[]},{"level":3,"title":"切片的长度和容量","slug":"切片的长度和容量","link":"#切片的长度和容量","children":[]},{"level":3,"title":"获取切片元素","slug":"获取切片元素","link":"#获取切片元素","children":[]},{"level":3,"title":"为切片追加元素","slug":"为切片追加元素","link":"#为切片追加元素","children":[]},{"level":3,"title":"多维切片","slug":"多维切片","link":"#多维切片","children":[]},{"level":3,"title":"Map","slug":"map","link":"#map","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/基础知识/数组、切片、Map.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/数组、切片、Map.md"},o=l("",88),e=[o];function t(c,D,r,F,y,C){return a(),n("div",null,e)}const d=s(p,[["render",t]]);export{i as __pageData,d as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"数组、切片、Map","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"数组","slug":"数组","link":"#数组","children":[{"level":3,"title":"数组声明","slug":"数组声明","link":"#数组声明","children":[]},{"level":3,"title":"获取数组长度","slug":"获取数组长度","link":"#获取数组长度","children":[]},{"level":3,"title":"遍历数组","slug":"遍历数组","link":"#遍历数组","children":[]},{"level":3,"title":"数组是值类型","slug":"数组是值类型","link":"#数组是值类型","children":[]}]},{"level":2,"title":"Slice切片","slug":"slice切片","link":"#slice切片","children":[{"level":3,"title":"创建切片","slug":"创建切片","link":"#创建切片","children":[]},{"level":3,"title":"切片的长度和容量","slug":"切片的长度和容量","link":"#切片的长度和容量","children":[]},{"level":3,"title":"获取切片元素","slug":"获取切片元素","link":"#获取切片元素","children":[]},{"level":3,"title":"为切片追加元素","slug":"为切片追加元素","link":"#为切片追加元素","children":[]},{"level":3,"title":"多维切片","slug":"多维切片","link":"#多维切片","children":[]},{"level":3,"title":"Map","slug":"map","link":"#map","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/基础知识/数组、切片、Map.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/数组、切片、Map.md"},o=l("",88),e=[o];function t(c,D,r,F,y,C){return a(),n("div",null,e)}const d=s(p,[["render",t]]);export{i as __pageData,d as default};
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_index.md.6ceea063.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_index.md.e49ea555.js"
similarity index 98%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_index.md.6ceea063.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_index.md.e49ea555.js"
index c07242f9..084b4112 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_index.md.6ceea063.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_index.md.e49ea555.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const _=JSON.parse('{"title":"文件操作","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"打开文件模式","slug":"打开文件模式","link":"#打开文件模式","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/文件操作/index.md"}'),e={name:"knowledge-deposition/GoLang/基础知识/文件操作/index.md"},o=l(`

文件操作

打开文件模式

Go
O_RDONLY int = syscall.O_RDONLY // open the file read-only.  只读
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const _=JSON.parse('{"title":"文件操作","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"打开文件模式","slug":"打开文件模式","link":"#打开文件模式","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/文件操作/index.md"}'),e={name:"knowledge-deposition/GoLang/基础知识/文件操作/index.md"},o=l(`

文件操作

打开文件模式

Go
O_RDONLY int = syscall.O_RDONLY // open the file read-only.  只读
 O_WRONLY int = syscall.O_WRONLY // open the file write-only. 只写
 O_RDWR   int = syscall.O_RDWR   // open the file read-write. 读写
 
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_index.md.6ceea063.lean.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_index.md.e49ea555.lean.js"
similarity index 88%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_index.md.6ceea063.lean.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_index.md.e49ea555.lean.js"
index 89de6b54..b6e9bb55 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_index.md.6ceea063.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_index.md.e49ea555.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const _=JSON.parse('{"title":"文件操作","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"打开文件模式","slug":"打开文件模式","link":"#打开文件模式","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/文件操作/index.md"}'),e={name:"knowledge-deposition/GoLang/基础知识/文件操作/index.md"},o=l("",3),t=[o];function p(c,r,i,y,D,C){return a(),n("div",null,t)}const d=s(e,[["render",p]]);export{_ as __pageData,d as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const _=JSON.parse('{"title":"文件操作","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"打开文件模式","slug":"打开文件模式","link":"#打开文件模式","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/文件操作/index.md"}'),e={name:"knowledge-deposition/GoLang/基础知识/文件操作/index.md"},o=l("",3),t=[o];function p(c,r,i,y,D,C){return a(),n("div",null,t)}const d=s(e,[["render",p]]);export{_ as __pageData,d as default};
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\345\206\231\346\226\207\344\273\266.md.39d043f9.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\345\206\231\346\226\207\344\273\266.md.50c41735.js"
similarity index 99%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\345\206\231\346\226\207\344\273\266.md.39d043f9.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\345\206\231\346\226\207\344\273\266.md.50c41735.js"
index 142903a8..d979adc6 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\345\206\231\346\226\207\344\273\266.md.39d043f9.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\345\206\231\346\226\207\344\273\266.md.50c41735.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"写文件","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"常规写","slug":"常规写","link":"#常规写","children":[]},{"level":2,"title":"快速写","slug":"快速写","link":"#快速写","children":[]},{"level":2,"title":"带缓冲写","slug":"带缓冲写","link":"#带缓冲写","children":[]},{"level":2,"title":"读取文件并写入另一个文件中","slug":"读取文件并写入另一个文件中","link":"#读取文件并写入另一个文件中","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/文件操作/写文件.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/文件操作/写文件.md"},o=l(`

写文件

常规写

Go
func (f *File) WriteString(s string) (n int, err error)
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"写文件","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"常规写","slug":"常规写","link":"#常规写","children":[]},{"level":2,"title":"快速写","slug":"快速写","link":"#快速写","children":[]},{"level":2,"title":"带缓冲写","slug":"带缓冲写","link":"#带缓冲写","children":[]},{"level":2,"title":"读取文件并写入另一个文件中","slug":"读取文件并写入另一个文件中","link":"#读取文件并写入另一个文件中","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/文件操作/写文件.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/文件操作/写文件.md"},o=l(`

写文件

常规写

Go
func (f *File) WriteString(s string) (n int, err error)
 
 func (f *File) Write(b []byte) (n int, err error) 
 

代码示例

Go
// 常规写入
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\345\206\231\346\226\207\344\273\266.md.39d043f9.lean.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\345\206\231\346\226\207\344\273\266.md.50c41735.lean.js"
similarity index 92%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\345\206\231\346\226\207\344\273\266.md.39d043f9.lean.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\345\206\231\346\226\207\344\273\266.md.50c41735.lean.js"
index c2455801..bbd01929 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\345\206\231\346\226\207\344\273\266.md.39d043f9.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\345\206\231\346\226\207\344\273\266.md.50c41735.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"写文件","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"常规写","slug":"常规写","link":"#常规写","children":[]},{"level":2,"title":"快速写","slug":"快速写","link":"#快速写","children":[]},{"level":2,"title":"带缓冲写","slug":"带缓冲写","link":"#带缓冲写","children":[]},{"level":2,"title":"读取文件并写入另一个文件中","slug":"读取文件并写入另一个文件中","link":"#读取文件并写入另一个文件中","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/文件操作/写文件.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/文件操作/写文件.md"},o=l("",17),e=[o];function t(c,D,r,F,y,A){return a(),n("div",null,e)}const u=s(p,[["render",t]]);export{i as __pageData,u as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"写文件","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"常规写","slug":"常规写","link":"#常规写","children":[]},{"level":2,"title":"快速写","slug":"快速写","link":"#快速写","children":[]},{"level":2,"title":"带缓冲写","slug":"带缓冲写","link":"#带缓冲写","children":[]},{"level":2,"title":"读取文件并写入另一个文件中","slug":"读取文件并写入另一个文件中","link":"#读取文件并写入另一个文件中","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/文件操作/写文件.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/文件操作/写文件.md"},o=l("",17),e=[o];function t(c,D,r,F,y,A){return a(),n("div",null,e)}const u=s(p,[["render",t]]);export{i as __pageData,u as default};
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\345\271\266\345\217\221\344\270\213\350\275\275\350\277\234\347\250\213\346\226\207\344\273\266.md.b33920dc.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\345\271\266\345\217\221\344\270\213\350\275\275\350\277\234\347\250\213\346\226\207\344\273\266.md.17c7d940.js"
similarity index 99%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\345\271\266\345\217\221\344\270\213\350\275\275\350\277\234\347\250\213\346\226\207\344\273\266.md.b33920dc.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\345\271\266\345\217\221\344\270\213\350\275\275\350\277\234\347\250\213\346\226\207\344\273\266.md.17c7d940.js"
index f1da0875..42de6517 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\345\271\266\345\217\221\344\270\213\350\275\275\350\277\234\347\250\213\346\226\207\344\273\266.md.b33920dc.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\345\271\266\345\217\221\344\270\213\350\275\275\350\277\234\347\250\213\346\226\207\344\273\266.md.17c7d940.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"并发下载远程文件","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"knowledge-deposition/GoLang/基础知识/文件操作/并发下载远程文件.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/文件操作/并发下载远程文件.md"},o=l(`

并发下载远程文件

Go
package main
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"并发下载远程文件","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"knowledge-deposition/GoLang/基础知识/文件操作/并发下载远程文件.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/文件操作/并发下载远程文件.md"},o=l(`

并发下载远程文件

Go
package main
 
 import (
 	"bufio"
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\345\271\266\345\217\221\344\270\213\350\275\275\350\277\234\347\250\213\346\226\207\344\273\266.md.b33920dc.lean.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\345\271\266\345\217\221\344\270\213\350\275\275\350\277\234\347\250\213\346\226\207\344\273\266.md.17c7d940.lean.js"
similarity index 87%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\345\271\266\345\217\221\344\270\213\350\275\275\350\277\234\347\250\213\346\226\207\344\273\266.md.b33920dc.lean.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\345\271\266\345\217\221\344\270\213\350\275\275\350\277\234\347\250\213\346\226\207\344\273\266.md.17c7d940.lean.js"
index dbad262b..5697726b 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\345\271\266\345\217\221\344\270\213\350\275\275\350\277\234\347\250\213\346\226\207\344\273\266.md.b33920dc.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\345\271\266\345\217\221\344\270\213\350\275\275\350\277\234\347\250\213\346\226\207\344\273\266.md.17c7d940.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"并发下载远程文件","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"knowledge-deposition/GoLang/基础知识/文件操作/并发下载远程文件.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/文件操作/并发下载远程文件.md"},o=l("",2),t=[o];function e(D,r,c,F,y,A){return a(),n("div",null,t)}const f=s(p,[["render",e]]);export{i as __pageData,f as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"并发下载远程文件","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"knowledge-deposition/GoLang/基础知识/文件操作/并发下载远程文件.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/文件操作/并发下载远程文件.md"},o=l("",2),t=[o];function e(D,r,c,F,y,A){return a(),n("div",null,t)}const f=s(p,[["render",e]]);export{i as __pageData,f as default};
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\346\226\207\344\273\266\345\244\215\345\210\266.md.b1187562.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\346\226\207\344\273\266\345\244\215\345\210\266.md.1f2e6f5a.js"
similarity index 99%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\346\226\207\344\273\266\345\244\215\345\210\266.md.b1187562.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\346\226\207\344\273\266\345\244\215\345\210\266.md.1f2e6f5a.js"
index 57c52441..c60a2d56 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\346\226\207\344\273\266\345\244\215\345\210\266.md.b1187562.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\346\226\207\344\273\266\345\244\215\345\210\266.md.1f2e6f5a.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"文件复制","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"knowledge-deposition/GoLang/基础知识/文件操作/文件复制.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/文件操作/文件复制.md"},o=l(`

文件复制

  • 使用io.Copy方法
Go
func copyFile() {
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"文件复制","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"knowledge-deposition/GoLang/基础知识/文件操作/文件复制.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/文件操作/文件复制.md"},o=l(`

文件复制

  • 使用io.Copy方法
Go
func copyFile() {
 	readFile, readFileErr := os.Open("1.jpg")
 	defer readFile.Close()
 	if readFileErr != nil {
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\346\226\207\344\273\266\345\244\215\345\210\266.md.b1187562.lean.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\346\226\207\344\273\266\345\244\215\345\210\266.md.1f2e6f5a.lean.js"
similarity index 86%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\346\226\207\344\273\266\345\244\215\345\210\266.md.b1187562.lean.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\346\226\207\344\273\266\345\244\215\345\210\266.md.1f2e6f5a.lean.js"
index ddda203a..e266a7ed 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\346\226\207\344\273\266\345\244\215\345\210\266.md.b1187562.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\346\226\207\344\273\266\345\244\215\345\210\266.md.1f2e6f5a.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"文件复制","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"knowledge-deposition/GoLang/基础知识/文件操作/文件复制.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/文件操作/文件复制.md"},o=l("",3),e=[o];function t(r,c,D,F,y,A){return a(),n("div",null,e)}const d=s(p,[["render",t]]);export{i as __pageData,d as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"文件复制","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"knowledge-deposition/GoLang/基础知识/文件操作/文件复制.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/文件操作/文件复制.md"},o=l("",3),e=[o];function t(r,c,D,F,y,A){return a(),n("div",null,e)}const d=s(p,[["render",t]]);export{i as __pageData,d as default};
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\347\233\256\345\275\225\346\223\215\344\275\234.md.fb7153be.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\347\233\256\345\275\225\346\223\215\344\275\234.md.3cdb8f98.js"
similarity index 99%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\347\233\256\345\275\225\346\223\215\344\275\234.md.fb7153be.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\347\233\256\345\275\225\346\223\215\344\275\234.md.3cdb8f98.js"
index 58bad233..27ec508c 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\347\233\256\345\275\225\346\223\215\344\275\234.md.fb7153be.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\347\233\256\345\275\225\346\223\215\344\275\234.md.3cdb8f98.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"目录操作","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"读取目录下文件","slug":"读取目录下文件","link":"#读取目录下文件","children":[]},{"level":2,"title":"一次性获取目标路径下所有的文件","slug":"一次性获取目标路径下所有的文件","link":"#一次性获取目标路径下所有的文件","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/文件操作/目录操作.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/文件操作/目录操作.md"},o=l(`

目录操作

读取目录下文件

Go
func dirOperation() {
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"目录操作","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"读取目录下文件","slug":"读取目录下文件","link":"#读取目录下文件","children":[]},{"level":2,"title":"一次性获取目标路径下所有的文件","slug":"一次性获取目标路径下所有的文件","link":"#一次性获取目标路径下所有的文件","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/文件操作/目录操作.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/文件操作/目录操作.md"},o=l(`

目录操作

读取目录下文件

Go
func dirOperation() {
 	dirEntry, err := os.ReadDir(".")
 	if err != nil {
 		fmt.Println("dirEntry err", err)
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\347\233\256\345\275\225\346\223\215\344\275\234.md.fb7153be.lean.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\347\233\256\345\275\225\346\223\215\344\275\234.md.3cdb8f98.lean.js"
similarity index 91%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\347\233\256\345\275\225\346\223\215\344\275\234.md.fb7153be.lean.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\347\233\256\345\275\225\346\223\215\344\275\234.md.3cdb8f98.lean.js"
index 16e98390..f3231020 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\347\233\256\345\275\225\346\223\215\344\275\234.md.fb7153be.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\347\233\256\345\275\225\346\223\215\344\275\234.md.3cdb8f98.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"目录操作","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"读取目录下文件","slug":"读取目录下文件","link":"#读取目录下文件","children":[]},{"level":2,"title":"一次性获取目标路径下所有的文件","slug":"一次性获取目标路径下所有的文件","link":"#一次性获取目标路径下所有的文件","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/文件操作/目录操作.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/文件操作/目录操作.md"},o=l("",8),t=[o];function e(c,D,r,F,y,A){return a(),n("div",null,t)}const f=s(p,[["render",e]]);export{i as __pageData,f as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"目录操作","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"读取目录下文件","slug":"读取目录下文件","link":"#读取目录下文件","children":[]},{"level":2,"title":"一次性获取目标路径下所有的文件","slug":"一次性获取目标路径下所有的文件","link":"#一次性获取目标路径下所有的文件","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/文件操作/目录操作.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/文件操作/目录操作.md"},o=l("",8),t=[o];function e(c,D,r,F,y,A){return a(),n("div",null,t)}const f=s(p,[["render",e]]);export{i as __pageData,f as default};
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\350\257\273\345\217\226\351\205\215\347\275\256\346\226\207\344\273\266.md.a630c503.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\350\257\273\345\217\226\351\205\215\347\275\256\346\226\207\344\273\266.md.293ba402.js"
similarity index 99%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\350\257\273\345\217\226\351\205\215\347\275\256\346\226\207\344\273\266.md.a630c503.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\350\257\273\345\217\226\351\205\215\347\275\256\346\226\207\344\273\266.md.293ba402.js"
index 3be3b8e7..aa87a320 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\350\257\273\345\217\226\351\205\215\347\275\256\346\226\207\344\273\266.md.a630c503.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\350\257\273\345\217\226\351\205\215\347\275\256\346\226\207\344\273\266.md.293ba402.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"读取配置文件","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"knowledge-deposition/GoLang/基础知识/文件操作/读取配置文件.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/文件操作/读取配置文件.md"},o=l(`

读取配置文件

使用viper读取jsonyaml或者其他配置文件

  • 目录结构
shell
.
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"读取配置文件","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"knowledge-deposition/GoLang/基础知识/文件操作/读取配置文件.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/文件操作/读取配置文件.md"},o=l(`

读取配置文件

使用viper读取jsonyaml或者其他配置文件

  • 目录结构
shell
.
 ├── config
    ├── user.json
    └── user.yaml
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\350\257\273\345\217\226\351\205\215\347\275\256\346\226\207\344\273\266.md.a630c503.lean.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\350\257\273\345\217\226\351\205\215\347\275\256\346\226\207\344\273\266.md.293ba402.lean.js"
similarity index 86%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\350\257\273\345\217\226\351\205\215\347\275\256\346\226\207\344\273\266.md.a630c503.lean.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\350\257\273\345\217\226\351\205\215\347\275\256\346\226\207\344\273\266.md.293ba402.lean.js"
index 3ea43216..6155fdaf 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\350\257\273\345\217\226\351\205\215\347\275\256\346\226\207\344\273\266.md.a630c503.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\350\257\273\345\217\226\351\205\215\347\275\256\346\226\207\344\273\266.md.293ba402.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"读取配置文件","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"knowledge-deposition/GoLang/基础知识/文件操作/读取配置文件.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/文件操作/读取配置文件.md"},o=l("",10),e=[o];function t(c,D,r,F,y,C){return a(),n("div",null,e)}const u=s(p,[["render",t]]);export{i as __pageData,u as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"读取配置文件","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"knowledge-deposition/GoLang/基础知识/文件操作/读取配置文件.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/文件操作/读取配置文件.md"},o=l("",10),e=[o];function t(c,D,r,F,y,C){return a(),n("div",null,e)}const u=s(p,[["render",t]]);export{i as __pageData,u as default};
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\350\257\273\346\226\207\344\273\266.md.adf33587.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\350\257\273\346\226\207\344\273\266.md.bfa7e4a3.js"
similarity index 99%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\350\257\273\346\226\207\344\273\266.md.adf33587.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\350\257\273\346\226\207\344\273\266.md.bfa7e4a3.js"
index e2012591..e7ea88af 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\350\257\273\346\226\207\344\273\266.md.adf33587.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\350\257\273\346\226\207\344\273\266.md.bfa7e4a3.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const C=JSON.parse('{"title":"读文件","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"一次读完整个文件","slug":"一次读完整个文件","link":"#一次读完整个文件","children":[]},{"level":2,"title":"读取指定长度(单位:字节)","slug":"读取指定长度-单位-字节","link":"#读取指定长度-单位-字节","children":[]},{"level":2,"title":"读取片段","slug":"读取片段","link":"#读取片段","children":[]},{"level":2,"title":"带缓冲读","slug":"带缓冲读","link":"#带缓冲读","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/文件操作/读文件.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/文件操作/读文件.md"},o=l(`

读文件

一次读完整个文件

  • 使用os.ReadFile方法
Go
func ReadFile(name string) ([]byte, error)
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const C=JSON.parse('{"title":"读文件","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"一次读完整个文件","slug":"一次读完整个文件","link":"#一次读完整个文件","children":[]},{"level":2,"title":"读取指定长度(单位:字节)","slug":"读取指定长度-单位-字节","link":"#读取指定长度-单位-字节","children":[]},{"level":2,"title":"读取片段","slug":"读取片段","link":"#读取片段","children":[]},{"level":2,"title":"带缓冲读","slug":"带缓冲读","link":"#带缓冲读","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/文件操作/读文件.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/文件操作/读文件.md"},o=l(`

读文件

一次读完整个文件

  • 使用os.ReadFile方法
Go
func ReadFile(name string) ([]byte, error)
 

代码示例

要读取的1.txt文件

Go
你好,go语言 
 你好hello world
 从零开始学习go
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\350\257\273\346\226\207\344\273\266.md.adf33587.lean.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\350\257\273\346\226\207\344\273\266.md.bfa7e4a3.lean.js"
similarity index 93%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\350\257\273\346\226\207\344\273\266.md.adf33587.lean.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\350\257\273\346\226\207\344\273\266.md.bfa7e4a3.lean.js"
index b24a9a90..358a6272 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\350\257\273\346\226\207\344\273\266.md.adf33587.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\226\207\344\273\266\346\223\215\344\275\234_\350\257\273\346\226\207\344\273\266.md.bfa7e4a3.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const C=JSON.parse('{"title":"读文件","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"一次读完整个文件","slug":"一次读完整个文件","link":"#一次读完整个文件","children":[]},{"level":2,"title":"读取指定长度(单位:字节)","slug":"读取指定长度-单位-字节","link":"#读取指定长度-单位-字节","children":[]},{"level":2,"title":"读取片段","slug":"读取片段","link":"#读取片段","children":[]},{"level":2,"title":"带缓冲读","slug":"带缓冲读","link":"#带缓冲读","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/文件操作/读文件.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/文件操作/读文件.md"},o=l("",20),e=[o];function t(c,r,D,F,y,A){return a(),n("div",null,e)}const d=s(p,[["render",t]]);export{C as __pageData,d as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const C=JSON.parse('{"title":"读文件","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"一次读完整个文件","slug":"一次读完整个文件","link":"#一次读完整个文件","children":[]},{"level":2,"title":"读取指定长度(单位:字节)","slug":"读取指定长度-单位-字节","link":"#读取指定长度-单位-字节","children":[]},{"level":2,"title":"读取片段","slug":"读取片段","link":"#读取片段","children":[]},{"level":2,"title":"带缓冲读","slug":"带缓冲读","link":"#带缓冲读","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/文件操作/读文件.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/文件操作/读文件.md"},o=l("",20),e=[o];function t(c,r,D,F,y,A){return a(),n("div",null,e)}const d=s(p,[["render",t]]);export{C as __pageData,d as default};
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\265\201\347\250\213\346\216\247\345\210\266.md.56ff6296.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\265\201\347\250\213\346\216\247\345\210\266.md.e768e476.js"
similarity index 99%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\265\201\347\250\213\346\216\247\345\210\266.md.56ff6296.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\265\201\347\250\213\346\216\247\345\210\266.md.e768e476.js"
index a635f550..ff07cbd4 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\265\201\347\250\213\346\216\247\345\210\266.md.56ff6296.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\265\201\347\250\213\346\216\247\345\210\266.md.e768e476.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const C=JSON.parse('{"title":"流程控制","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"for循环","slug":"for循环","link":"#for循环","children":[]},{"level":2,"title":"if else","slug":"if-else","link":"#if-else","children":[]},{"level":2,"title":"switch case","slug":"switch-case","link":"#switch-case","children":[]},{"level":2,"title":"defer 延迟调用","slug":"defer-延迟调用","link":"#defer-延迟调用","children":[{"level":3,"title":"defer延迟调用函数","slug":"defer延迟调用函数","link":"#defer延迟调用函数","children":[]},{"level":3,"title":"值的修改对defer调用打印的影响","slug":"值的修改对defer调用打印的影响","link":"#值的修改对defer调用打印的影响","children":[]},{"level":3,"title":"延迟调用方法","slug":"延迟调用方法","link":"#延迟调用方法","children":[]},{"level":3,"title":"defer栈","slug":"defer栈","link":"#defer栈","children":[]},{"level":3,"title":"defer栈作用域","slug":"defer栈作用域","link":"#defer栈作用域","children":[]},{"level":3,"title":"defer和return和函数使用匿名返回值","slug":"defer和return和函数使用匿名返回值","link":"#defer和return和函数使用匿名返回值","children":[]},{"level":3,"title":"defer和return和函数使用命名返回值","slug":"defer和return和函数使用命名返回值","link":"#defer和return和函数使用命名返回值","children":[]},{"level":3,"title":"当defer遇到panic","slug":"当defer遇到panic","link":"#当defer遇到panic","children":[]},{"level":3,"title":"使用recover捕获panic","slug":"使用recover捕获panic","link":"#使用recover捕获panic","children":[]}]},{"level":2,"title":"goto无条件跳转","slug":"goto无条件跳转","link":"#goto无条件跳转","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/流程控制.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/流程控制.md"},o=l(`

流程控制

for循环

  • 循环语句中不用加()
  • for后面不跟随表达式等价于JavaScript中的while(true),此时语句中要有break/return,不然会无限循环
Go
package main
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const C=JSON.parse('{"title":"流程控制","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"for循环","slug":"for循环","link":"#for循环","children":[]},{"level":2,"title":"if else","slug":"if-else","link":"#if-else","children":[]},{"level":2,"title":"switch case","slug":"switch-case","link":"#switch-case","children":[]},{"level":2,"title":"defer 延迟调用","slug":"defer-延迟调用","link":"#defer-延迟调用","children":[{"level":3,"title":"defer延迟调用函数","slug":"defer延迟调用函数","link":"#defer延迟调用函数","children":[]},{"level":3,"title":"值的修改对defer调用打印的影响","slug":"值的修改对defer调用打印的影响","link":"#值的修改对defer调用打印的影响","children":[]},{"level":3,"title":"延迟调用方法","slug":"延迟调用方法","link":"#延迟调用方法","children":[]},{"level":3,"title":"defer栈","slug":"defer栈","link":"#defer栈","children":[]},{"level":3,"title":"defer栈作用域","slug":"defer栈作用域","link":"#defer栈作用域","children":[]},{"level":3,"title":"defer和return和函数使用匿名返回值","slug":"defer和return和函数使用匿名返回值","link":"#defer和return和函数使用匿名返回值","children":[]},{"level":3,"title":"defer和return和函数使用命名返回值","slug":"defer和return和函数使用命名返回值","link":"#defer和return和函数使用命名返回值","children":[]},{"level":3,"title":"当defer遇到panic","slug":"当defer遇到panic","link":"#当defer遇到panic","children":[]},{"level":3,"title":"使用recover捕获panic","slug":"使用recover捕获panic","link":"#使用recover捕获panic","children":[]}]},{"level":2,"title":"goto无条件跳转","slug":"goto无条件跳转","link":"#goto无条件跳转","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/流程控制.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/流程控制.md"},o=l(`

流程控制

for循环

  • 循环语句中不用加()
  • for后面不跟随表达式等价于JavaScript中的while(true),此时语句中要有break/return,不然会无限循环
Go
package main
 
 import "fmt"
 
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\265\201\347\250\213\346\216\247\345\210\266.md.56ff6296.lean.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\265\201\347\250\213\346\216\247\345\210\266.md.e768e476.lean.js"
similarity index 97%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\265\201\347\250\213\346\216\247\345\210\266.md.56ff6296.lean.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\265\201\347\250\213\346\216\247\345\210\266.md.e768e476.lean.js"
index 26887815..7d3d3d42 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\265\201\347\250\213\346\216\247\345\210\266.md.56ff6296.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\346\265\201\347\250\213\346\216\247\345\210\266.md.e768e476.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const C=JSON.parse('{"title":"流程控制","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"for循环","slug":"for循环","link":"#for循环","children":[]},{"level":2,"title":"if else","slug":"if-else","link":"#if-else","children":[]},{"level":2,"title":"switch case","slug":"switch-case","link":"#switch-case","children":[]},{"level":2,"title":"defer 延迟调用","slug":"defer-延迟调用","link":"#defer-延迟调用","children":[{"level":3,"title":"defer延迟调用函数","slug":"defer延迟调用函数","link":"#defer延迟调用函数","children":[]},{"level":3,"title":"值的修改对defer调用打印的影响","slug":"值的修改对defer调用打印的影响","link":"#值的修改对defer调用打印的影响","children":[]},{"level":3,"title":"延迟调用方法","slug":"延迟调用方法","link":"#延迟调用方法","children":[]},{"level":3,"title":"defer栈","slug":"defer栈","link":"#defer栈","children":[]},{"level":3,"title":"defer栈作用域","slug":"defer栈作用域","link":"#defer栈作用域","children":[]},{"level":3,"title":"defer和return和函数使用匿名返回值","slug":"defer和return和函数使用匿名返回值","link":"#defer和return和函数使用匿名返回值","children":[]},{"level":3,"title":"defer和return和函数使用命名返回值","slug":"defer和return和函数使用命名返回值","link":"#defer和return和函数使用命名返回值","children":[]},{"level":3,"title":"当defer遇到panic","slug":"当defer遇到panic","link":"#当defer遇到panic","children":[]},{"level":3,"title":"使用recover捕获panic","slug":"使用recover捕获panic","link":"#使用recover捕获panic","children":[]}]},{"level":2,"title":"goto无条件跳转","slug":"goto无条件跳转","link":"#goto无条件跳转","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/流程控制.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/流程控制.md"},o=l("",51),e=[o];function t(c,r,D,F,y,i){return a(),n("div",null,e)}const d=s(p,[["render",t]]);export{C as __pageData,d as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const C=JSON.parse('{"title":"流程控制","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"for循环","slug":"for循环","link":"#for循环","children":[]},{"level":2,"title":"if else","slug":"if-else","link":"#if-else","children":[]},{"level":2,"title":"switch case","slug":"switch-case","link":"#switch-case","children":[]},{"level":2,"title":"defer 延迟调用","slug":"defer-延迟调用","link":"#defer-延迟调用","children":[{"level":3,"title":"defer延迟调用函数","slug":"defer延迟调用函数","link":"#defer延迟调用函数","children":[]},{"level":3,"title":"值的修改对defer调用打印的影响","slug":"值的修改对defer调用打印的影响","link":"#值的修改对defer调用打印的影响","children":[]},{"level":3,"title":"延迟调用方法","slug":"延迟调用方法","link":"#延迟调用方法","children":[]},{"level":3,"title":"defer栈","slug":"defer栈","link":"#defer栈","children":[]},{"level":3,"title":"defer栈作用域","slug":"defer栈作用域","link":"#defer栈作用域","children":[]},{"level":3,"title":"defer和return和函数使用匿名返回值","slug":"defer和return和函数使用匿名返回值","link":"#defer和return和函数使用匿名返回值","children":[]},{"level":3,"title":"defer和return和函数使用命名返回值","slug":"defer和return和函数使用命名返回值","link":"#defer和return和函数使用命名返回值","children":[]},{"level":3,"title":"当defer遇到panic","slug":"当defer遇到panic","link":"#当defer遇到panic","children":[]},{"level":3,"title":"使用recover捕获panic","slug":"使用recover捕获panic","link":"#使用recover捕获panic","children":[]}]},{"level":2,"title":"goto无条件跳转","slug":"goto无条件跳转","link":"#goto无条件跳转","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/流程控制.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/流程控制.md"},o=l("",51),e=[o];function t(c,r,D,F,y,i){return a(),n("div",null,e)}const d=s(p,[["render",t]]);export{C as __pageData,d as default};
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\216\257\345\242\203\346\220\255\345\273\272.md.434b2f33.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\216\257\345\242\203\346\220\255\345\273\272.md.ee9688ce.js"
similarity index 99%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\216\257\345\242\203\346\220\255\345\273\272.md.434b2f33.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\216\257\345\242\203\346\220\255\345\273\272.md.ee9688ce.js"
index 2fcceeca..bc361df5 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\216\257\345\242\203\346\220\255\345\273\272.md.434b2f33.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\216\257\345\242\203\346\220\255\345\273\272.md.ee9688ce.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const F=JSON.parse('{"title":"开发环境搭建","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"下载Go","slug":"下载go","link":"#下载go","children":[]},{"level":2,"title":"查看go版本","slug":"查看go版本","link":"#查看go版本","children":[]},{"level":2,"title":"初始化一个项目","slug":"初始化一个项目","link":"#初始化一个项目","children":[]},{"level":2,"title":"创建main.go文件","slug":"创建main-go文件","link":"#创建main-go文件","children":[]},{"level":2,"title":"使用第三方库","slug":"使用第三方库","link":"#使用第三方库","children":[]},{"level":2,"title":"添加和删除依赖","slug":"添加和删除依赖","link":"#添加和删除依赖","children":[]},{"level":2,"title":"需要对远程仓库的源码做修改","slug":"需要对远程仓库的源码做修改","link":"#需要对远程仓库的源码做修改","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/环境搭建.md"}'),o={name:"knowledge-deposition/GoLang/基础知识/环境搭建.md"},e=l(`

开发环境搭建

官网地址

下载Go

shell
brew install go
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const F=JSON.parse('{"title":"开发环境搭建","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"下载Go","slug":"下载go","link":"#下载go","children":[]},{"level":2,"title":"查看go版本","slug":"查看go版本","link":"#查看go版本","children":[]},{"level":2,"title":"初始化一个项目","slug":"初始化一个项目","link":"#初始化一个项目","children":[]},{"level":2,"title":"创建main.go文件","slug":"创建main-go文件","link":"#创建main-go文件","children":[]},{"level":2,"title":"使用第三方库","slug":"使用第三方库","link":"#使用第三方库","children":[]},{"level":2,"title":"添加和删除依赖","slug":"添加和删除依赖","link":"#添加和删除依赖","children":[]},{"level":2,"title":"需要对远程仓库的源码做修改","slug":"需要对远程仓库的源码做修改","link":"#需要对远程仓库的源码做修改","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/环境搭建.md"}'),o={name:"knowledge-deposition/GoLang/基础知识/环境搭建.md"},e=l(`

开发环境搭建

官网地址

下载Go

shell
brew install go
 

查看go版本

shell
go version
 # go version go1.20.2 darwin/arm64
 

初始化一个项目

TIP

usernameproject最好都小写

shell
mkdir hello
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\216\257\345\242\203\346\220\255\345\273\272.md.434b2f33.lean.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\216\257\345\242\203\346\220\255\345\273\272.md.ee9688ce.lean.js"
similarity index 94%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\216\257\345\242\203\346\220\255\345\273\272.md.434b2f33.lean.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\216\257\345\242\203\346\220\255\345\273\272.md.ee9688ce.lean.js"
index 79cda42a..143f408c 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\216\257\345\242\203\346\220\255\345\273\272.md.434b2f33.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\216\257\345\242\203\346\220\255\345\273\272.md.ee9688ce.lean.js"
@@ -1 +1 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const F=JSON.parse('{"title":"开发环境搭建","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"下载Go","slug":"下载go","link":"#下载go","children":[]},{"level":2,"title":"查看go版本","slug":"查看go版本","link":"#查看go版本","children":[]},{"level":2,"title":"初始化一个项目","slug":"初始化一个项目","link":"#初始化一个项目","children":[]},{"level":2,"title":"创建main.go文件","slug":"创建main-go文件","link":"#创建main-go文件","children":[]},{"level":2,"title":"使用第三方库","slug":"使用第三方库","link":"#使用第三方库","children":[]},{"level":2,"title":"添加和删除依赖","slug":"添加和删除依赖","link":"#添加和删除依赖","children":[]},{"level":2,"title":"需要对远程仓库的源码做修改","slug":"需要对远程仓库的源码做修改","link":"#需要对远程仓库的源码做修改","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/环境搭建.md"}'),o={name:"knowledge-deposition/GoLang/基础知识/环境搭建.md"},e=l("",31),p=[e];function c(t,i,r,d,y,C){return n(),a("div",null,p)}const A=s(o,[["render",c]]);export{F as __pageData,A as default};
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const F=JSON.parse('{"title":"开发环境搭建","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"下载Go","slug":"下载go","link":"#下载go","children":[]},{"level":2,"title":"查看go版本","slug":"查看go版本","link":"#查看go版本","children":[]},{"level":2,"title":"初始化一个项目","slug":"初始化一个项目","link":"#初始化一个项目","children":[]},{"level":2,"title":"创建main.go文件","slug":"创建main-go文件","link":"#创建main-go文件","children":[]},{"level":2,"title":"使用第三方库","slug":"使用第三方库","link":"#使用第三方库","children":[]},{"level":2,"title":"添加和删除依赖","slug":"添加和删除依赖","link":"#添加和删除依赖","children":[]},{"level":2,"title":"需要对远程仓库的源码做修改","slug":"需要对远程仓库的源码做修改","link":"#需要对远程仓库的源码做修改","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/环境搭建.md"}'),o={name:"knowledge-deposition/GoLang/基础知识/环境搭建.md"},e=l("",31),p=[e];function c(t,i,r,d,y,C){return n(),a("div",null,p)}const A=s(o,[["render",c]]);export{F as __pageData,A as default};
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\273\223\346\236\204\344\275\223.md.589c4277.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\273\223\346\236\204\344\275\223.md.9cf50ee3.js"
similarity index 99%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\273\223\346\236\204\344\275\223.md.589c4277.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\273\223\346\236\204\344\275\223.md.9cf50ee3.js"
index 0267f0b3..bdbad813 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\273\223\346\236\204\344\275\223.md.589c4277.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\273\223\346\236\204\344\275\223.md.9cf50ee3.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"结构体","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"声明结构体","slug":"声明结构体","link":"#声明结构体","children":[]},{"level":2,"title":"创建结构体","slug":"创建结构体","link":"#创建结构体","children":[{"level":3,"title":"创建具名结构体","slug":"创建具名结构体","link":"#创建具名结构体","children":[]},{"level":3,"title":"创建匿名结构体","slug":"创建匿名结构体","link":"#创建匿名结构体","children":[]}]},{"level":2,"title":"结构体的零值","slug":"结构体的零值","link":"#结构体的零值","children":[]},{"level":2,"title":"操作结构体字段","slug":"操作结构体字段","link":"#操作结构体字段","children":[]},{"level":2,"title":"指向结构体的指针","slug":"指向结构体的指针","link":"#指向结构体的指针","children":[]},{"level":2,"title":"结构体中的匿名字段","slug":"结构体中的匿名字段","link":"#结构体中的匿名字段","children":[]},{"level":2,"title":"嵌套结构体","slug":"嵌套结构体","link":"#嵌套结构体","children":[]},{"level":2,"title":"结构体中的提升字段","slug":"结构体中的提升字段","link":"#结构体中的提升字段","children":[]},{"level":2,"title":"结构体比较","slug":"结构体比较","link":"#结构体比较","children":[]},{"level":2,"title":"为结构体定义方法","slug":"为结构体定义方法","link":"#为结构体定义方法","children":[{"level":3,"title":"方法传参方式","slug":"方法传参方式","link":"#方法传参方式","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/基础知识/结构体.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/结构体.md"},o=l(`

结构体

声明结构体

Go
type struct_name struct {
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"结构体","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"声明结构体","slug":"声明结构体","link":"#声明结构体","children":[]},{"level":2,"title":"创建结构体","slug":"创建结构体","link":"#创建结构体","children":[{"level":3,"title":"创建具名结构体","slug":"创建具名结构体","link":"#创建具名结构体","children":[]},{"level":3,"title":"创建匿名结构体","slug":"创建匿名结构体","link":"#创建匿名结构体","children":[]}]},{"level":2,"title":"结构体的零值","slug":"结构体的零值","link":"#结构体的零值","children":[]},{"level":2,"title":"操作结构体字段","slug":"操作结构体字段","link":"#操作结构体字段","children":[]},{"level":2,"title":"指向结构体的指针","slug":"指向结构体的指针","link":"#指向结构体的指针","children":[]},{"level":2,"title":"结构体中的匿名字段","slug":"结构体中的匿名字段","link":"#结构体中的匿名字段","children":[]},{"level":2,"title":"嵌套结构体","slug":"嵌套结构体","link":"#嵌套结构体","children":[]},{"level":2,"title":"结构体中的提升字段","slug":"结构体中的提升字段","link":"#结构体中的提升字段","children":[]},{"level":2,"title":"结构体比较","slug":"结构体比较","link":"#结构体比较","children":[]},{"level":2,"title":"为结构体定义方法","slug":"为结构体定义方法","link":"#为结构体定义方法","children":[{"level":3,"title":"方法传参方式","slug":"方法传参方式","link":"#方法传参方式","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/基础知识/结构体.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/结构体.md"},o=l(`

结构体

声明结构体

Go
type struct_name struct {
   property_one  property_one_type
   property_two  property_two_type
   ...
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\273\223\346\236\204\344\275\223.md.589c4277.lean.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\273\223\346\236\204\344\275\223.md.9cf50ee3.lean.js"
similarity index 96%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\273\223\346\236\204\344\275\223.md.589c4277.lean.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\273\223\346\236\204\344\275\223.md.9cf50ee3.lean.js"
index 1d9210df..2d96074b 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\273\223\346\236\204\344\275\223.md.589c4277.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\273\223\346\236\204\344\275\223.md.9cf50ee3.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"结构体","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"声明结构体","slug":"声明结构体","link":"#声明结构体","children":[]},{"level":2,"title":"创建结构体","slug":"创建结构体","link":"#创建结构体","children":[{"level":3,"title":"创建具名结构体","slug":"创建具名结构体","link":"#创建具名结构体","children":[]},{"level":3,"title":"创建匿名结构体","slug":"创建匿名结构体","link":"#创建匿名结构体","children":[]}]},{"level":2,"title":"结构体的零值","slug":"结构体的零值","link":"#结构体的零值","children":[]},{"level":2,"title":"操作结构体字段","slug":"操作结构体字段","link":"#操作结构体字段","children":[]},{"level":2,"title":"指向结构体的指针","slug":"指向结构体的指针","link":"#指向结构体的指针","children":[]},{"level":2,"title":"结构体中的匿名字段","slug":"结构体中的匿名字段","link":"#结构体中的匿名字段","children":[]},{"level":2,"title":"嵌套结构体","slug":"嵌套结构体","link":"#嵌套结构体","children":[]},{"level":2,"title":"结构体中的提升字段","slug":"结构体中的提升字段","link":"#结构体中的提升字段","children":[]},{"level":2,"title":"结构体比较","slug":"结构体比较","link":"#结构体比较","children":[]},{"level":2,"title":"为结构体定义方法","slug":"为结构体定义方法","link":"#为结构体定义方法","children":[{"level":3,"title":"方法传参方式","slug":"方法传参方式","link":"#方法传参方式","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/基础知识/结构体.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/结构体.md"},o=l("",49),e=[o];function t(c,r,D,y,F,C){return a(),n("div",null,e)}const u=s(p,[["render",t]]);export{i as __pageData,u as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"结构体","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"声明结构体","slug":"声明结构体","link":"#声明结构体","children":[]},{"level":2,"title":"创建结构体","slug":"创建结构体","link":"#创建结构体","children":[{"level":3,"title":"创建具名结构体","slug":"创建具名结构体","link":"#创建具名结构体","children":[]},{"level":3,"title":"创建匿名结构体","slug":"创建匿名结构体","link":"#创建匿名结构体","children":[]}]},{"level":2,"title":"结构体的零值","slug":"结构体的零值","link":"#结构体的零值","children":[]},{"level":2,"title":"操作结构体字段","slug":"操作结构体字段","link":"#操作结构体字段","children":[]},{"level":2,"title":"指向结构体的指针","slug":"指向结构体的指针","link":"#指向结构体的指针","children":[]},{"level":2,"title":"结构体中的匿名字段","slug":"结构体中的匿名字段","link":"#结构体中的匿名字段","children":[]},{"level":2,"title":"嵌套结构体","slug":"嵌套结构体","link":"#嵌套结构体","children":[]},{"level":2,"title":"结构体中的提升字段","slug":"结构体中的提升字段","link":"#结构体中的提升字段","children":[]},{"level":2,"title":"结构体比较","slug":"结构体比较","link":"#结构体比较","children":[]},{"level":2,"title":"为结构体定义方法","slug":"为结构体定义方法","link":"#为结构体定义方法","children":[{"level":3,"title":"方法传参方式","slug":"方法传参方式","link":"#方法传参方式","children":[]}]}],"relativePath":"knowledge-deposition/GoLang/基础知识/结构体.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/结构体.md"},o=l("",49),e=[o];function t(c,r,D,y,F,C){return a(),n("div",null,e)}const u=s(p,[["render",t]]);export{i as __pageData,u as default};
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\275\221\347\273\234_HTTP.md.72c76449.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\275\221\347\273\234_HTTP.md.c26b4f8c.js"
similarity index 99%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\275\221\347\273\234_HTTP.md.72c76449.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\275\221\347\273\234_HTTP.md.c26b4f8c.js"
index b9f558ec..1afdbf45 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\275\221\347\273\234_HTTP.md.72c76449.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\275\221\347\273\234_HTTP.md.c26b4f8c.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"HTTP","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"HTTP服务端","slug":"http服务端","link":"#http服务端","children":[]},{"level":2,"title":"HTTP客户端","slug":"http客户端","link":"#http客户端","children":[]},{"level":2,"title":"HTTP常用状态码","slug":"http常用状态码","link":"#http常用状态码","children":[]},{"level":2,"title":"实战","slug":"实战","link":"#实战","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/网络/HTTP.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/网络/HTTP.md"},o=l(`

HTTP

HTTP服务端

  • 一个最简单的服务
Go
package main
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"HTTP","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"HTTP服务端","slug":"http服务端","link":"#http服务端","children":[]},{"level":2,"title":"HTTP客户端","slug":"http客户端","link":"#http客户端","children":[]},{"level":2,"title":"HTTP常用状态码","slug":"http常用状态码","link":"#http常用状态码","children":[]},{"level":2,"title":"实战","slug":"实战","link":"#实战","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/网络/HTTP.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/网络/HTTP.md"},o=l(`

HTTP

HTTP服务端

  • 一个最简单的服务
Go
package main
 
 import (
 	"fmt"
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\275\221\347\273\234_HTTP.md.72c76449.lean.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\275\221\347\273\234_HTTP.md.c26b4f8c.lean.js"
similarity index 92%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\275\221\347\273\234_HTTP.md.72c76449.lean.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\275\221\347\273\234_HTTP.md.c26b4f8c.lean.js"
index 3a27ab5c..05857d4d 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\275\221\347\273\234_HTTP.md.72c76449.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\275\221\347\273\234_HTTP.md.c26b4f8c.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"HTTP","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"HTTP服务端","slug":"http服务端","link":"#http服务端","children":[]},{"level":2,"title":"HTTP客户端","slug":"http客户端","link":"#http客户端","children":[]},{"level":2,"title":"HTTP常用状态码","slug":"http常用状态码","link":"#http常用状态码","children":[]},{"level":2,"title":"实战","slug":"实战","link":"#实战","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/网络/HTTP.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/网络/HTTP.md"},o=l("",17),t=[o];function e(D,c,r,F,y,A){return a(),n("div",null,t)}const u=s(p,[["render",e]]);export{i as __pageData,u as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"HTTP","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"HTTP服务端","slug":"http服务端","link":"#http服务端","children":[]},{"level":2,"title":"HTTP客户端","slug":"http客户端","link":"#http客户端","children":[]},{"level":2,"title":"HTTP常用状态码","slug":"http常用状态码","link":"#http常用状态码","children":[]},{"level":2,"title":"实战","slug":"实战","link":"#实战","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/网络/HTTP.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/网络/HTTP.md"},o=l("",17),t=[o];function e(D,c,r,F,y,A){return a(),n("div",null,t)}const u=s(p,[["render",e]]);export{i as __pageData,u as default};
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\275\221\347\273\234_RPC.md.02632663.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\275\221\347\273\234_RPC.md.7b7cae6f.js"
similarity index 99%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\275\221\347\273\234_RPC.md.02632663.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\275\221\347\273\234_RPC.md.7b7cae6f.js"
index 2d8d2c39..f2b7a752 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\275\221\347\273\234_RPC.md.02632663.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\275\221\347\273\234_RPC.md.7b7cae6f.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"RPC","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"Server端","slug":"server端","link":"#server端","children":[]},{"level":2,"title":"客户端","slug":"客户端","link":"#客户端","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/网络/RPC.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/网络/RPC.md"},o=l(`

RPC

Go程序可以通过net/rpc包相互通讯,所以这是另一个客户端-服务器端模式的应用。它提供了通过网络连接进行函数调用的便捷方法。

Server端

  • 创建一个用于计算的结构体对象Server,并且将它通过rpc.Register(object)注册,

  • 调用rpc.HandleHTTP方法

  • 调用net.Listen方法开启监听

  • 调用http.Serve启动服务

Go
package main
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"RPC","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"Server端","slug":"server端","link":"#server端","children":[]},{"level":2,"title":"客户端","slug":"客户端","link":"#客户端","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/网络/RPC.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/网络/RPC.md"},o=l(`

RPC

Go程序可以通过net/rpc包相互通讯,所以这是另一个客户端-服务器端模式的应用。它提供了通过网络连接进行函数调用的便捷方法。

Server端

  • 创建一个用于计算的结构体对象Server,并且将它通过rpc.Register(object)注册,

  • 调用rpc.HandleHTTP方法

  • 调用net.Listen方法开启监听

  • 调用http.Serve启动服务

Go
package main
 
 import (
 	"fmt"
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\275\221\347\273\234_RPC.md.02632663.lean.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\275\221\347\273\234_RPC.md.7b7cae6f.lean.js"
similarity index 89%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\275\221\347\273\234_RPC.md.02632663.lean.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\275\221\347\273\234_RPC.md.7b7cae6f.lean.js"
index 5c1fb975..e57d1c75 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\275\221\347\273\234_RPC.md.02632663.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\275\221\347\273\234_RPC.md.7b7cae6f.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"RPC","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"Server端","slug":"server端","link":"#server端","children":[]},{"level":2,"title":"客户端","slug":"客户端","link":"#客户端","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/网络/RPC.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/网络/RPC.md"},o=l("",8),e=[o];function t(c,r,D,F,y,A){return a(),n("div",null,e)}const d=s(p,[["render",t]]);export{i as __pageData,d as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"RPC","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"Server端","slug":"server端","link":"#server端","children":[]},{"level":2,"title":"客户端","slug":"客户端","link":"#客户端","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/网络/RPC.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/网络/RPC.md"},o=l("",8),e=[o];function t(c,r,D,F,y,A){return a(),n("div",null,e)}const d=s(p,[["render",t]]);export{i as __pageData,d as default};
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\275\221\347\273\234_TCP.md.bb131091.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\275\221\347\273\234_TCP.md.eb9cae40.js"
similarity index 99%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\275\221\347\273\234_TCP.md.bb131091.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\275\221\347\273\234_TCP.md.eb9cae40.js"
index 77b69dd6..7ddc0dc0 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\275\221\347\273\234_TCP.md.bb131091.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\275\221\347\273\234_TCP.md.eb9cae40.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"TCP","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"knowledge-deposition/GoLang/基础知识/网络/TCP.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/网络/TCP.md"},o=l(`

TCP

客户端和服务端通信示例

server.go

Go
package main
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"TCP","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"knowledge-deposition/GoLang/基础知识/网络/TCP.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/网络/TCP.md"},o=l(`

TCP

客户端和服务端通信示例

server.go

Go
package main
 
 import (
 	"fmt"
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\275\221\347\273\234_TCP.md.bb131091.lean.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\275\221\347\273\234_TCP.md.eb9cae40.lean.js"
similarity index 85%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\275\221\347\273\234_TCP.md.bb131091.lean.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\275\221\347\273\234_TCP.md.eb9cae40.lean.js"
index ffd0cb45..bc5eaece 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\275\221\347\273\234_TCP.md.bb131091.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\347\275\221\347\273\234_TCP.md.eb9cae40.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"TCP","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"knowledge-deposition/GoLang/基础知识/网络/TCP.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/网络/TCP.md"},o=l("",6),t=[o];function e(c,D,r,F,y,A){return a(),n("div",null,t)}const u=s(p,[["render",e]]);export{i as __pageData,u as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"TCP","description":"","frontmatter":{"layout":"doc"},"headers":[],"relativePath":"knowledge-deposition/GoLang/基础知识/网络/TCP.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/网络/TCP.md"},o=l("",6),t=[o];function e(c,D,r,F,y,A){return a(),n("div",null,t)}const u=s(p,[["render",e]]);export{i as __pageData,u as default};
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\351\200\232\351\201\223channel.md.19854e46.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\351\200\232\351\201\223channel.md.37ecf790.js"
similarity index 99%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\351\200\232\351\201\223channel.md.19854e46.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\351\200\232\351\201\223channel.md.37ecf790.js"
index cd122048..32f14550 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\351\200\232\351\201\223channel.md.19854e46.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\351\200\232\351\201\223channel.md.37ecf790.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"通道(channel)","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"通道的声明和初始化","slug":"通道的声明和初始化","link":"#通道的声明和初始化","children":[]},{"level":2,"title":"使用通道发送和接收数据","slug":"使用通道发送和接收数据","link":"#使用通道发送和接收数据","children":[]},{"level":2,"title":"关闭通道","slug":"关闭通道","link":"#关闭通道","children":[]},{"level":2,"title":"通道的容量和长度","slug":"通道的容量和长度","link":"#通道的容量和长度","children":[]},{"level":2,"title":"单向通道","slug":"单向通道","link":"#单向通道","children":[{"level":3,"title":"只读通道","slug":"只读通道","link":"#只读通道","children":[]},{"level":3,"title":"只写通道","slug":"只写通道","link":"#只写通道","children":[]}]},{"level":2,"title":"遍历通道","slug":"遍历通道","link":"#遍历通道","children":[]},{"level":2,"title":"用通道做锁","slug":"用通道做锁","link":"#用通道做锁","children":[]},{"level":2,"title":"死锁","slug":"死锁","link":"#死锁","children":[]},{"level":2,"title":"WaitGroup","slug":"waitgroup","link":"#waitgroup","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/通道channel.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/通道channel.md"},o=l(`

通道(channel)

  • 通道可以理解为Go协程通信的管道

  • 通道是队列式的数据结构,遵循先入先出的原则

  • 每个通道都只能传递一种数据类型的数据,在声明channel的时候,需要指定通道的类型

  • 通道的零值nil

通道的声明和初始化

  • 可以使用var关键字先声明一个channel,再使用make函数初始化

  • 也可以直接使用简短声明make来声明并初始化一个channel

格式如下:

Go
// 第一种方式
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"通道(channel)","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"通道的声明和初始化","slug":"通道的声明和初始化","link":"#通道的声明和初始化","children":[]},{"level":2,"title":"使用通道发送和接收数据","slug":"使用通道发送和接收数据","link":"#使用通道发送和接收数据","children":[]},{"level":2,"title":"关闭通道","slug":"关闭通道","link":"#关闭通道","children":[]},{"level":2,"title":"通道的容量和长度","slug":"通道的容量和长度","link":"#通道的容量和长度","children":[]},{"level":2,"title":"单向通道","slug":"单向通道","link":"#单向通道","children":[{"level":3,"title":"只读通道","slug":"只读通道","link":"#只读通道","children":[]},{"level":3,"title":"只写通道","slug":"只写通道","link":"#只写通道","children":[]}]},{"level":2,"title":"遍历通道","slug":"遍历通道","link":"#遍历通道","children":[]},{"level":2,"title":"用通道做锁","slug":"用通道做锁","link":"#用通道做锁","children":[]},{"level":2,"title":"死锁","slug":"死锁","link":"#死锁","children":[]},{"level":2,"title":"WaitGroup","slug":"waitgroup","link":"#waitgroup","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/通道channel.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/通道channel.md"},o=l(`

通道(channel)

  • 通道可以理解为Go协程通信的管道

  • 通道是队列式的数据结构,遵循先入先出的原则

  • 每个通道都只能传递一种数据类型的数据,在声明channel的时候,需要指定通道的类型

  • 通道的零值nil

通道的声明和初始化

  • 可以使用var关键字先声明一个channel,再使用make函数初始化

  • 也可以直接使用简短声明make来声明并初始化一个channel

格式如下:

Go
// 第一种方式
 var chan_name chan_type // 声明
 channel_name = make(chan chan_type, [bufferSize]) // 初始化
 
diff --git "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\351\200\232\351\201\223channel.md.19854e46.lean.js" "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\351\200\232\351\201\223channel.md.37ecf790.lean.js"
similarity index 96%
rename from "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\351\200\232\351\201\223channel.md.19854e46.lean.js"
rename to "assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\351\200\232\351\201\223channel.md.37ecf790.lean.js"
index d326fb53..c838364f 100644
--- "a/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\351\200\232\351\201\223channel.md.19854e46.lean.js"
+++ "b/assets/knowledge-deposition_GoLang_\345\237\272\347\241\200\347\237\245\350\257\206_\351\200\232\351\201\223channel.md.37ecf790.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"通道(channel)","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"通道的声明和初始化","slug":"通道的声明和初始化","link":"#通道的声明和初始化","children":[]},{"level":2,"title":"使用通道发送和接收数据","slug":"使用通道发送和接收数据","link":"#使用通道发送和接收数据","children":[]},{"level":2,"title":"关闭通道","slug":"关闭通道","link":"#关闭通道","children":[]},{"level":2,"title":"通道的容量和长度","slug":"通道的容量和长度","link":"#通道的容量和长度","children":[]},{"level":2,"title":"单向通道","slug":"单向通道","link":"#单向通道","children":[{"level":3,"title":"只读通道","slug":"只读通道","link":"#只读通道","children":[]},{"level":3,"title":"只写通道","slug":"只写通道","link":"#只写通道","children":[]}]},{"level":2,"title":"遍历通道","slug":"遍历通道","link":"#遍历通道","children":[]},{"level":2,"title":"用通道做锁","slug":"用通道做锁","link":"#用通道做锁","children":[]},{"level":2,"title":"死锁","slug":"死锁","link":"#死锁","children":[]},{"level":2,"title":"WaitGroup","slug":"waitgroup","link":"#waitgroup","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/通道channel.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/通道channel.md"},o=l("",54),e=[o];function t(c,r,D,y,F,A){return a(),n("div",null,e)}const d=s(p,[["render",t]]);export{i as __pageData,d as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"通道(channel)","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"通道的声明和初始化","slug":"通道的声明和初始化","link":"#通道的声明和初始化","children":[]},{"level":2,"title":"使用通道发送和接收数据","slug":"使用通道发送和接收数据","link":"#使用通道发送和接收数据","children":[]},{"level":2,"title":"关闭通道","slug":"关闭通道","link":"#关闭通道","children":[]},{"level":2,"title":"通道的容量和长度","slug":"通道的容量和长度","link":"#通道的容量和长度","children":[]},{"level":2,"title":"单向通道","slug":"单向通道","link":"#单向通道","children":[{"level":3,"title":"只读通道","slug":"只读通道","link":"#只读通道","children":[]},{"level":3,"title":"只写通道","slug":"只写通道","link":"#只写通道","children":[]}]},{"level":2,"title":"遍历通道","slug":"遍历通道","link":"#遍历通道","children":[]},{"level":2,"title":"用通道做锁","slug":"用通道做锁","link":"#用通道做锁","children":[]},{"level":2,"title":"死锁","slug":"死锁","link":"#死锁","children":[]},{"level":2,"title":"WaitGroup","slug":"waitgroup","link":"#waitgroup","children":[]}],"relativePath":"knowledge-deposition/GoLang/基础知识/通道channel.md"}'),p={name:"knowledge-deposition/GoLang/基础知识/通道channel.md"},o=l("",54),e=[o];function t(c,r,D,y,F,A){return a(),n("div",null,e)}const d=s(p,[["render",t]]);export{i as __pageData,d as default};
diff --git "a/assets/knowledge-deposition_Linux_Bash\345\237\272\347\241\200\347\237\245\350\257\206.md.82919afa.js" "b/assets/knowledge-deposition_Linux_Bash\345\237\272\347\241\200\347\237\245\350\257\206.md.b1e37b79.js"
similarity index 99%
rename from "assets/knowledge-deposition_Linux_Bash\345\237\272\347\241\200\347\237\245\350\257\206.md.82919afa.js"
rename to "assets/knowledge-deposition_Linux_Bash\345\237\272\347\241\200\347\237\245\350\257\206.md.b1e37b79.js"
index 2681a829..f92235c3 100644
--- "a/assets/knowledge-deposition_Linux_Bash\345\237\272\347\241\200\347\237\245\350\257\206.md.82919afa.js"
+++ "b/assets/knowledge-deposition_Linux_Bash\345\237\272\347\241\200\347\237\245\350\257\206.md.b1e37b79.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as l,o as a,e as n}from"./app.7354b8c5.js";const h=JSON.parse('{"title":"Bash 基础语法","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"文件格式","slug":"文件格式","link":"#文件格式","children":[]},{"level":2,"title":"运行bash脚本","slug":"运行bash脚本","link":"#运行bash脚本","children":[]},{"level":2,"title":"变量","slug":"变量","link":"#变量","children":[{"level":3,"title":"定义变量","slug":"定义变量","link":"#定义变量","children":[]},{"level":3,"title":"使用变量","slug":"使用变量","link":"#使用变量","children":[]},{"level":3,"title":"定义只读变量","slug":"定义只读变量","link":"#定义只读变量","children":[]},{"level":3,"title":"删除变量","slug":"删除变量","link":"#删除变量","children":[]},{"level":3,"title":"变量类型","slug":"变量类型","link":"#变量类型","children":[]}]},{"level":2,"title":"字符串","slug":"字符串","link":"#字符串","children":[{"level":3,"title":"单引号字符串","slug":"单引号字符串","link":"#单引号字符串","children":[]},{"level":3,"title":"双引号字符串","slug":"双引号字符串","link":"#双引号字符串","children":[]},{"level":3,"title":"拼接字符串","slug":"拼接字符串","link":"#拼接字符串","children":[]},{"level":3,"title":"获取字符串长度","slug":"获取字符串长度","link":"#获取字符串长度","children":[]},{"level":3,"title":"提取子字符串","slug":"提取子字符串","link":"#提取子字符串","children":[]},{"level":3,"title":"查找子字符串","slug":"查找子字符串","link":"#查找子字符串","children":[]},{"level":3,"title":"提取字符串","slug":"提取字符串","link":"#提取字符串","children":[]}]},{"level":2,"title":"数组","slug":"数组","link":"#数组","children":[{"level":3,"title":"定义数组","slug":"定义数组","link":"#定义数组","children":[]},{"level":3,"title":"读取数组","slug":"读取数组","link":"#读取数组","children":[]}]},{"level":2,"title":"Shell传递参数","slug":"shell传递参数","link":"#shell传递参数","children":[]},{"level":2,"title":"Shell基本运算符","slug":"shell基本运算符","link":"#shell基本运算符","children":[{"level":3,"title":"算术运算符","slug":"算术运算符","link":"#算术运算符","children":[]},{"level":3,"title":"关系运算符","slug":"关系运算符","link":"#关系运算符","children":[]},{"level":3,"title":"布尔运算符","slug":"布尔运算符","link":"#布尔运算符","children":[]},{"level":3,"title":"逻辑运算符","slug":"逻辑运算符","link":"#逻辑运算符","children":[]},{"level":3,"title":"字符串运算符","slug":"字符串运算符","link":"#字符串运算符","children":[]},{"level":3,"title":"文件测试运算符","slug":"文件测试运算符","link":"#文件测试运算符","children":[]}]},{"level":2,"title":"echo命令","slug":"echo命令","link":"#echo命令","children":[{"level":3,"title":"显示普通字符串","slug":"显示普通字符串","link":"#显示普通字符串","children":[]},{"level":3,"title":"显示转义字符","slug":"显示转义字符","link":"#显示转义字符","children":[]},{"level":3,"title":"显示变量","slug":"显示变量","link":"#显示变量","children":[]},{"level":3,"title":"显示换行","slug":"显示换行","link":"#显示换行","children":[]},{"level":3,"title":"显示不换行","slug":"显示不换行","link":"#显示不换行","children":[]},{"level":3,"title":"显示结果定向至文件","slug":"显示结果定向至文件","link":"#显示结果定向至文件","children":[]},{"level":3,"title":"原样输出字符串,不进行转义或取变量(用单引号)","slug":"原样输出字符串-不进行转义或取变量-用单引号","link":"#原样输出字符串-不进行转义或取变量-用单引号","children":[]},{"level":3,"title":"显示命令执行结果","slug":"显示命令执行结果","link":"#显示命令执行结果","children":[]}]},{"level":2,"title":"流程控制","slug":"流程控制","link":"#流程控制","children":[{"level":3,"title":"if else","slug":"if-else","link":"#if-else","children":[]},{"level":3,"title":"for 循环","slug":"for-循环","link":"#for-循环","children":[]},{"level":3,"title":"while 语句","slug":"while-语句","link":"#while-语句","children":[]},{"level":3,"title":"until 循环","slug":"until-循环","link":"#until-循环","children":[]},{"level":3,"title":"case ... esac","slug":"case-esac","link":"#case-esac","children":[]}]},{"level":2,"title":"函数","slug":"函数","link":"#函数","children":[{"level":3,"title":"定义函数","slug":"定义函数","link":"#定义函数","children":[]},{"level":3,"title":"函数参数","slug":"函数参数","link":"#函数参数","children":[]}]},{"level":2,"title":"输入/输出重定向","slug":"输入-输出重定向","link":"#输入-输出重定向","children":[{"level":3,"title":"/dev/null 文件","slug":"dev-null-文件","link":"#dev-null-文件","children":[]}]}],"relativePath":"knowledge-deposition/Linux/Bash基础知识.md"}'),e={name:"knowledge-deposition/Linux/Bash基础知识.md"},t=n(`

Bash 基础语法

文件格式

文件第一行#!/bin/bash或者#!/bin/sh#!告诉系统其后路径所指定的程序即是解释此脚本文件的Shell程序

运行bash脚本

  • 作为可执行程序
shell
chmod u+x ./test.sh // 添加运行权限
+import{_ as s,c as l,o as a,e as n}from"./app.4a806fb4.js";const h=JSON.parse('{"title":"Bash 基础语法","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"文件格式","slug":"文件格式","link":"#文件格式","children":[]},{"level":2,"title":"运行bash脚本","slug":"运行bash脚本","link":"#运行bash脚本","children":[]},{"level":2,"title":"变量","slug":"变量","link":"#变量","children":[{"level":3,"title":"定义变量","slug":"定义变量","link":"#定义变量","children":[]},{"level":3,"title":"使用变量","slug":"使用变量","link":"#使用变量","children":[]},{"level":3,"title":"定义只读变量","slug":"定义只读变量","link":"#定义只读变量","children":[]},{"level":3,"title":"删除变量","slug":"删除变量","link":"#删除变量","children":[]},{"level":3,"title":"变量类型","slug":"变量类型","link":"#变量类型","children":[]}]},{"level":2,"title":"字符串","slug":"字符串","link":"#字符串","children":[{"level":3,"title":"单引号字符串","slug":"单引号字符串","link":"#单引号字符串","children":[]},{"level":3,"title":"双引号字符串","slug":"双引号字符串","link":"#双引号字符串","children":[]},{"level":3,"title":"拼接字符串","slug":"拼接字符串","link":"#拼接字符串","children":[]},{"level":3,"title":"获取字符串长度","slug":"获取字符串长度","link":"#获取字符串长度","children":[]},{"level":3,"title":"提取子字符串","slug":"提取子字符串","link":"#提取子字符串","children":[]},{"level":3,"title":"查找子字符串","slug":"查找子字符串","link":"#查找子字符串","children":[]},{"level":3,"title":"提取字符串","slug":"提取字符串","link":"#提取字符串","children":[]}]},{"level":2,"title":"数组","slug":"数组","link":"#数组","children":[{"level":3,"title":"定义数组","slug":"定义数组","link":"#定义数组","children":[]},{"level":3,"title":"读取数组","slug":"读取数组","link":"#读取数组","children":[]}]},{"level":2,"title":"Shell传递参数","slug":"shell传递参数","link":"#shell传递参数","children":[]},{"level":2,"title":"Shell基本运算符","slug":"shell基本运算符","link":"#shell基本运算符","children":[{"level":3,"title":"算术运算符","slug":"算术运算符","link":"#算术运算符","children":[]},{"level":3,"title":"关系运算符","slug":"关系运算符","link":"#关系运算符","children":[]},{"level":3,"title":"布尔运算符","slug":"布尔运算符","link":"#布尔运算符","children":[]},{"level":3,"title":"逻辑运算符","slug":"逻辑运算符","link":"#逻辑运算符","children":[]},{"level":3,"title":"字符串运算符","slug":"字符串运算符","link":"#字符串运算符","children":[]},{"level":3,"title":"文件测试运算符","slug":"文件测试运算符","link":"#文件测试运算符","children":[]}]},{"level":2,"title":"echo命令","slug":"echo命令","link":"#echo命令","children":[{"level":3,"title":"显示普通字符串","slug":"显示普通字符串","link":"#显示普通字符串","children":[]},{"level":3,"title":"显示转义字符","slug":"显示转义字符","link":"#显示转义字符","children":[]},{"level":3,"title":"显示变量","slug":"显示变量","link":"#显示变量","children":[]},{"level":3,"title":"显示换行","slug":"显示换行","link":"#显示换行","children":[]},{"level":3,"title":"显示不换行","slug":"显示不换行","link":"#显示不换行","children":[]},{"level":3,"title":"显示结果定向至文件","slug":"显示结果定向至文件","link":"#显示结果定向至文件","children":[]},{"level":3,"title":"原样输出字符串,不进行转义或取变量(用单引号)","slug":"原样输出字符串-不进行转义或取变量-用单引号","link":"#原样输出字符串-不进行转义或取变量-用单引号","children":[]},{"level":3,"title":"显示命令执行结果","slug":"显示命令执行结果","link":"#显示命令执行结果","children":[]}]},{"level":2,"title":"流程控制","slug":"流程控制","link":"#流程控制","children":[{"level":3,"title":"if else","slug":"if-else","link":"#if-else","children":[]},{"level":3,"title":"for 循环","slug":"for-循环","link":"#for-循环","children":[]},{"level":3,"title":"while 语句","slug":"while-语句","link":"#while-语句","children":[]},{"level":3,"title":"until 循环","slug":"until-循环","link":"#until-循环","children":[]},{"level":3,"title":"case ... esac","slug":"case-esac","link":"#case-esac","children":[]}]},{"level":2,"title":"函数","slug":"函数","link":"#函数","children":[{"level":3,"title":"定义函数","slug":"定义函数","link":"#定义函数","children":[]},{"level":3,"title":"函数参数","slug":"函数参数","link":"#函数参数","children":[]}]},{"level":2,"title":"输入/输出重定向","slug":"输入-输出重定向","link":"#输入-输出重定向","children":[{"level":3,"title":"/dev/null 文件","slug":"dev-null-文件","link":"#dev-null-文件","children":[]}]}],"relativePath":"knowledge-deposition/Linux/Bash基础知识.md"}'),e={name:"knowledge-deposition/Linux/Bash基础知识.md"},t=n(`

Bash 基础语法

文件格式

文件第一行#!/bin/bash或者#!/bin/sh#!告诉系统其后路径所指定的程序即是解释此脚本文件的Shell程序

运行bash脚本

  • 作为可执行程序
shell
chmod u+x ./test.sh // 添加运行权限
 ./test.sh // 运行脚本
 
  • 作为解释器参数
shell
/bin/sh test.sh
 /bin/Bash test.sh
diff --git "a/assets/knowledge-deposition_Linux_Bash\345\237\272\347\241\200\347\237\245\350\257\206.md.82919afa.lean.js" "b/assets/knowledge-deposition_Linux_Bash\345\237\272\347\241\200\347\237\245\350\257\206.md.b1e37b79.lean.js"
similarity index 98%
rename from "assets/knowledge-deposition_Linux_Bash\345\237\272\347\241\200\347\237\245\350\257\206.md.82919afa.lean.js"
rename to "assets/knowledge-deposition_Linux_Bash\345\237\272\347\241\200\347\237\245\350\257\206.md.b1e37b79.lean.js"
index 0273fd1b..0a60dc95 100644
--- "a/assets/knowledge-deposition_Linux_Bash\345\237\272\347\241\200\347\237\245\350\257\206.md.82919afa.lean.js"
+++ "b/assets/knowledge-deposition_Linux_Bash\345\237\272\347\241\200\347\237\245\350\257\206.md.b1e37b79.lean.js"
@@ -1 +1 @@
-import{_ as s,c as l,o as a,e as n}from"./app.7354b8c5.js";const h=JSON.parse('{"title":"Bash 基础语法","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"文件格式","slug":"文件格式","link":"#文件格式","children":[]},{"level":2,"title":"运行bash脚本","slug":"运行bash脚本","link":"#运行bash脚本","children":[]},{"level":2,"title":"变量","slug":"变量","link":"#变量","children":[{"level":3,"title":"定义变量","slug":"定义变量","link":"#定义变量","children":[]},{"level":3,"title":"使用变量","slug":"使用变量","link":"#使用变量","children":[]},{"level":3,"title":"定义只读变量","slug":"定义只读变量","link":"#定义只读变量","children":[]},{"level":3,"title":"删除变量","slug":"删除变量","link":"#删除变量","children":[]},{"level":3,"title":"变量类型","slug":"变量类型","link":"#变量类型","children":[]}]},{"level":2,"title":"字符串","slug":"字符串","link":"#字符串","children":[{"level":3,"title":"单引号字符串","slug":"单引号字符串","link":"#单引号字符串","children":[]},{"level":3,"title":"双引号字符串","slug":"双引号字符串","link":"#双引号字符串","children":[]},{"level":3,"title":"拼接字符串","slug":"拼接字符串","link":"#拼接字符串","children":[]},{"level":3,"title":"获取字符串长度","slug":"获取字符串长度","link":"#获取字符串长度","children":[]},{"level":3,"title":"提取子字符串","slug":"提取子字符串","link":"#提取子字符串","children":[]},{"level":3,"title":"查找子字符串","slug":"查找子字符串","link":"#查找子字符串","children":[]},{"level":3,"title":"提取字符串","slug":"提取字符串","link":"#提取字符串","children":[]}]},{"level":2,"title":"数组","slug":"数组","link":"#数组","children":[{"level":3,"title":"定义数组","slug":"定义数组","link":"#定义数组","children":[]},{"level":3,"title":"读取数组","slug":"读取数组","link":"#读取数组","children":[]}]},{"level":2,"title":"Shell传递参数","slug":"shell传递参数","link":"#shell传递参数","children":[]},{"level":2,"title":"Shell基本运算符","slug":"shell基本运算符","link":"#shell基本运算符","children":[{"level":3,"title":"算术运算符","slug":"算术运算符","link":"#算术运算符","children":[]},{"level":3,"title":"关系运算符","slug":"关系运算符","link":"#关系运算符","children":[]},{"level":3,"title":"布尔运算符","slug":"布尔运算符","link":"#布尔运算符","children":[]},{"level":3,"title":"逻辑运算符","slug":"逻辑运算符","link":"#逻辑运算符","children":[]},{"level":3,"title":"字符串运算符","slug":"字符串运算符","link":"#字符串运算符","children":[]},{"level":3,"title":"文件测试运算符","slug":"文件测试运算符","link":"#文件测试运算符","children":[]}]},{"level":2,"title":"echo命令","slug":"echo命令","link":"#echo命令","children":[{"level":3,"title":"显示普通字符串","slug":"显示普通字符串","link":"#显示普通字符串","children":[]},{"level":3,"title":"显示转义字符","slug":"显示转义字符","link":"#显示转义字符","children":[]},{"level":3,"title":"显示变量","slug":"显示变量","link":"#显示变量","children":[]},{"level":3,"title":"显示换行","slug":"显示换行","link":"#显示换行","children":[]},{"level":3,"title":"显示不换行","slug":"显示不换行","link":"#显示不换行","children":[]},{"level":3,"title":"显示结果定向至文件","slug":"显示结果定向至文件","link":"#显示结果定向至文件","children":[]},{"level":3,"title":"原样输出字符串,不进行转义或取变量(用单引号)","slug":"原样输出字符串-不进行转义或取变量-用单引号","link":"#原样输出字符串-不进行转义或取变量-用单引号","children":[]},{"level":3,"title":"显示命令执行结果","slug":"显示命令执行结果","link":"#显示命令执行结果","children":[]}]},{"level":2,"title":"流程控制","slug":"流程控制","link":"#流程控制","children":[{"level":3,"title":"if else","slug":"if-else","link":"#if-else","children":[]},{"level":3,"title":"for 循环","slug":"for-循环","link":"#for-循环","children":[]},{"level":3,"title":"while 语句","slug":"while-语句","link":"#while-语句","children":[]},{"level":3,"title":"until 循环","slug":"until-循环","link":"#until-循环","children":[]},{"level":3,"title":"case ... esac","slug":"case-esac","link":"#case-esac","children":[]}]},{"level":2,"title":"函数","slug":"函数","link":"#函数","children":[{"level":3,"title":"定义函数","slug":"定义函数","link":"#定义函数","children":[]},{"level":3,"title":"函数参数","slug":"函数参数","link":"#函数参数","children":[]}]},{"level":2,"title":"输入/输出重定向","slug":"输入-输出重定向","link":"#输入-输出重定向","children":[{"level":3,"title":"/dev/null 文件","slug":"dev-null-文件","link":"#dev-null-文件","children":[]}]}],"relativePath":"knowledge-deposition/Linux/Bash基础知识.md"}'),e={name:"knowledge-deposition/Linux/Bash基础知识.md"},t=n("",161),o=[t];function p(c,r,i,d,y,D){return a(),l("div",null,o)}const F=s(e,[["render",p]]);export{h as __pageData,F as default};
+import{_ as s,c as l,o as a,e as n}from"./app.4a806fb4.js";const h=JSON.parse('{"title":"Bash 基础语法","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"文件格式","slug":"文件格式","link":"#文件格式","children":[]},{"level":2,"title":"运行bash脚本","slug":"运行bash脚本","link":"#运行bash脚本","children":[]},{"level":2,"title":"变量","slug":"变量","link":"#变量","children":[{"level":3,"title":"定义变量","slug":"定义变量","link":"#定义变量","children":[]},{"level":3,"title":"使用变量","slug":"使用变量","link":"#使用变量","children":[]},{"level":3,"title":"定义只读变量","slug":"定义只读变量","link":"#定义只读变量","children":[]},{"level":3,"title":"删除变量","slug":"删除变量","link":"#删除变量","children":[]},{"level":3,"title":"变量类型","slug":"变量类型","link":"#变量类型","children":[]}]},{"level":2,"title":"字符串","slug":"字符串","link":"#字符串","children":[{"level":3,"title":"单引号字符串","slug":"单引号字符串","link":"#单引号字符串","children":[]},{"level":3,"title":"双引号字符串","slug":"双引号字符串","link":"#双引号字符串","children":[]},{"level":3,"title":"拼接字符串","slug":"拼接字符串","link":"#拼接字符串","children":[]},{"level":3,"title":"获取字符串长度","slug":"获取字符串长度","link":"#获取字符串长度","children":[]},{"level":3,"title":"提取子字符串","slug":"提取子字符串","link":"#提取子字符串","children":[]},{"level":3,"title":"查找子字符串","slug":"查找子字符串","link":"#查找子字符串","children":[]},{"level":3,"title":"提取字符串","slug":"提取字符串","link":"#提取字符串","children":[]}]},{"level":2,"title":"数组","slug":"数组","link":"#数组","children":[{"level":3,"title":"定义数组","slug":"定义数组","link":"#定义数组","children":[]},{"level":3,"title":"读取数组","slug":"读取数组","link":"#读取数组","children":[]}]},{"level":2,"title":"Shell传递参数","slug":"shell传递参数","link":"#shell传递参数","children":[]},{"level":2,"title":"Shell基本运算符","slug":"shell基本运算符","link":"#shell基本运算符","children":[{"level":3,"title":"算术运算符","slug":"算术运算符","link":"#算术运算符","children":[]},{"level":3,"title":"关系运算符","slug":"关系运算符","link":"#关系运算符","children":[]},{"level":3,"title":"布尔运算符","slug":"布尔运算符","link":"#布尔运算符","children":[]},{"level":3,"title":"逻辑运算符","slug":"逻辑运算符","link":"#逻辑运算符","children":[]},{"level":3,"title":"字符串运算符","slug":"字符串运算符","link":"#字符串运算符","children":[]},{"level":3,"title":"文件测试运算符","slug":"文件测试运算符","link":"#文件测试运算符","children":[]}]},{"level":2,"title":"echo命令","slug":"echo命令","link":"#echo命令","children":[{"level":3,"title":"显示普通字符串","slug":"显示普通字符串","link":"#显示普通字符串","children":[]},{"level":3,"title":"显示转义字符","slug":"显示转义字符","link":"#显示转义字符","children":[]},{"level":3,"title":"显示变量","slug":"显示变量","link":"#显示变量","children":[]},{"level":3,"title":"显示换行","slug":"显示换行","link":"#显示换行","children":[]},{"level":3,"title":"显示不换行","slug":"显示不换行","link":"#显示不换行","children":[]},{"level":3,"title":"显示结果定向至文件","slug":"显示结果定向至文件","link":"#显示结果定向至文件","children":[]},{"level":3,"title":"原样输出字符串,不进行转义或取变量(用单引号)","slug":"原样输出字符串-不进行转义或取变量-用单引号","link":"#原样输出字符串-不进行转义或取变量-用单引号","children":[]},{"level":3,"title":"显示命令执行结果","slug":"显示命令执行结果","link":"#显示命令执行结果","children":[]}]},{"level":2,"title":"流程控制","slug":"流程控制","link":"#流程控制","children":[{"level":3,"title":"if else","slug":"if-else","link":"#if-else","children":[]},{"level":3,"title":"for 循环","slug":"for-循环","link":"#for-循环","children":[]},{"level":3,"title":"while 语句","slug":"while-语句","link":"#while-语句","children":[]},{"level":3,"title":"until 循环","slug":"until-循环","link":"#until-循环","children":[]},{"level":3,"title":"case ... esac","slug":"case-esac","link":"#case-esac","children":[]}]},{"level":2,"title":"函数","slug":"函数","link":"#函数","children":[{"level":3,"title":"定义函数","slug":"定义函数","link":"#定义函数","children":[]},{"level":3,"title":"函数参数","slug":"函数参数","link":"#函数参数","children":[]}]},{"level":2,"title":"输入/输出重定向","slug":"输入-输出重定向","link":"#输入-输出重定向","children":[{"level":3,"title":"/dev/null 文件","slug":"dev-null-文件","link":"#dev-null-文件","children":[]}]}],"relativePath":"knowledge-deposition/Linux/Bash基础知识.md"}'),e={name:"knowledge-deposition/Linux/Bash基础知识.md"},t=n("",161),o=[t];function p(c,r,i,d,y,D){return a(),l("div",null,o)}const F=s(e,[["render",p]]);export{h as __pageData,F as default};
diff --git a/assets/knowledge-deposition_MySQL_SQL.md.2e092928.js b/assets/knowledge-deposition_MySQL_SQL.md.f63d9a44.js
similarity index 98%
rename from assets/knowledge-deposition_MySQL_SQL.md.2e092928.js
rename to assets/knowledge-deposition_MySQL_SQL.md.f63d9a44.js
index f4758a97..f21e29d1 100644
--- a/assets/knowledge-deposition_MySQL_SQL.md.2e092928.js
+++ b/assets/knowledge-deposition_MySQL_SQL.md.f63d9a44.js
@@ -1 +1 @@
-import{_ as t,c as e,o as d,e as l}from"./app.7354b8c5.js";const _=JSON.parse('{"title":"SQL","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"SQL运算符","slug":"sql运算符","link":"#sql运算符","children":[{"level":3,"title":"算术运算符","slug":"算术运算符","link":"#算术运算符","children":[]},{"level":3,"title":"逻辑运算符","slug":"逻辑运算符","link":"#逻辑运算符","children":[]},{"level":3,"title":"比较运算符","slug":"比较运算符","link":"#比较运算符","children":[]}]}],"relativePath":"knowledge-deposition/MySQL/SQL.md"}'),r={name:"knowledge-deposition/MySQL/SQL.md"},n=l('

SQL

  • SQLStructured Query Language结构化查询语言

SQL运算符

  • SQL运算符是一种符号,它是用来进行列间或者变量之间的比较数学运算的

算术运算符

运算符说明
+加运算,求两个数或表达式相加的和,如1+1
-减运算,求两个数或表达式相减的差,如4-1
*乘运算,求两个数或表达式相乘的积,如2*2
/除运算,求两个数或表达式相除的商,如6/4的值为1
%取模运算,求两个数或表达式相除的余数,如:6%4的值为2

逻辑运算符

运算符说明
AND当且仅当两个布尔表达式都为true时,返回TRUE
OR当且仅当两个布尔表达式都为false,返回FALSE
NOT布尔表达式的值取反

比较运算符

运算符说明
=等于
>大于
<小于
<>不等于
>=大于等于
<=小于等于
!=不等于
',10),a=[n];function c(i,s,o,h,g,y){return d(),e("div",null,a)}const u=t(r,[["render",c]]);export{_ as __pageData,u as default}; +import{_ as t,c as e,o as d,e as l}from"./app.4a806fb4.js";const _=JSON.parse('{"title":"SQL","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"SQL运算符","slug":"sql运算符","link":"#sql运算符","children":[{"level":3,"title":"算术运算符","slug":"算术运算符","link":"#算术运算符","children":[]},{"level":3,"title":"逻辑运算符","slug":"逻辑运算符","link":"#逻辑运算符","children":[]},{"level":3,"title":"比较运算符","slug":"比较运算符","link":"#比较运算符","children":[]}]}],"relativePath":"knowledge-deposition/MySQL/SQL.md"}'),r={name:"knowledge-deposition/MySQL/SQL.md"},n=l('

SQL

  • SQLStructured Query Language结构化查询语言

SQL运算符

  • SQL运算符是一种符号,它是用来进行列间或者变量之间的比较数学运算的

算术运算符

运算符说明
+加运算,求两个数或表达式相加的和,如1+1
-减运算,求两个数或表达式相减的差,如4-1
*乘运算,求两个数或表达式相乘的积,如2*2
/除运算,求两个数或表达式相除的商,如6/4的值为1
%取模运算,求两个数或表达式相除的余数,如:6%4的值为2

逻辑运算符

运算符说明
AND当且仅当两个布尔表达式都为true时,返回TRUE
OR当且仅当两个布尔表达式都为false,返回FALSE
NOT布尔表达式的值取反

比较运算符

运算符说明
=等于
>大于
<小于
<>不等于
>=大于等于
<=小于等于
!=不等于
',10),a=[n];function c(i,s,o,h,g,y){return d(),e("div",null,a)}const u=t(r,[["render",c]]);export{_ as __pageData,u as default}; diff --git a/assets/knowledge-deposition_MySQL_SQL.md.2e092928.lean.js b/assets/knowledge-deposition_MySQL_SQL.md.f63d9a44.lean.js similarity index 91% rename from assets/knowledge-deposition_MySQL_SQL.md.2e092928.lean.js rename to assets/knowledge-deposition_MySQL_SQL.md.f63d9a44.lean.js index b27839d8..5840a5d6 100644 --- a/assets/knowledge-deposition_MySQL_SQL.md.2e092928.lean.js +++ b/assets/knowledge-deposition_MySQL_SQL.md.f63d9a44.lean.js @@ -1 +1 @@ -import{_ as t,c as e,o as d,e as l}from"./app.7354b8c5.js";const _=JSON.parse('{"title":"SQL","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"SQL运算符","slug":"sql运算符","link":"#sql运算符","children":[{"level":3,"title":"算术运算符","slug":"算术运算符","link":"#算术运算符","children":[]},{"level":3,"title":"逻辑运算符","slug":"逻辑运算符","link":"#逻辑运算符","children":[]},{"level":3,"title":"比较运算符","slug":"比较运算符","link":"#比较运算符","children":[]}]}],"relativePath":"knowledge-deposition/MySQL/SQL.md"}'),r={name:"knowledge-deposition/MySQL/SQL.md"},n=l("",10),a=[n];function c(i,s,o,h,g,y){return d(),e("div",null,a)}const u=t(r,[["render",c]]);export{_ as __pageData,u as default}; +import{_ as t,c as e,o as d,e as l}from"./app.4a806fb4.js";const _=JSON.parse('{"title":"SQL","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"SQL运算符","slug":"sql运算符","link":"#sql运算符","children":[{"level":3,"title":"算术运算符","slug":"算术运算符","link":"#算术运算符","children":[]},{"level":3,"title":"逻辑运算符","slug":"逻辑运算符","link":"#逻辑运算符","children":[]},{"level":3,"title":"比较运算符","slug":"比较运算符","link":"#比较运算符","children":[]}]}],"relativePath":"knowledge-deposition/MySQL/SQL.md"}'),r={name:"knowledge-deposition/MySQL/SQL.md"},n=l("",10),a=[n];function c(i,s,o,h,g,y){return d(),e("div",null,a)}const u=t(r,[["render",c]]);export{_ as __pageData,u as default}; diff --git "a/assets/knowledge-deposition_MySQL_\345\207\275\346\225\260.md.6a699cc5.js" "b/assets/knowledge-deposition_MySQL_\345\207\275\346\225\260.md.912200a8.js" similarity index 99% rename from "assets/knowledge-deposition_MySQL_\345\207\275\346\225\260.md.6a699cc5.js" rename to "assets/knowledge-deposition_MySQL_\345\207\275\346\225\260.md.912200a8.js" index 45e4f30a..4caed859 100644 --- "a/assets/knowledge-deposition_MySQL_\345\207\275\346\225\260.md.6a699cc5.js" +++ "b/assets/knowledge-deposition_MySQL_\345\207\275\346\225\260.md.912200a8.js" @@ -1,4 +1,4 @@ -import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const F=JSON.parse('{"title":"函数","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":3,"title":"字符函数","slug":"字符函数","link":"#字符函数","children":[]},{"level":3,"title":"数学函数","slug":"数学函数","link":"#数学函数","children":[]},{"level":3,"title":"日期函数","slug":"日期函数","link":"#日期函数","children":[]},{"level":2,"title":"聚合函数","slug":"聚合函数","link":"#聚合函数","children":[{"level":3,"title":"SUM","slug":"sum","link":"#sum","children":[]},{"level":3,"title":"AVG","slug":"avg","link":"#avg","children":[]},{"level":3,"title":"COUNT","slug":"count","link":"#count","children":[]},{"level":3,"title":"MAX","slug":"max","link":"#max","children":[]},{"level":3,"title":"MIN","slug":"min","link":"#min","children":[]}]},{"level":2,"title":"自定义函数","slug":"自定义函数","link":"#自定义函数","children":[{"level":3,"title":"创建自定义函数","slug":"创建自定义函数","link":"#创建自定义函数","children":[]},{"level":3,"title":"使用自定义函数","slug":"使用自定义函数","link":"#使用自定义函数","children":[]},{"level":3,"title":"查看自定义函数","slug":"查看自定义函数","link":"#查看自定义函数","children":[]},{"level":3,"title":"删除自定义函数","slug":"删除自定义函数","link":"#删除自定义函数","children":[]},{"level":3,"title":"示例","slug":"示例","link":"#示例","children":[]}]}],"relativePath":"knowledge-deposition/MySQL/函数.md"}'),p={name:"knowledge-deposition/MySQL/函数.md"},o=l(`

函数

字符函数


CONCAT拼接字符串

SQL
SELECT CONCAT(name, '-', age) FROM student WHERE age = '18';
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const F=JSON.parse('{"title":"函数","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":3,"title":"字符函数","slug":"字符函数","link":"#字符函数","children":[]},{"level":3,"title":"数学函数","slug":"数学函数","link":"#数学函数","children":[]},{"level":3,"title":"日期函数","slug":"日期函数","link":"#日期函数","children":[]},{"level":2,"title":"聚合函数","slug":"聚合函数","link":"#聚合函数","children":[{"level":3,"title":"SUM","slug":"sum","link":"#sum","children":[]},{"level":3,"title":"AVG","slug":"avg","link":"#avg","children":[]},{"level":3,"title":"COUNT","slug":"count","link":"#count","children":[]},{"level":3,"title":"MAX","slug":"max","link":"#max","children":[]},{"level":3,"title":"MIN","slug":"min","link":"#min","children":[]}]},{"level":2,"title":"自定义函数","slug":"自定义函数","link":"#自定义函数","children":[{"level":3,"title":"创建自定义函数","slug":"创建自定义函数","link":"#创建自定义函数","children":[]},{"level":3,"title":"使用自定义函数","slug":"使用自定义函数","link":"#使用自定义函数","children":[]},{"level":3,"title":"查看自定义函数","slug":"查看自定义函数","link":"#查看自定义函数","children":[]},{"level":3,"title":"删除自定义函数","slug":"删除自定义函数","link":"#删除自定义函数","children":[]},{"level":3,"title":"示例","slug":"示例","link":"#示例","children":[]}]}],"relativePath":"knowledge-deposition/MySQL/函数.md"}'),p={name:"knowledge-deposition/MySQL/函数.md"},o=l(`

函数

字符函数


CONCAT拼接字符串

SQL
SELECT CONCAT(name, '-', age) FROM student WHERE age = '18';
 
 /** 结果如下:
 如燕-18
diff --git "a/assets/knowledge-deposition_MySQL_\345\207\275\346\225\260.md.6a699cc5.lean.js" "b/assets/knowledge-deposition_MySQL_\345\207\275\346\225\260.md.912200a8.lean.js"
similarity index 96%
rename from "assets/knowledge-deposition_MySQL_\345\207\275\346\225\260.md.6a699cc5.lean.js"
rename to "assets/knowledge-deposition_MySQL_\345\207\275\346\225\260.md.912200a8.lean.js"
index 1ce779fb..0d32b5c5 100644
--- "a/assets/knowledge-deposition_MySQL_\345\207\275\346\225\260.md.6a699cc5.lean.js"
+++ "b/assets/knowledge-deposition_MySQL_\345\207\275\346\225\260.md.912200a8.lean.js"
@@ -1 +1 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const F=JSON.parse('{"title":"函数","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":3,"title":"字符函数","slug":"字符函数","link":"#字符函数","children":[]},{"level":3,"title":"数学函数","slug":"数学函数","link":"#数学函数","children":[]},{"level":3,"title":"日期函数","slug":"日期函数","link":"#日期函数","children":[]},{"level":2,"title":"聚合函数","slug":"聚合函数","link":"#聚合函数","children":[{"level":3,"title":"SUM","slug":"sum","link":"#sum","children":[]},{"level":3,"title":"AVG","slug":"avg","link":"#avg","children":[]},{"level":3,"title":"COUNT","slug":"count","link":"#count","children":[]},{"level":3,"title":"MAX","slug":"max","link":"#max","children":[]},{"level":3,"title":"MIN","slug":"min","link":"#min","children":[]}]},{"level":2,"title":"自定义函数","slug":"自定义函数","link":"#自定义函数","children":[{"level":3,"title":"创建自定义函数","slug":"创建自定义函数","link":"#创建自定义函数","children":[]},{"level":3,"title":"使用自定义函数","slug":"使用自定义函数","link":"#使用自定义函数","children":[]},{"level":3,"title":"查看自定义函数","slug":"查看自定义函数","link":"#查看自定义函数","children":[]},{"level":3,"title":"删除自定义函数","slug":"删除自定义函数","link":"#删除自定义函数","children":[]},{"level":3,"title":"示例","slug":"示例","link":"#示例","children":[]}]}],"relativePath":"knowledge-deposition/MySQL/函数.md"}'),p={name:"knowledge-deposition/MySQL/函数.md"},o=l("",117),e=[o];function t(c,C,r,y,A,D){return n(),a("div",null,e)}const d=s(p,[["render",t]]);export{F as __pageData,d as default};
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const F=JSON.parse('{"title":"函数","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":3,"title":"字符函数","slug":"字符函数","link":"#字符函数","children":[]},{"level":3,"title":"数学函数","slug":"数学函数","link":"#数学函数","children":[]},{"level":3,"title":"日期函数","slug":"日期函数","link":"#日期函数","children":[]},{"level":2,"title":"聚合函数","slug":"聚合函数","link":"#聚合函数","children":[{"level":3,"title":"SUM","slug":"sum","link":"#sum","children":[]},{"level":3,"title":"AVG","slug":"avg","link":"#avg","children":[]},{"level":3,"title":"COUNT","slug":"count","link":"#count","children":[]},{"level":3,"title":"MAX","slug":"max","link":"#max","children":[]},{"level":3,"title":"MIN","slug":"min","link":"#min","children":[]}]},{"level":2,"title":"自定义函数","slug":"自定义函数","link":"#自定义函数","children":[{"level":3,"title":"创建自定义函数","slug":"创建自定义函数","link":"#创建自定义函数","children":[]},{"level":3,"title":"使用自定义函数","slug":"使用自定义函数","link":"#使用自定义函数","children":[]},{"level":3,"title":"查看自定义函数","slug":"查看自定义函数","link":"#查看自定义函数","children":[]},{"level":3,"title":"删除自定义函数","slug":"删除自定义函数","link":"#删除自定义函数","children":[]},{"level":3,"title":"示例","slug":"示例","link":"#示例","children":[]}]}],"relativePath":"knowledge-deposition/MySQL/函数.md"}'),p={name:"knowledge-deposition/MySQL/函数.md"},o=l("",117),e=[o];function t(c,C,r,y,A,D){return n(),a("div",null,e)}const d=s(p,[["render",t]]);export{F as __pageData,d as default};
diff --git "a/assets/knowledge-deposition_MySQL_\345\210\206\347\273\204\345\222\214\345\255\220\346\237\245\350\257\242.md.ddb606e0.js" "b/assets/knowledge-deposition_MySQL_\345\210\206\347\273\204\345\222\214\345\255\220\346\237\245\350\257\242.md.9647f2a4.js"
similarity index 99%
rename from "assets/knowledge-deposition_MySQL_\345\210\206\347\273\204\345\222\214\345\255\220\346\237\245\350\257\242.md.ddb606e0.js"
rename to "assets/knowledge-deposition_MySQL_\345\210\206\347\273\204\345\222\214\345\255\220\346\237\245\350\257\242.md.9647f2a4.js"
index 0e6e946e..ff761f0f 100644
--- "a/assets/knowledge-deposition_MySQL_\345\210\206\347\273\204\345\222\214\345\255\220\346\237\245\350\257\242.md.ddb606e0.js"
+++ "b/assets/knowledge-deposition_MySQL_\345\210\206\347\273\204\345\222\214\345\255\220\346\237\245\350\257\242.md.9647f2a4.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const d=JSON.parse('{"title":"分组和子查询","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"分组","slug":"分组","link":"#分组","children":[{"level":3,"title":"单列分组","slug":"单列分组","link":"#单列分组","children":[]},{"level":3,"title":"多列分组","slug":"多列分组","link":"#多列分组","children":[]},{"level":3,"title":"分组筛选","slug":"分组筛选","link":"#分组筛选","children":[]}]},{"level":2,"title":"子查询","slug":"子查询","link":"#子查询","children":[{"level":3,"title":"子查询比较运算符","slug":"子查询比较运算符","link":"#子查询比较运算符","children":[]},{"level":3,"title":"ANY、SOME、ALL","slug":"any、some、all","link":"#any、some、all","children":[]}]}],"relativePath":"knowledge-deposition/MySQL/分组和子查询.md"}'),e={name:"knowledge-deposition/MySQL/分组和子查询.md"},p=l(`

分组和子查询

分组

分组语法如下:

SQL
SELECT 列名,查询表达式
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const d=JSON.parse('{"title":"分组和子查询","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"分组","slug":"分组","link":"#分组","children":[{"level":3,"title":"单列分组","slug":"单列分组","link":"#单列分组","children":[]},{"level":3,"title":"多列分组","slug":"多列分组","link":"#多列分组","children":[]},{"level":3,"title":"分组筛选","slug":"分组筛选","link":"#分组筛选","children":[]}]},{"level":2,"title":"子查询","slug":"子查询","link":"#子查询","children":[{"level":3,"title":"子查询比较运算符","slug":"子查询比较运算符","link":"#子查询比较运算符","children":[]},{"level":3,"title":"ANY、SOME、ALL","slug":"any、some、all","link":"#any、some、all","children":[]}]}],"relativePath":"knowledge-deposition/MySQL/分组和子查询.md"}'),e={name:"knowledge-deposition/MySQL/分组和子查询.md"},p=l(`

分组和子查询

分组

分组语法如下:

SQL
SELECT 列名,查询表达式
 FROM  <表名>  
 WHERE  <条件>
 GROUP BY <分组字段>
diff --git "a/assets/knowledge-deposition_MySQL_\345\210\206\347\273\204\345\222\214\345\255\220\346\237\245\350\257\242.md.ddb606e0.lean.js" "b/assets/knowledge-deposition_MySQL_\345\210\206\347\273\204\345\222\214\345\255\220\346\237\245\350\257\242.md.9647f2a4.lean.js"
similarity index 94%
rename from "assets/knowledge-deposition_MySQL_\345\210\206\347\273\204\345\222\214\345\255\220\346\237\245\350\257\242.md.ddb606e0.lean.js"
rename to "assets/knowledge-deposition_MySQL_\345\210\206\347\273\204\345\222\214\345\255\220\346\237\245\350\257\242.md.9647f2a4.lean.js"
index fc1b63b2..9eb9e552 100644
--- "a/assets/knowledge-deposition_MySQL_\345\210\206\347\273\204\345\222\214\345\255\220\346\237\245\350\257\242.md.ddb606e0.lean.js"
+++ "b/assets/knowledge-deposition_MySQL_\345\210\206\347\273\204\345\222\214\345\255\220\346\237\245\350\257\242.md.9647f2a4.lean.js"
@@ -1 +1 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const d=JSON.parse('{"title":"分组和子查询","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"分组","slug":"分组","link":"#分组","children":[{"level":3,"title":"单列分组","slug":"单列分组","link":"#单列分组","children":[]},{"level":3,"title":"多列分组","slug":"多列分组","link":"#多列分组","children":[]},{"level":3,"title":"分组筛选","slug":"分组筛选","link":"#分组筛选","children":[]}]},{"level":2,"title":"子查询","slug":"子查询","link":"#子查询","children":[{"level":3,"title":"子查询比较运算符","slug":"子查询比较运算符","link":"#子查询比较运算符","children":[]},{"level":3,"title":"ANY、SOME、ALL","slug":"any、some、all","link":"#any、some、all","children":[]}]}],"relativePath":"knowledge-deposition/MySQL/分组和子查询.md"}'),e={name:"knowledge-deposition/MySQL/分组和子查询.md"},p=l("",34),o=[p];function t(c,C,r,y,A,i){return n(),a("div",null,o)}const F=s(e,[["render",t]]);export{d as __pageData,F as default};
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const d=JSON.parse('{"title":"分组和子查询","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"分组","slug":"分组","link":"#分组","children":[{"level":3,"title":"单列分组","slug":"单列分组","link":"#单列分组","children":[]},{"level":3,"title":"多列分组","slug":"多列分组","link":"#多列分组","children":[]},{"level":3,"title":"分组筛选","slug":"分组筛选","link":"#分组筛选","children":[]}]},{"level":2,"title":"子查询","slug":"子查询","link":"#子查询","children":[{"level":3,"title":"子查询比较运算符","slug":"子查询比较运算符","link":"#子查询比较运算符","children":[]},{"level":3,"title":"ANY、SOME、ALL","slug":"any、some、all","link":"#any、some、all","children":[]}]}],"relativePath":"knowledge-deposition/MySQL/分组和子查询.md"}'),e={name:"knowledge-deposition/MySQL/分组和子查询.md"},p=l("",34),o=[p];function t(c,C,r,y,A,i){return n(),a("div",null,o)}const F=s(e,[["render",t]]);export{d as __pageData,F as default};
diff --git "a/assets/knowledge-deposition_MySQL_\345\237\272\347\241\200\347\237\245\350\257\206.md.8d0d2210.js" "b/assets/knowledge-deposition_MySQL_\345\237\272\347\241\200\347\237\245\350\257\206.md.a7ff1eba.js"
similarity index 99%
rename from "assets/knowledge-deposition_MySQL_\345\237\272\347\241\200\347\237\245\350\257\206.md.8d0d2210.js"
rename to "assets/knowledge-deposition_MySQL_\345\237\272\347\241\200\347\237\245\350\257\206.md.a7ff1eba.js"
index 0ee2ab24..65fcd4d7 100644
--- "a/assets/knowledge-deposition_MySQL_\345\237\272\347\241\200\347\237\245\350\257\206.md.8d0d2210.js"
+++ "b/assets/knowledge-deposition_MySQL_\345\237\272\347\241\200\347\237\245\350\257\206.md.a7ff1eba.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const D=JSON.parse('{"title":"基础知识","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"数据库的功能","slug":"数据库的功能","link":"#数据库的功能","children":[]},{"level":2,"title":"数据库的概念","slug":"数据库的概念","link":"#数据库的概念","children":[{"level":3,"title":"数据库(DB)","slug":"数据库-db","link":"#数据库-db","children":[]},{"level":3,"title":"数据库管理系统(DBMS)","slug":"数据库管理系统-dbms","link":"#数据库管理系统-dbms","children":[]},{"level":3,"title":"SQL","slug":"sql","link":"#sql","children":[]},{"level":3,"title":"SQL规范","slug":"sql规范","link":"#sql规范","children":[]}]},{"level":2,"title":"MySQL","slug":"mysql","link":"#mysql","children":[{"level":3,"title":"连接MySQL","slug":"连接mysql","link":"#连接mysql","children":[]},{"level":3,"title":"切换数据库","slug":"切换数据库","link":"#切换数据库","children":[]},{"level":3,"title":"显示有哪些表","slug":"显示有哪些表","link":"#显示有哪些表","children":[]},{"level":3,"title":"显示当前数据库","slug":"显示当前数据库","link":"#显示当前数据库","children":[]},{"level":3,"title":"显示当前数据库版本","slug":"显示当前数据库版本","link":"#显示当前数据库版本","children":[]},{"level":3,"title":"显示当前登录用户","slug":"显示当前登录用户","link":"#显示当前登录用户","children":[]},{"level":3,"title":"查看表结构","slug":"查看表结构","link":"#查看表结构","children":[]},{"level":3,"title":"查看创建表和增加列的具体语句","slug":"查看创建表和增加列的具体语句","link":"#查看创建表和增加列的具体语句","children":[]},{"level":3,"title":"数据操作","slug":"数据操作","link":"#数据操作","children":[]}]}],"relativePath":"knowledge-deposition/MySQL/基础知识.md"}'),p={name:"knowledge-deposition/MySQL/基础知识.md"},e=l(`

基础知识

数据库的功能

  • 存储大量数据,方便检索和访问

  • 保持数据信息的一致、完整

  • 共享和安全

  • 通过组合分析,产生新的有用信息

数据库的概念

数据库(DB)

  • 数据的仓库,可以存放结构化的数据

数据库管理系统(DBMS)

  • 一种系统软件,提供操作数据库的环境,可以通过数据库管理系统对数据进行插入修改删除查询等操作。

SQL

  • 结构化查询语言,专门用来和数据库进行交流的语言,几乎所有的DBMS都支持SQL

SQL规范

  • SQL语句不区分大小写,建议SQL关键字大写表名列表小写

  • 命令用分号结尾

  • 命令可以缩进和换行,一种类型的关键字放在一行

  • 可以写单行多行注释 , #--单行注释/***/多行注释

MySQL

连接MySQL

  • 通过命令行连接
shell
mysql -h 127.0.0.1 -P 3306 -uroot -p123456
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const D=JSON.parse('{"title":"基础知识","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"数据库的功能","slug":"数据库的功能","link":"#数据库的功能","children":[]},{"level":2,"title":"数据库的概念","slug":"数据库的概念","link":"#数据库的概念","children":[{"level":3,"title":"数据库(DB)","slug":"数据库-db","link":"#数据库-db","children":[]},{"level":3,"title":"数据库管理系统(DBMS)","slug":"数据库管理系统-dbms","link":"#数据库管理系统-dbms","children":[]},{"level":3,"title":"SQL","slug":"sql","link":"#sql","children":[]},{"level":3,"title":"SQL规范","slug":"sql规范","link":"#sql规范","children":[]}]},{"level":2,"title":"MySQL","slug":"mysql","link":"#mysql","children":[{"level":3,"title":"连接MySQL","slug":"连接mysql","link":"#连接mysql","children":[]},{"level":3,"title":"切换数据库","slug":"切换数据库","link":"#切换数据库","children":[]},{"level":3,"title":"显示有哪些表","slug":"显示有哪些表","link":"#显示有哪些表","children":[]},{"level":3,"title":"显示当前数据库","slug":"显示当前数据库","link":"#显示当前数据库","children":[]},{"level":3,"title":"显示当前数据库版本","slug":"显示当前数据库版本","link":"#显示当前数据库版本","children":[]},{"level":3,"title":"显示当前登录用户","slug":"显示当前登录用户","link":"#显示当前登录用户","children":[]},{"level":3,"title":"查看表结构","slug":"查看表结构","link":"#查看表结构","children":[]},{"level":3,"title":"查看创建表和增加列的具体语句","slug":"查看创建表和增加列的具体语句","link":"#查看创建表和增加列的具体语句","children":[]},{"level":3,"title":"数据操作","slug":"数据操作","link":"#数据操作","children":[]}]}],"relativePath":"knowledge-deposition/MySQL/基础知识.md"}'),p={name:"knowledge-deposition/MySQL/基础知识.md"},e=l(`

基础知识

数据库的功能

  • 存储大量数据,方便检索和访问

  • 保持数据信息的一致、完整

  • 共享和安全

  • 通过组合分析,产生新的有用信息

数据库的概念

数据库(DB)

  • 数据的仓库,可以存放结构化的数据

数据库管理系统(DBMS)

  • 一种系统软件,提供操作数据库的环境,可以通过数据库管理系统对数据进行插入修改删除查询等操作。

SQL

  • 结构化查询语言,专门用来和数据库进行交流的语言,几乎所有的DBMS都支持SQL

SQL规范

  • SQL语句不区分大小写,建议SQL关键字大写表名列表小写

  • 命令用分号结尾

  • 命令可以缩进和换行,一种类型的关键字放在一行

  • 可以写单行多行注释 , #--单行注释/***/多行注释

MySQL

连接MySQL

  • 通过命令行连接
shell
mysql -h 127.0.0.1 -P 3306 -uroot -p123456
 

切换数据库

SQL
USE database_name;
 # 例如
 USE student;
diff --git "a/assets/knowledge-deposition_MySQL_\345\237\272\347\241\200\347\237\245\350\257\206.md.8d0d2210.lean.js" "b/assets/knowledge-deposition_MySQL_\345\237\272\347\241\200\347\237\245\350\257\206.md.a7ff1eba.lean.js"
similarity index 97%
rename from "assets/knowledge-deposition_MySQL_\345\237\272\347\241\200\347\237\245\350\257\206.md.8d0d2210.lean.js"
rename to "assets/knowledge-deposition_MySQL_\345\237\272\347\241\200\347\237\245\350\257\206.md.a7ff1eba.lean.js"
index 4260cb0e..3e334faa 100644
--- "a/assets/knowledge-deposition_MySQL_\345\237\272\347\241\200\347\237\245\350\257\206.md.8d0d2210.lean.js"
+++ "b/assets/knowledge-deposition_MySQL_\345\237\272\347\241\200\347\237\245\350\257\206.md.a7ff1eba.lean.js"
@@ -1 +1 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const D=JSON.parse('{"title":"基础知识","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"数据库的功能","slug":"数据库的功能","link":"#数据库的功能","children":[]},{"level":2,"title":"数据库的概念","slug":"数据库的概念","link":"#数据库的概念","children":[{"level":3,"title":"数据库(DB)","slug":"数据库-db","link":"#数据库-db","children":[]},{"level":3,"title":"数据库管理系统(DBMS)","slug":"数据库管理系统-dbms","link":"#数据库管理系统-dbms","children":[]},{"level":3,"title":"SQL","slug":"sql","link":"#sql","children":[]},{"level":3,"title":"SQL规范","slug":"sql规范","link":"#sql规范","children":[]}]},{"level":2,"title":"MySQL","slug":"mysql","link":"#mysql","children":[{"level":3,"title":"连接MySQL","slug":"连接mysql","link":"#连接mysql","children":[]},{"level":3,"title":"切换数据库","slug":"切换数据库","link":"#切换数据库","children":[]},{"level":3,"title":"显示有哪些表","slug":"显示有哪些表","link":"#显示有哪些表","children":[]},{"level":3,"title":"显示当前数据库","slug":"显示当前数据库","link":"#显示当前数据库","children":[]},{"level":3,"title":"显示当前数据库版本","slug":"显示当前数据库版本","link":"#显示当前数据库版本","children":[]},{"level":3,"title":"显示当前登录用户","slug":"显示当前登录用户","link":"#显示当前登录用户","children":[]},{"level":3,"title":"查看表结构","slug":"查看表结构","link":"#查看表结构","children":[]},{"level":3,"title":"查看创建表和增加列的具体语句","slug":"查看创建表和增加列的具体语句","link":"#查看创建表和增加列的具体语句","children":[]},{"level":3,"title":"数据操作","slug":"数据操作","link":"#数据操作","children":[]}]}],"relativePath":"knowledge-deposition/MySQL/基础知识.md"}'),p={name:"knowledge-deposition/MySQL/基础知识.md"},e=l("",54),o=[e];function t(c,r,C,i,y,A){return n(),a("div",null,o)}const h=s(p,[["render",t]]);export{D as __pageData,h as default};
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const D=JSON.parse('{"title":"基础知识","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"数据库的功能","slug":"数据库的功能","link":"#数据库的功能","children":[]},{"level":2,"title":"数据库的概念","slug":"数据库的概念","link":"#数据库的概念","children":[{"level":3,"title":"数据库(DB)","slug":"数据库-db","link":"#数据库-db","children":[]},{"level":3,"title":"数据库管理系统(DBMS)","slug":"数据库管理系统-dbms","link":"#数据库管理系统-dbms","children":[]},{"level":3,"title":"SQL","slug":"sql","link":"#sql","children":[]},{"level":3,"title":"SQL规范","slug":"sql规范","link":"#sql规范","children":[]}]},{"level":2,"title":"MySQL","slug":"mysql","link":"#mysql","children":[{"level":3,"title":"连接MySQL","slug":"连接mysql","link":"#连接mysql","children":[]},{"level":3,"title":"切换数据库","slug":"切换数据库","link":"#切换数据库","children":[]},{"level":3,"title":"显示有哪些表","slug":"显示有哪些表","link":"#显示有哪些表","children":[]},{"level":3,"title":"显示当前数据库","slug":"显示当前数据库","link":"#显示当前数据库","children":[]},{"level":3,"title":"显示当前数据库版本","slug":"显示当前数据库版本","link":"#显示当前数据库版本","children":[]},{"level":3,"title":"显示当前登录用户","slug":"显示当前登录用户","link":"#显示当前登录用户","children":[]},{"level":3,"title":"查看表结构","slug":"查看表结构","link":"#查看表结构","children":[]},{"level":3,"title":"查看创建表和增加列的具体语句","slug":"查看创建表和增加列的具体语句","link":"#查看创建表和增加列的具体语句","children":[]},{"level":3,"title":"数据操作","slug":"数据操作","link":"#数据操作","children":[]}]}],"relativePath":"knowledge-deposition/MySQL/基础知识.md"}'),p={name:"knowledge-deposition/MySQL/基础知识.md"},e=l("",54),o=[e];function t(c,r,C,i,y,A){return n(),a("div",null,o)}const h=s(p,[["render",t]]);export{D as __pageData,h as default};
diff --git "a/assets/knowledge-deposition_MySQL_\346\225\260\346\215\256\346\223\215\344\275\234\345\222\214\346\237\245\350\257\242.md.d8f411bc.js" "b/assets/knowledge-deposition_MySQL_\346\225\260\346\215\256\346\223\215\344\275\234\345\222\214\346\237\245\350\257\242.md.b8266413.js"
similarity index 99%
rename from "assets/knowledge-deposition_MySQL_\346\225\260\346\215\256\346\223\215\344\275\234\345\222\214\346\237\245\350\257\242.md.d8f411bc.js"
rename to "assets/knowledge-deposition_MySQL_\346\225\260\346\215\256\346\223\215\344\275\234\345\222\214\346\237\245\350\257\242.md.b8266413.js"
index 84164031..b6a87d7e 100644
--- "a/assets/knowledge-deposition_MySQL_\346\225\260\346\215\256\346\223\215\344\275\234\345\222\214\346\237\245\350\257\242.md.d8f411bc.js"
+++ "b/assets/knowledge-deposition_MySQL_\346\225\260\346\215\256\346\223\215\344\275\234\345\222\214\346\237\245\350\257\242.md.b8266413.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const D=JSON.parse('{"title":"数据操作和查询","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"数据操作","slug":"数据操作","link":"#数据操作","children":[{"level":3,"title":"插入","slug":"插入","link":"#插入","children":[]},{"level":3,"title":"更新","slug":"更新","link":"#更新","children":[]},{"level":3,"title":"删除","slug":"删除","link":"#删除","children":[]},{"level":3,"title":"截断表(清空表数据)","slug":"截断表-清空表数据","link":"#截断表-清空表数据","children":[]}]},{"level":2,"title":"查询","slug":"查询","link":"#查询","children":[{"level":3,"title":"模糊查询","slug":"模糊查询","link":"#模糊查询","children":[]}]}],"relativePath":"knowledge-deposition/MySQL/数据操作和查询.md"}'),p={name:"knowledge-deposition/MySQL/数据操作和查询.md"},o=l(`

数据操作和查询

数据操作


插入

SQL
INSERT [INTO] 表名 [(列名)] VALUES (值列表);
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const D=JSON.parse('{"title":"数据操作和查询","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"数据操作","slug":"数据操作","link":"#数据操作","children":[{"level":3,"title":"插入","slug":"插入","link":"#插入","children":[]},{"level":3,"title":"更新","slug":"更新","link":"#更新","children":[]},{"level":3,"title":"删除","slug":"删除","link":"#删除","children":[]},{"level":3,"title":"截断表(清空表数据)","slug":"截断表-清空表数据","link":"#截断表-清空表数据","children":[]}]},{"level":2,"title":"查询","slug":"查询","link":"#查询","children":[{"level":3,"title":"模糊查询","slug":"模糊查询","link":"#模糊查询","children":[]}]}],"relativePath":"knowledge-deposition/MySQL/数据操作和查询.md"}'),p={name:"knowledge-deposition/MySQL/数据操作和查询.md"},o=l(`

数据操作和查询

数据操作


插入

SQL
INSERT [INTO] 表名 [(列名)] VALUES (值列表);
 

WARNING

  • 每次插入一行数据,不能只插入一部分数据,插入的数据是否有效将按照整行的完整性要求来检验

  • 每个数据值的数据类型精度位数必须与要与对应的列名精确匹配

  • 不能为标识符指定值

  • 如果某字段设置为不能为空,则必须插入数据

  • 插入数据时还要符合检查性约束的要求

  • 缺省值的列,可以使用DEFAULT关键字来代替插入实际的值

例子

SQL
INSERT lyb.student (name, age, gender) VALUES ('张三', 22, 0);
 INSERT INTO lyb.student (name, age, gender) VALUES ('李四', 28, 0);
 

更新

SQL
UPDATE 表名 SET 列名 = 更新值 [WHERE 更新条件]
diff --git "a/assets/knowledge-deposition_MySQL_\346\225\260\346\215\256\346\223\215\344\275\234\345\222\214\346\237\245\350\257\242.md.d8f411bc.lean.js" "b/assets/knowledge-deposition_MySQL_\346\225\260\346\215\256\346\223\215\344\275\234\345\222\214\346\237\245\350\257\242.md.b8266413.lean.js"
similarity index 93%
rename from "assets/knowledge-deposition_MySQL_\346\225\260\346\215\256\346\223\215\344\275\234\345\222\214\346\237\245\350\257\242.md.d8f411bc.lean.js"
rename to "assets/knowledge-deposition_MySQL_\346\225\260\346\215\256\346\223\215\344\275\234\345\222\214\346\237\245\350\257\242.md.b8266413.lean.js"
index 481380b8..e5939ab4 100644
--- "a/assets/knowledge-deposition_MySQL_\346\225\260\346\215\256\346\223\215\344\275\234\345\222\214\346\237\245\350\257\242.md.d8f411bc.lean.js"
+++ "b/assets/knowledge-deposition_MySQL_\346\225\260\346\215\256\346\223\215\344\275\234\345\222\214\346\237\245\350\257\242.md.b8266413.lean.js"
@@ -1 +1 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const D=JSON.parse('{"title":"数据操作和查询","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"数据操作","slug":"数据操作","link":"#数据操作","children":[{"level":3,"title":"插入","slug":"插入","link":"#插入","children":[]},{"level":3,"title":"更新","slug":"更新","link":"#更新","children":[]},{"level":3,"title":"删除","slug":"删除","link":"#删除","children":[]},{"level":3,"title":"截断表(清空表数据)","slug":"截断表-清空表数据","link":"#截断表-清空表数据","children":[]}]},{"level":2,"title":"查询","slug":"查询","link":"#查询","children":[{"level":3,"title":"模糊查询","slug":"模糊查询","link":"#模糊查询","children":[]}]}],"relativePath":"knowledge-deposition/MySQL/数据操作和查询.md"}'),p={name:"knowledge-deposition/MySQL/数据操作和查询.md"},o=l("",48),e=[o];function c(t,C,r,i,y,d){return n(),a("div",null,e)}const F=s(p,[["render",c]]);export{D as __pageData,F as default};
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const D=JSON.parse('{"title":"数据操作和查询","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"数据操作","slug":"数据操作","link":"#数据操作","children":[{"level":3,"title":"插入","slug":"插入","link":"#插入","children":[]},{"level":3,"title":"更新","slug":"更新","link":"#更新","children":[]},{"level":3,"title":"删除","slug":"删除","link":"#删除","children":[]},{"level":3,"title":"截断表(清空表数据)","slug":"截断表-清空表数据","link":"#截断表-清空表数据","children":[]}]},{"level":2,"title":"查询","slug":"查询","link":"#查询","children":[{"level":3,"title":"模糊查询","slug":"模糊查询","link":"#模糊查询","children":[]}]}],"relativePath":"knowledge-deposition/MySQL/数据操作和查询.md"}'),p={name:"knowledge-deposition/MySQL/数据操作和查询.md"},o=l("",48),e=[o];function c(t,C,r,i,y,d){return n(),a("div",null,e)}const F=s(p,[["render",c]]);export{D as __pageData,F as default};
diff --git "a/assets/knowledge-deposition_MySQL_\350\241\250\350\277\236\346\216\245.md.27337605.js" "b/assets/knowledge-deposition_MySQL_\350\241\250\350\277\236\346\216\245.md.852b1cc4.js"
similarity index 99%
rename from "assets/knowledge-deposition_MySQL_\350\241\250\350\277\236\346\216\245.md.27337605.js"
rename to "assets/knowledge-deposition_MySQL_\350\241\250\350\277\236\346\216\245.md.852b1cc4.js"
index 7e8dcb0d..2c9d3251 100644
--- "a/assets/knowledge-deposition_MySQL_\350\241\250\350\277\236\346\216\245.md.27337605.js"
+++ "b/assets/knowledge-deposition_MySQL_\350\241\250\350\277\236\346\216\245.md.852b1cc4.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const D=JSON.parse('{"title":"表连接","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"表连接类型","slug":"表连接类型","link":"#表连接类型","children":[]},{"level":2,"title":"连接条件","slug":"连接条件","link":"#连接条件","children":[]},{"level":2,"title":"内连接INNER JOIN","slug":"内连接inner-join","link":"#内连接inner-join","children":[]},{"level":2,"title":"左外连接LEFT JOIN","slug":"左外连接left-join","link":"#左外连接left-join","children":[]},{"level":2,"title":"右外连接RIGHT JOIN","slug":"右外连接right-join","link":"#右外连接right-join","children":[]},{"level":2,"title":"多表连接","slug":"多表连接","link":"#多表连接","children":[]},{"level":2,"title":"自连接","slug":"自连接","link":"#自连接","children":[]}],"relativePath":"knowledge-deposition/MySQL/表连接.md"}'),e={name:"knowledge-deposition/MySQL/表连接.md"},o=l(`

表连接

表连接类型

  • INNER JOIN:内连接

  • LEFT JOIN:左外连接

  • RIGHT JOIN:右外连接

连接条件

使用ON关键字来设定连接条件,也可以使用WHERE

内连接INNER JOIN

  • 筛选同时符合左表和右表的查询条件(指连接结果仅包含符合连接条件的行,参与连接的两个表都应该符合连接条件)
SQL
# 使用ON关键字
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const D=JSON.parse('{"title":"表连接","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"表连接类型","slug":"表连接类型","link":"#表连接类型","children":[]},{"level":2,"title":"连接条件","slug":"连接条件","link":"#连接条件","children":[]},{"level":2,"title":"内连接INNER JOIN","slug":"内连接inner-join","link":"#内连接inner-join","children":[]},{"level":2,"title":"左外连接LEFT JOIN","slug":"左外连接left-join","link":"#左外连接left-join","children":[]},{"level":2,"title":"右外连接RIGHT JOIN","slug":"右外连接right-join","link":"#右外连接right-join","children":[]},{"level":2,"title":"多表连接","slug":"多表连接","link":"#多表连接","children":[]},{"level":2,"title":"自连接","slug":"自连接","link":"#自连接","children":[]}],"relativePath":"knowledge-deposition/MySQL/表连接.md"}'),e={name:"knowledge-deposition/MySQL/表连接.md"},o=l(`

表连接

表连接类型

  • INNER JOIN:内连接

  • LEFT JOIN:左外连接

  • RIGHT JOIN:右外连接

连接条件

使用ON关键字来设定连接条件,也可以使用WHERE

内连接INNER JOIN

  • 筛选同时符合左表和右表的查询条件(指连接结果仅包含符合连接条件的行,参与连接的两个表都应该符合连接条件)
SQL
# 使用ON关键字
 SELECT * FROM student A INNER JOIN score B ON A.id = B.student_id;
 # 还可以使用WHERE,和上面的查询是一样的
 SELECT * FROM student A, score B WHERE A.id = B.student_id;
diff --git "a/assets/knowledge-deposition_MySQL_\350\241\250\350\277\236\346\216\245.md.27337605.lean.js" "b/assets/knowledge-deposition_MySQL_\350\241\250\350\277\236\346\216\245.md.852b1cc4.lean.js"
similarity index 94%
rename from "assets/knowledge-deposition_MySQL_\350\241\250\350\277\236\346\216\245.md.27337605.lean.js"
rename to "assets/knowledge-deposition_MySQL_\350\241\250\350\277\236\346\216\245.md.852b1cc4.lean.js"
index cabef5bc..2e54614f 100644
--- "a/assets/knowledge-deposition_MySQL_\350\241\250\350\277\236\346\216\245.md.27337605.lean.js"
+++ "b/assets/knowledge-deposition_MySQL_\350\241\250\350\277\236\346\216\245.md.852b1cc4.lean.js"
@@ -1 +1 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const D=JSON.parse('{"title":"表连接","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"表连接类型","slug":"表连接类型","link":"#表连接类型","children":[]},{"level":2,"title":"连接条件","slug":"连接条件","link":"#连接条件","children":[]},{"level":2,"title":"内连接INNER JOIN","slug":"内连接inner-join","link":"#内连接inner-join","children":[]},{"level":2,"title":"左外连接LEFT JOIN","slug":"左外连接left-join","link":"#左外连接left-join","children":[]},{"level":2,"title":"右外连接RIGHT JOIN","slug":"右外连接right-join","link":"#右外连接right-join","children":[]},{"level":2,"title":"多表连接","slug":"多表连接","link":"#多表连接","children":[]},{"level":2,"title":"自连接","slug":"自连接","link":"#自连接","children":[]}],"relativePath":"knowledge-deposition/MySQL/表连接.md"}'),e={name:"knowledge-deposition/MySQL/表连接.md"},o=l("",29),p=[o];function c(t,C,r,i,d,y){return n(),a("div",null,p)}const F=s(e,[["render",c]]);export{D as __pageData,F as default};
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const D=JSON.parse('{"title":"表连接","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"表连接类型","slug":"表连接类型","link":"#表连接类型","children":[]},{"level":2,"title":"连接条件","slug":"连接条件","link":"#连接条件","children":[]},{"level":2,"title":"内连接INNER JOIN","slug":"内连接inner-join","link":"#内连接inner-join","children":[]},{"level":2,"title":"左外连接LEFT JOIN","slug":"左外连接left-join","link":"#左外连接left-join","children":[]},{"level":2,"title":"右外连接RIGHT JOIN","slug":"右外连接right-join","link":"#右外连接right-join","children":[]},{"level":2,"title":"多表连接","slug":"多表连接","link":"#多表连接","children":[]},{"level":2,"title":"自连接","slug":"自连接","link":"#自连接","children":[]}],"relativePath":"knowledge-deposition/MySQL/表连接.md"}'),e={name:"knowledge-deposition/MySQL/表连接.md"},o=l("",29),p=[o];function c(t,C,r,i,d,y){return n(),a("div",null,p)}const F=s(e,[["render",c]]);export{D as __pageData,F as default};
diff --git "a/assets/knowledge-deposition_Nacos_\345\237\272\346\234\254\346\246\202\345\277\265\345\222\214\345\256\211\350\243\205\345\220\257\345\212\250.md.b38a534c.js" "b/assets/knowledge-deposition_Nacos_\345\237\272\346\234\254\346\246\202\345\277\265\345\222\214\345\256\211\350\243\205\345\220\257\345\212\250.md.37394e88.js"
similarity index 99%
rename from "assets/knowledge-deposition_Nacos_\345\237\272\346\234\254\346\246\202\345\277\265\345\222\214\345\256\211\350\243\205\345\220\257\345\212\250.md.b38a534c.js"
rename to "assets/knowledge-deposition_Nacos_\345\237\272\346\234\254\346\246\202\345\277\265\345\222\214\345\256\211\350\243\205\345\220\257\345\212\250.md.37394e88.js"
index 07da1d9b..707c5e72 100644
--- "a/assets/knowledge-deposition_Nacos_\345\237\272\346\234\254\346\246\202\345\277\265\345\222\214\345\256\211\350\243\205\345\220\257\345\212\250.md.b38a534c.js"
+++ "b/assets/knowledge-deposition_Nacos_\345\237\272\346\234\254\346\246\202\345\277\265\345\222\214\345\256\211\350\243\205\345\220\257\345\212\250.md.37394e88.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const d=JSON.parse('{"title":"基本概念和安装启动","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"概念","slug":"概念","link":"#概念","children":[]},{"level":2,"title":"启动Nacos","slug":"启动nacos","link":"#启动nacos","children":[]},{"level":2,"title":"开启鉴权","slug":"开启鉴权","link":"#开启鉴权","children":[]}],"relativePath":"knowledge-deposition/Nacos/基本概念和安装启动.md"}'),o={name:"knowledge-deposition/Nacos/基本概念和安装启动.md"},p=l(`

基本概念和安装启动

概念

Nacos(官方网站:nacos.io)是一个易于使用的平台,专为动态服务发现、配置和服务管理而设计。它帮助您轻松构建云原生应用程序和微服务平台。

Nacos提供四个主要功能:

  • 服务发现和服务健康检查

  • 动态配置管理

  • 动态 DNS 服务

  • 服务和元数据管理

启动Nacos

TIP

  • 启动nacos有单机模式运行集群模式,今天只使用单机模式

我们使用Docker来搭建Nacos服务,更多配置参考quick-start-docker

服务目录如下:

shell
.
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const d=JSON.parse('{"title":"基本概念和安装启动","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"概念","slug":"概念","link":"#概念","children":[]},{"level":2,"title":"启动Nacos","slug":"启动nacos","link":"#启动nacos","children":[]},{"level":2,"title":"开启鉴权","slug":"开启鉴权","link":"#开启鉴权","children":[]}],"relativePath":"knowledge-deposition/Nacos/基本概念和安装启动.md"}'),o={name:"knowledge-deposition/Nacos/基本概念和安装启动.md"},p=l(`

基本概念和安装启动

概念

Nacos(官方网站:nacos.io)是一个易于使用的平台,专为动态服务发现、配置和服务管理而设计。它帮助您轻松构建云原生应用程序和微服务平台。

Nacos提供四个主要功能:

  • 服务发现和服务健康检查

  • 动态配置管理

  • 动态 DNS 服务

  • 服务和元数据管理

启动Nacos

TIP

  • 启动nacos有单机模式运行集群模式,今天只使用单机模式

我们使用Docker来搭建Nacos服务,更多配置参考quick-start-docker

服务目录如下:

shell
.
 ├── .env # 环境变量文件,用于standalone-mysql-8.yaml读取环境变量
 ├── env
    ├── mysql.env # mysql 环境变量
diff --git "a/assets/knowledge-deposition_Nacos_\345\237\272\346\234\254\346\246\202\345\277\265\345\222\214\345\256\211\350\243\205\345\220\257\345\212\250.md.b38a534c.lean.js" "b/assets/knowledge-deposition_Nacos_\345\237\272\346\234\254\346\246\202\345\277\265\345\222\214\345\256\211\350\243\205\345\220\257\345\212\250.md.37394e88.lean.js"
similarity index 91%
rename from "assets/knowledge-deposition_Nacos_\345\237\272\346\234\254\346\246\202\345\277\265\345\222\214\345\256\211\350\243\205\345\220\257\345\212\250.md.b38a534c.lean.js"
rename to "assets/knowledge-deposition_Nacos_\345\237\272\346\234\254\346\246\202\345\277\265\345\222\214\345\256\211\350\243\205\345\220\257\345\212\250.md.37394e88.lean.js"
index ba1533d5..2268b3fe 100644
--- "a/assets/knowledge-deposition_Nacos_\345\237\272\346\234\254\346\246\202\345\277\265\345\222\214\345\256\211\350\243\205\345\220\257\345\212\250.md.b38a534c.lean.js"
+++ "b/assets/knowledge-deposition_Nacos_\345\237\272\346\234\254\346\246\202\345\277\265\345\222\214\345\256\211\350\243\205\345\220\257\345\212\250.md.37394e88.lean.js"
@@ -1 +1 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const d=JSON.parse('{"title":"基本概念和安装启动","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"概念","slug":"概念","link":"#概念","children":[]},{"level":2,"title":"启动Nacos","slug":"启动nacos","link":"#启动nacos","children":[]},{"level":2,"title":"开启鉴权","slug":"开启鉴权","link":"#开启鉴权","children":[]}],"relativePath":"knowledge-deposition/Nacos/基本概念和安装启动.md"}'),o={name:"knowledge-deposition/Nacos/基本概念和安装启动.md"},p=l("",36),e=[p];function c(t,r,y,i,C,D){return n(),a("div",null,e)}const F=s(o,[["render",c]]);export{d as __pageData,F as default};
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const d=JSON.parse('{"title":"基本概念和安装启动","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"概念","slug":"概念","link":"#概念","children":[]},{"level":2,"title":"启动Nacos","slug":"启动nacos","link":"#启动nacos","children":[]},{"level":2,"title":"开启鉴权","slug":"开启鉴权","link":"#开启鉴权","children":[]}],"relativePath":"knowledge-deposition/Nacos/基本概念和安装启动.md"}'),o={name:"knowledge-deposition/Nacos/基本概念和安装启动.md"},p=l("",36),e=[p];function c(t,r,y,i,C,D){return n(),a("div",null,e)}const F=s(o,[["render",c]]);export{d as __pageData,F as default};
diff --git "a/assets/knowledge-deposition_Nacos_\346\223\215\344\275\234\345\212\250\346\200\201\351\205\215\347\275\256\346\226\207\344\273\266.md.32b4899c.js" "b/assets/knowledge-deposition_Nacos_\346\223\215\344\275\234\345\212\250\346\200\201\351\205\215\347\275\256\346\226\207\344\273\266.md.9c09c798.js"
similarity index 99%
rename from "assets/knowledge-deposition_Nacos_\346\223\215\344\275\234\345\212\250\346\200\201\351\205\215\347\275\256\346\226\207\344\273\266.md.32b4899c.js"
rename to "assets/knowledge-deposition_Nacos_\346\223\215\344\275\234\345\212\250\346\200\201\351\205\215\347\275\256\346\226\207\344\273\266.md.9c09c798.js"
index 50503d98..db443436 100644
--- "a/assets/knowledge-deposition_Nacos_\346\223\215\344\275\234\345\212\250\346\200\201\351\205\215\347\275\256\346\226\207\344\273\266.md.32b4899c.js"
+++ "b/assets/knowledge-deposition_Nacos_\346\223\215\344\275\234\345\212\250\346\200\201\351\205\215\347\275\256\346\226\207\344\273\266.md.9c09c798.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"操作动态配置文件","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"可用方法","slug":"可用方法","link":"#可用方法","children":[]},{"level":2,"title":"不使用命名空间","slug":"不使用命名空间","link":"#不使用命名空间","children":[]},{"level":2,"title":"使用命名空间","slug":"使用命名空间","link":"#使用命名空间","children":[]},{"level":2,"title":"获取nacos server的配置,并转为go struct","slug":"获取nacos-server的配置-并转为go-struct","link":"#获取nacos-server的配置-并转为go-struct","children":[]}],"relativePath":"knowledge-deposition/Nacos/操作动态配置文件.md"}'),o={name:"knowledge-deposition/Nacos/操作动态配置文件.md"},p=l(`

操作动态配置文件

Nacos可以动态读取修改删除配置文件,还可以监听配置文件修改

使用go sdk来实现

  • ClientConfig配置参数
Go
constant.ClientConfig {
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"操作动态配置文件","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"可用方法","slug":"可用方法","link":"#可用方法","children":[]},{"level":2,"title":"不使用命名空间","slug":"不使用命名空间","link":"#不使用命名空间","children":[]},{"level":2,"title":"使用命名空间","slug":"使用命名空间","link":"#使用命名空间","children":[]},{"level":2,"title":"获取nacos server的配置,并转为go struct","slug":"获取nacos-server的配置-并转为go-struct","link":"#获取nacos-server的配置-并转为go-struct","children":[]}],"relativePath":"knowledge-deposition/Nacos/操作动态配置文件.md"}'),o={name:"knowledge-deposition/Nacos/操作动态配置文件.md"},p=l(`

操作动态配置文件

Nacos可以动态读取修改删除配置文件,还可以监听配置文件修改

使用go sdk来实现

  • ClientConfig配置参数
Go
constant.ClientConfig {
     TimeoutMs   uint64 // timeout for requesting Nacos server, default value is 10000ms
     NamespaceId string // the namespaceId of Nacos
     Endpoint    string // the endpoint for ACM. https://help.aliyun.com/document_detail/130146.html
diff --git "a/assets/knowledge-deposition_Nacos_\346\223\215\344\275\234\345\212\250\346\200\201\351\205\215\347\275\256\346\226\207\344\273\266.md.32b4899c.lean.js" "b/assets/knowledge-deposition_Nacos_\346\223\215\344\275\234\345\212\250\346\200\201\351\205\215\347\275\256\346\226\207\344\273\266.md.9c09c798.lean.js"
similarity index 93%
rename from "assets/knowledge-deposition_Nacos_\346\223\215\344\275\234\345\212\250\346\200\201\351\205\215\347\275\256\346\226\207\344\273\266.md.32b4899c.lean.js"
rename to "assets/knowledge-deposition_Nacos_\346\223\215\344\275\234\345\212\250\346\200\201\351\205\215\347\275\256\346\226\207\344\273\266.md.9c09c798.lean.js"
index b0618974..bd0ae343 100644
--- "a/assets/knowledge-deposition_Nacos_\346\223\215\344\275\234\345\212\250\346\200\201\351\205\215\347\275\256\346\226\207\344\273\266.md.32b4899c.lean.js"
+++ "b/assets/knowledge-deposition_Nacos_\346\223\215\344\275\234\345\212\250\346\200\201\351\205\215\347\275\256\346\226\207\344\273\266.md.9c09c798.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"操作动态配置文件","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"可用方法","slug":"可用方法","link":"#可用方法","children":[]},{"level":2,"title":"不使用命名空间","slug":"不使用命名空间","link":"#不使用命名空间","children":[]},{"level":2,"title":"使用命名空间","slug":"使用命名空间","link":"#使用命名空间","children":[]},{"level":2,"title":"获取nacos server的配置,并转为go struct","slug":"获取nacos-server的配置-并转为go-struct","link":"#获取nacos-server的配置-并转为go-struct","children":[]}],"relativePath":"knowledge-deposition/Nacos/操作动态配置文件.md"}'),o={name:"knowledge-deposition/Nacos/操作动态配置文件.md"},p=l("",38),t=[p];function e(c,D,r,F,y,C){return a(),n("div",null,t)}const u=s(o,[["render",e]]);export{i as __pageData,u as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"操作动态配置文件","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"可用方法","slug":"可用方法","link":"#可用方法","children":[]},{"level":2,"title":"不使用命名空间","slug":"不使用命名空间","link":"#不使用命名空间","children":[]},{"level":2,"title":"使用命名空间","slug":"使用命名空间","link":"#使用命名空间","children":[]},{"level":2,"title":"获取nacos server的配置,并转为go struct","slug":"获取nacos-server的配置-并转为go-struct","link":"#获取nacos-server的配置-并转为go-struct","children":[]}],"relativePath":"knowledge-deposition/Nacos/操作动态配置文件.md"}'),o={name:"knowledge-deposition/Nacos/操作动态配置文件.md"},p=l("",38),t=[p];function e(c,D,r,F,y,C){return a(),n("div",null,t)}const u=s(o,[["render",e]]);export{i as __pageData,u as default};
diff --git "a/assets/knowledge-deposition_RabbitMQ_\345\217\221\345\270\203\350\256\242\351\230\205.md.7326d7a7.js" "b/assets/knowledge-deposition_RabbitMQ_\345\217\221\345\270\203\350\256\242\351\230\205.md.7326d7a7.js"
new file mode 100644
index 00000000..0bd44f8b
--- /dev/null
+++ "b/assets/knowledge-deposition_RabbitMQ_\345\217\221\345\270\203\350\256\242\351\230\205.md.7326d7a7.js"
@@ -0,0 +1,357 @@
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"发布订阅","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"交换机","slug":"交换机","link":"#交换机","children":[{"level":3,"title":"Direct(直连模式)","slug":"direct-直连模式","link":"#direct-直连模式","children":[]},{"level":3,"title":"Topic(主题模式)","slug":"topic-主题模式","link":"#topic-主题模式","children":[]},{"level":3,"title":"Headers(头部模式)","slug":"headers-头部模式","link":"#headers-头部模式","children":[]},{"level":3,"title":"Fanout(广播模式)","slug":"fanout-广播模式","link":"#fanout-广播模式","children":[]}]},{"level":2,"title":"一个简单案例","slug":"一个简单案例","link":"#一个简单案例","children":[]}],"relativePath":"knowledge-deposition/RabbitMQ/发布订阅.md"}'),p={name:"knowledge-deposition/RabbitMQ/发布订阅.md"},o=l(`

发布订阅

之前的代码实现的都是一对一的模式,也就是一个任务分配给一个消费者去消费,但是其实也可以实现一个任务分配给多个消费者

可以使用发布/订阅模式来实现,这种模式下,要使用到交换机(Exchange)

交换机

交换机(Exchange)的作用从Producer处接收消息(Message),然后将消息发送到队列(Queues)

交换机(Exchange)必须明确自己如何去处理消息,这个规则取决于交换机的类型

交换机(Exchange)有这几种类型:TopicDirectHeadersFanout

之前的代码中都没有用到交换机(Exchange),都是直接声明一个具名队列

如下:函数ch.PublishWithContextexchange name是空字符串,这时会使用一个默认的交换机

Go
// 3. declare a queue,it will only be created if it doesn't exist already
+queue, err := ch.QueueDeclare(
+    "second_queue", // queue name
+    true,           // durable
+    false,          //delete when unused
+    false,          //exclusive
+    false,          // no-wait
+    nil,            // arguments
+)
+
+// publish message
+err = ch.PublishWithContext(
+    withTimeoutCtx,
+    "",         //exchange name
+    queue.Name, // routing key
+    false,      // mandatory
+    false,      //immediate
+    amqp.Publishing{
+        DeliveryMode: amqp.Persistent,
+        Body:         []byte(messageBody),
+        ContentType:  "text/plain",
+    },
+)
+

Direct(直连模式)

交换机(Exchange)将消息发送到某个匹配的队列中,匹配规则是:这个队列的binding key要和消息的routing key一致

TIP

  • 队列的binding key在调用ch.QueueBind方法时指定

  • 消息的routing key在调用ch.PublishWithContext方法中指定

适用于明确指定的路由,例如,处理特定类型的任务,简单示例代码如下:

producer.go

Go
// xxxx 其他代码
+// declare exchange
+err = ch.ExchangeDeclare(
+    "directLogs", // exchange name
+    "direct",      // exchange type
+    true,          // durable
+    false,         // auto-deleted
+    false,         // internal
+    false,         // no-wait
+    nil,           // arguments
+)
+// xxxx 其他代码
+err = ch.PublishWithContext(
+    ctx, // context
+    "directLogs", // exchange name
+    "directRoutingKey", // routing key
+    false, // mandatory
+    false, // immediate
+    amqp.Publishing{
+        DeliveryMode: amqp.Persistent,
+        ContentType:  "text/plain",
+        Body:         []byte(messageBody),
+    },
+)
+

consumer.go

Go
// xxxx 其他代码
+// declare exchange
+err = ch.ExchangeDeclare(
+    "directLogs", // exchange name
+    "direct",      // exchange type
+    true,          // durable
+    false,         // auto-deleted
+    false,         // internal
+    false,         // no-wait
+    nil,           // arguments
+)
+q, err := ch.QueueDeclare(
+    "directQueue", // name
+    true,    // durable
+    false,   // delete when unused
+    false,   // exclusive
+    false,   // no-wait
+    nil,     // arguments
+)
+// 将交换机和队列进行绑定
+err = ch.QueueBind(
+    q.Name,        // queue name
+    "directRoutingKey", // binding key
+    "directLogs", // exchange name
+    false,
+    nil,
+)
+// xxxx 其他代码
+

Topic(主题模式)

将接收到的消息放到和交换机指定的routing key匹配的队列里面

额外增加使用*(匹配一个单词)或使用#(匹配多个单词)

比起Direct模式,在验证routing key的时候,多了匹配规则

producer.go

Go
// xxxx 其他代码
+// declare exchange
+err = ch.ExchangeDeclare(
+    "topicTask", // exchange name
+    "topic",      // exchange type
+    true,          // durable
+    false,         // auto-deleted
+    false,         // internal
+    false,         // no-wait
+    nil,           // arguments
+)
+// xxxx 其他代码
+err = ch.PublishWithContext(
+    ctx, // context
+    "topicTask", // exchange name
+    "topicRoutingKey.abc", // routing key 
+    false, // mandatory
+    false, // immediate
+    amqp.Publishing{
+        DeliveryMode: amqp.Persistent,
+        ContentType:  "text/plain",
+        Body:         []byte(messageBody),
+    },
+)
+

consumer.go

Go
// xxxx 其他代码
+// declare exchange
+err = ch.ExchangeDeclare(
+    "topicTask", // exchange name
+    "topic",      // exchange type
+    true,          // durable
+    false,         // auto-deleted
+    false,         // internal
+    false,         // no-wait
+    nil,           // arguments
+)
+q, err := ch.QueueDeclare(
+    "topicQueue", // name
+    true,    // durable
+    false,   // delete when unused
+    false,   // exclusive
+    false,   // no-wait
+    nil,     // arguments
+)
+// 将交换机和队列进行绑定
+err = ch.QueueBind(
+    q.Name,        // queue name
+    "topicRoutingKey.*", // routing key 多了一个匹配规则
+    "topicTask", // exchange name
+    false,
+    nil,
+)
+// xxxx 其他代码
+

Headers(头部模式)

使用消息头属性(headers)来路由消息,而不是路由键,可以匹配多个头

使用Headers模式,不用指定routing key

amqp.Table的数据类型是Map

Go
type Table map[string]interface{}
+

producer.go

Go
// xxxx 其他代码
+// declare exchange
+err = ch.ExchangeDeclare(
+    "headersTask", // exchange name
+    "headers",      // exchange type
+    true,          // durable
+    false,         // auto-deleted
+    false,         // internal
+    false,         // no-wait
+    nil,           // arguments
+)
+// xxxx 其他代码
+err = ch.PublishWithContext(
+    ctx, // context
+    "headersTask", // exchange name
+    "", // routing key Headers模式下不用指定routing key
+    false, // mandatory
+    false, // immediate
+    amqp.Publishing{
+        DeliveryMode: amqp.Persistent,
+        ContentType:  "text/plain",
+        Body:         []byte(messageBody),
+        Headers: amqp.Table{ // Headers模式下,会检查该字段,要传该字段
+            "format": "pdf",
+            "type":   "report",
+        },
+    },
+)
+

consumer.go

Go
// xxxx 其他代码
+// declare exchange
+err = ch.ExchangeDeclare(
+    "headersTask", // exchange name
+    "headers",      // exchange type
+    true,          // durable
+    false,         // auto-deleted
+    false,         // internal
+    false,         // no-wait
+    nil,           // arguments
+)
+q, err := ch.QueueDeclare(
+    "headersQueue", // name
+    true,    // durable
+    false,   // delete when unused
+    false,   // exclusive
+    false,   // no-wait
+    nil,     // arguments
+)
+// 将交换机和队列进行绑定
+err = ch.QueueBind(
+    q.Name,        // queue name
+    "", // routing key
+    "headersTask", // exchange name
+    false,
+    amqp.Table{ // 此处要和上面发送时保持一致
+        "format": "pdf",
+        "type":   "report",
+    },
+)
+// xxxx 其他代码
+

Fanout(广播模式)

把消息放入交换机所有的队列,实现广播功能

Fanout模式会忽略routing key

producer.go

Go
// xxxx 其他代码
+// declare exchange
+err = ch.ExchangeDeclare(
+    "fanoutTask", // exchange name
+    "fanout",      // exchange type
+    true,          // durable
+    false,         // auto-deleted
+    false,         // internal
+    false,         // no-wait
+    nil,           // arguments
+)
+// xxxx 其他代码
+err = ch.PublishWithContext(
+    ctx, // context
+    "fanoutTask", // exchange name
+    "", // routing key Fanout 模式下不用指定routing key,会忽略该字段
+    false, // mandatory
+    false, // immediate
+    amqp.Publishing{
+        DeliveryMode: amqp.Persistent,
+        ContentType:  "text/plain",
+        Body:         []byte(messageBody),
+    },
+)
+

consumer.go

Go
// xxxx 其他代码
+// declare exchange
+err = ch.ExchangeDeclare(
+    "fanoutTask", // exchange name
+    "fanout",      // exchange type
+    true,          // durable
+    false,         // auto-deleted
+    false,         // internal
+    false,         // no-wait
+    nil,           // arguments
+)
+q, err := ch.QueueDeclare(
+    "fanoutQueue", // name
+    true,    // durable
+    false,   // delete when unused
+    false,   // exclusive
+    false,   // no-wait
+    nil,     // arguments
+)
+// 将交换机和队列进行绑定
+err = ch.QueueBind(
+    q.Name,        // queue name
+    "", // routing key
+    "fanoutTask", // exchange name
+    false,
+    nil
+)
+// xxxx 其他代码
+

一个简单案例

生产者生产出一些日志消息,所有的消费者接收消息并打印出来,这种场景可以使用Fanout(广播模式)

完整代码如下:

生产方emit.go

Go
package main
+
+import (
+	"context"
+	"fmt"
+	amqp "github.com/rabbitmq/amqp091-go"
+	"go-rabbitmq/shared"
+	"strings"
+	"time"
+)
+
+func startUpAndSend() {
+	// create connection
+	conn, err := amqp.Dial("amqp://guest:guest@localhost:5672")
+	shared.FailOnError(err, "create connection error")
+	defer conn.Close()
+
+	// create channel
+	ch, err := conn.Channel()
+	shared.FailOnError(err, "create channel error")
+	defer ch.Close()
+
+	// declare exchange
+	err = ch.ExchangeDeclare(
+		"logsExchange",
+		"fanout", // exchange type => headers, topic, direct, fanout
+		false,    // durable
+		false,    // auto-delete
+		false,    // internal
+		false,    // no-wait
+		nil,      // args
+	)
+	shared.FailOnError(err, "declare exchange error")
+
+	// publish message
+	ctx, cancelFunc := context.WithTimeout(context.Background(), 6*time.Second)
+	defer cancelFunc()
+	for i := 0; i < 6; i++ {
+		go func(i int) {
+			messageBody := fmt.Sprintf("我是第[%d]条消息%s", i+1, strings.Repeat(".", i+1))
+			err = ch.PublishWithContext(
+				ctx,
+				"logsExchange",
+				"",
+				false,
+				false,
+				amqp.Publishing{
+					DeliveryMode: amqp.Persistent,
+					ContentType:  "text/plain",
+					Body:         []byte(messageBody),
+				},
+			)
+			shared.FailOnError(err, "publish message error")
+			fmt.Printf(" [x] Sent %s\\n", messageBody)
+		}(i)
+	}
+	time.Sleep(6 * time.Second)
+}
+
+func main() {
+	startUpAndSend()
+}
+

消费方receive.go

Go
package main
+
+import (
+	"fmt"
+	amqp "github.com/rabbitmq/amqp091-go"
+	"go-rabbitmq/shared"
+)
+
+func startUpAndReceive() {
+	// create connection
+	conn, err := amqp.Dial("amqp://guest:guest@localhost:5672")
+	shared.FailOnError(err, "create connection error")
+	defer conn.Close()
+
+	// create channel
+	ch, err := conn.Channel()
+	shared.FailOnError(err, "create channel error")
+	defer ch.Close()
+
+	// declare exchange
+	err = ch.ExchangeDeclare(
+		"logsExchange",
+		"fanout", // exchange type => headers, topic, direct, fanout
+		false,    // durable
+		false,    // auto-delete
+		false,    // internal
+		false,    // no-wait
+		nil,      // args
+	)
+	shared.FailOnError(err, "declare exchange error")
+
+	// declare unnamed queue
+	queue, err := ch.QueueDeclare("", false, false, true, false, nil)
+	shared.FailOnError(err, "declare queue error")
+
+	// bind exchange and queue
+	err = ch.QueueBind(queue.Name, "", "logsExchange", false, nil)
+	shared.FailOnError(err, "bind exchange and queue error")
+
+	// consume message
+	lockChan := make(chan struct{})
+	messages, err := ch.Consume(queue.Name, "", true, false, false, false, nil)
+	shared.FailOnError(err, "consume message error")
+	go func() {
+		for msg := range messages {
+			fmt.Printf("Received a message: %s\\n", msg.Body)
+		}
+	}()
+	fmt.Println("[*] Waiting for messages. To exit press CTRL+C")
+	<-lockChan
+}
+
+func main() {
+	startUpAndReceive()
+}
+

上面代码,在多个窗口分别运行receive.go中,然后运行emit.go,每个窗口都会接收到发送的数据

`,46),e=[o];function t(c,D,r,y,F,C){return a(),n("div",null,e)}const u=s(p,[["render",t]]);export{i as __pageData,u as default}; diff --git "a/assets/knowledge-deposition_RabbitMQ_\345\217\221\345\270\203\350\256\242\351\230\205.md.7326d7a7.lean.js" "b/assets/knowledge-deposition_RabbitMQ_\345\217\221\345\270\203\350\256\242\351\230\205.md.7326d7a7.lean.js" new file mode 100644 index 00000000..29eeb848 --- /dev/null +++ "b/assets/knowledge-deposition_RabbitMQ_\345\217\221\345\270\203\350\256\242\351\230\205.md.7326d7a7.lean.js" @@ -0,0 +1 @@ +import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"发布订阅","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"交换机","slug":"交换机","link":"#交换机","children":[{"level":3,"title":"Direct(直连模式)","slug":"direct-直连模式","link":"#direct-直连模式","children":[]},{"level":3,"title":"Topic(主题模式)","slug":"topic-主题模式","link":"#topic-主题模式","children":[]},{"level":3,"title":"Headers(头部模式)","slug":"headers-头部模式","link":"#headers-头部模式","children":[]},{"level":3,"title":"Fanout(广播模式)","slug":"fanout-广播模式","link":"#fanout-广播模式","children":[]}]},{"level":2,"title":"一个简单案例","slug":"一个简单案例","link":"#一个简单案例","children":[]}],"relativePath":"knowledge-deposition/RabbitMQ/发布订阅.md"}'),p={name:"knowledge-deposition/RabbitMQ/发布订阅.md"},o=l("",46),e=[o];function t(c,D,r,y,F,C){return a(),n("div",null,e)}const u=s(p,[["render",t]]);export{i as __pageData,u as default}; diff --git "a/assets/knowledge-deposition_RabbitMQ_\345\237\272\346\234\254\346\246\202\345\277\265\345\222\214\345\256\211\350\243\205\345\220\257\345\212\250.md.71f4493e.js" "b/assets/knowledge-deposition_RabbitMQ_\345\237\272\346\234\254\346\246\202\345\277\265\345\222\214\345\256\211\350\243\205\345\220\257\345\212\250.md.2ecff914.js" similarity index 87% rename from "assets/knowledge-deposition_RabbitMQ_\345\237\272\346\234\254\346\246\202\345\277\265\345\222\214\345\256\211\350\243\205\345\220\257\345\212\250.md.71f4493e.js" rename to "assets/knowledge-deposition_RabbitMQ_\345\237\272\346\234\254\346\246\202\345\277\265\345\222\214\345\256\211\350\243\205\345\220\257\345\212\250.md.2ecff914.js" index 2bc1ae83..1b80d555 100644 --- "a/assets/knowledge-deposition_RabbitMQ_\345\237\272\346\234\254\346\246\202\345\277\265\345\222\214\345\256\211\350\243\205\345\220\257\345\212\250.md.71f4493e.js" +++ "b/assets/knowledge-deposition_RabbitMQ_\345\237\272\346\234\254\346\246\202\345\277\265\345\222\214\345\256\211\350\243\205\345\220\257\345\212\250.md.2ecff914.js" @@ -1,4 +1,4 @@ -import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"安装启动和基本使用","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"简介","slug":"简介","link":"#简介","children":[]},{"level":2,"title":"核心概念","slug":"核心概念","link":"#核心概念","children":[]},{"level":2,"title":"安装和启动","slug":"安装和启动","link":"#安装和启动","children":[{"level":3,"title":"Docker启动","slug":"docker启动","link":"#docker启动","children":[]}]},{"level":2,"title":"使用homebrew安装启动教程","slug":"使用homebrew安装启动教程","link":"#使用homebrew安装启动教程","children":[]},{"level":2,"title":"简单示例","slug":"简单示例","link":"#简单示例","children":[{"level":3,"title":"生产者(Producer)","slug":"生产者-producer","link":"#生产者-producer","children":[]},{"level":3,"title":"消费者/接收者(Consumer)","slug":"消费者-接收者-consumer","link":"#消费者-接收者-consumer","children":[]}]},{"level":2,"title":"完整代码","slug":"完整代码","link":"#完整代码","children":[]}],"relativePath":"knowledge-deposition/RabbitMQ/基本概念和安装启动.md"}'),o={name:"knowledge-deposition/RabbitMQ/基本概念和安装启动.md"},p=l(`

安装启动和基本使用

简介

RabbitMQ是一款可靠且成熟的消息传递和流媒体代理,可以轻松部署在云环境、本地环境以及本地计算机上

核心概念

RabbitMQ是一个消息代理(broker):它接受并转发消息

可以把它想象成是一个邮局:我们把要寄出的信件放入邮箱时,可以确信邮递员最终会将信件送到收件人手中 在这个类比中,RabbitMQ就像一个邮箱一个邮局一名邮递员

它有以下几个重要的概念:

  1. Message:RabbitMQ接收存储转发=>二进制数据块—-也就是message
  2. Producer:生产者是一个发送消息的用户应用程序
  3. Exchange:交换机一边接收来自生产者的消息,另一边将它们推送到队列中。 交换机必须确切地知道如何处理接收到的消息,包括如下几条:
    • 消息是否应该添加到到特定队列

    • 消息是否应该应添加到多个队列

    • 消息是否应该被丢弃

  4. Queue:队列是一个存储消息的缓冲区
  5. Consumer:消费者是接收消息的用户应用程序

安装和启动

Docker启动

直接使用docker run来启动一个image

TIP

  • 3.13-management版本自带了web管理界面
shell
docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.13-management
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"安装启动和基本使用","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"简介","slug":"简介","link":"#简介","children":[]},{"level":2,"title":"核心概念","slug":"核心概念","link":"#核心概念","children":[]},{"level":2,"title":"安装和启动","slug":"安装和启动","link":"#安装和启动","children":[{"level":3,"title":"Docker启动","slug":"docker启动","link":"#docker启动","children":[]},{"level":3,"title":"使用homebrew安装启动教程","slug":"使用homebrew安装启动教程","link":"#使用homebrew安装启动教程","children":[]}]},{"level":2,"title":"简单示例","slug":"简单示例","link":"#简单示例","children":[{"level":3,"title":"生产者(Producer)","slug":"生产者-producer","link":"#生产者-producer","children":[]},{"level":3,"title":"消费者/接收者(Consumer)","slug":"消费者-接收者-consumer","link":"#消费者-接收者-consumer","children":[]}]},{"level":2,"title":"完整代码","slug":"完整代码","link":"#完整代码","children":[]}],"relativePath":"knowledge-deposition/RabbitMQ/基本概念和安装启动.md"}'),o={name:"knowledge-deposition/RabbitMQ/基本概念和安装启动.md"},p=l(`

安装启动和基本使用

简介

RabbitMQ是一款可靠且成熟的消息传递和流媒体代理,可以轻松部署在云环境、本地环境以及本地计算机上

核心概念

RabbitMQ是一个消息代理(broker):它接受并转发消息

可以把它想象成是一个邮局:我们把要寄出的信件放入邮箱时,可以确信邮递员最终会将信件送到收件人手中 在这个类比中,RabbitMQ就像一个邮箱一个邮局一名邮递员

它有以下几个重要的概念:

  1. Message:RabbitMQ接收存储转发=>二进制数据块—-也就是message
  2. Producer:生产者是一个发送消息的用户应用程序
  3. Exchange:交换机一边接收来自生产者的消息,另一边将它们推送到队列中。 交换机必须确切地知道如何处理接收到的消息,包括如下几条:
    • 消息是否应该添加到到特定队列

    • 消息是否应该应添加到多个队列

    • 消息是否应该被丢弃

  4. Queue:队列是一个存储消息的缓冲区
  5. Consumer:消费者是接收消息的用户应用程序

安装和启动

Docker启动

直接使用docker run来启动一个image

TIP

  • 3.13-management版本自带了web管理界面,web界面的端口号默认是15672

  • MQ服务默认端口号是5672

shell
docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.13-management
 

或者使用docker-compose

shell
version: "2.8"
 services:
   RabbitMQ:
@@ -8,7 +8,9 @@ import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{
     ports:
       - "5672:5672"
       - "15672:15672"
-

使用homebrew安装启动教程

简单示例

原理如图所示:

TIP

  • RabbitMQ支持多种协议,我们使用AMQP 0-9-1,这是一种用于消息传递的开放通用协议

  • 有许多不同语言的RabbitMQ客户端,我们使用Go amqp客户端

初始化项目并下载依赖

shell
go mod init <your-module-name>
+

使用homebrew安装启动教程

TIP

  • RabbitMQ是用Erlang编写的,因此需要先安装Erlang
  • 使用Homebrew安装Erlang
shell
brew install erlang
+
  • 安装RabbitMQ
shell
brew install rabbitmq
+

简单示例

原理如图所示:

TIP

  • RabbitMQ支持多种协议,我们使用AMQP 0-9-1,这是一种用于消息传递的开放通用协议

  • 有许多不同语言的RabbitMQ客户端,我们使用Go amqp客户端

初始化项目并下载依赖

shell
go mod init <your-module-name>
 go get github.com/rabbitmq/amqp091-go
 

写一个错误处理的通用函数

Go
// FailOnError a helper function to check the return value for each amqp call
 func FailOnError(err error, msg string) {
@@ -199,4 +201,4 @@ import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{
 func main() {
 	createReceiverAndReceiveMessage()
 }
-
`,50),e=[p];function t(c,r,D,y,F,C){return a(),n("div",null,e)}const u=s(o,[["render",t]]);export{i as __pageData,u as default}; +
`,55),e=[p];function t(c,r,D,y,F,C){return a(),n("div",null,e)}const d=s(o,[["render",t]]);export{i as __pageData,d as default}; diff --git "a/assets/knowledge-deposition_RabbitMQ_\345\237\272\346\234\254\346\246\202\345\277\265\345\222\214\345\256\211\350\243\205\345\220\257\345\212\250.md.71f4493e.lean.js" "b/assets/knowledge-deposition_RabbitMQ_\345\237\272\346\234\254\346\246\202\345\277\265\345\222\214\345\256\211\350\243\205\345\220\257\345\212\250.md.2ecff914.lean.js" similarity index 71% rename from "assets/knowledge-deposition_RabbitMQ_\345\237\272\346\234\254\346\246\202\345\277\265\345\222\214\345\256\211\350\243\205\345\220\257\345\212\250.md.71f4493e.lean.js" rename to "assets/knowledge-deposition_RabbitMQ_\345\237\272\346\234\254\346\246\202\345\277\265\345\222\214\345\256\211\350\243\205\345\220\257\345\212\250.md.2ecff914.lean.js" index e00863a0..d1c9b79b 100644 --- "a/assets/knowledge-deposition_RabbitMQ_\345\237\272\346\234\254\346\246\202\345\277\265\345\222\214\345\256\211\350\243\205\345\220\257\345\212\250.md.71f4493e.lean.js" +++ "b/assets/knowledge-deposition_RabbitMQ_\345\237\272\346\234\254\346\246\202\345\277\265\345\222\214\345\256\211\350\243\205\345\220\257\345\212\250.md.2ecff914.lean.js" @@ -1 +1 @@ -import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"安装启动和基本使用","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"简介","slug":"简介","link":"#简介","children":[]},{"level":2,"title":"核心概念","slug":"核心概念","link":"#核心概念","children":[]},{"level":2,"title":"安装和启动","slug":"安装和启动","link":"#安装和启动","children":[{"level":3,"title":"Docker启动","slug":"docker启动","link":"#docker启动","children":[]}]},{"level":2,"title":"使用homebrew安装启动教程","slug":"使用homebrew安装启动教程","link":"#使用homebrew安装启动教程","children":[]},{"level":2,"title":"简单示例","slug":"简单示例","link":"#简单示例","children":[{"level":3,"title":"生产者(Producer)","slug":"生产者-producer","link":"#生产者-producer","children":[]},{"level":3,"title":"消费者/接收者(Consumer)","slug":"消费者-接收者-consumer","link":"#消费者-接收者-consumer","children":[]}]},{"level":2,"title":"完整代码","slug":"完整代码","link":"#完整代码","children":[]}],"relativePath":"knowledge-deposition/RabbitMQ/基本概念和安装启动.md"}'),o={name:"knowledge-deposition/RabbitMQ/基本概念和安装启动.md"},p=l("",50),e=[p];function t(c,r,D,y,F,C){return a(),n("div",null,e)}const u=s(o,[["render",t]]);export{i as __pageData,u as default}; +import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"安装启动和基本使用","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"简介","slug":"简介","link":"#简介","children":[]},{"level":2,"title":"核心概念","slug":"核心概念","link":"#核心概念","children":[]},{"level":2,"title":"安装和启动","slug":"安装和启动","link":"#安装和启动","children":[{"level":3,"title":"Docker启动","slug":"docker启动","link":"#docker启动","children":[]},{"level":3,"title":"使用homebrew安装启动教程","slug":"使用homebrew安装启动教程","link":"#使用homebrew安装启动教程","children":[]}]},{"level":2,"title":"简单示例","slug":"简单示例","link":"#简单示例","children":[{"level":3,"title":"生产者(Producer)","slug":"生产者-producer","link":"#生产者-producer","children":[]},{"level":3,"title":"消费者/接收者(Consumer)","slug":"消费者-接收者-consumer","link":"#消费者-接收者-consumer","children":[]}]},{"level":2,"title":"完整代码","slug":"完整代码","link":"#完整代码","children":[]}],"relativePath":"knowledge-deposition/RabbitMQ/基本概念和安装启动.md"}'),o={name:"knowledge-deposition/RabbitMQ/基本概念和安装启动.md"},p=l("",55),e=[p];function t(c,r,D,y,F,C){return a(),n("div",null,e)}const d=s(o,[["render",t]]);export{i as __pageData,d as default}; diff --git "a/assets/knowledge-deposition_RabbitMQ_\345\267\245\344\275\234\351\230\237\345\210\227.md.3bc304af.js" "b/assets/knowledge-deposition_RabbitMQ_\345\267\245\344\275\234\351\230\237\345\210\227.md.1e35fdac.js" similarity index 99% rename from "assets/knowledge-deposition_RabbitMQ_\345\267\245\344\275\234\351\230\237\345\210\227.md.3bc304af.js" rename to "assets/knowledge-deposition_RabbitMQ_\345\267\245\344\275\234\351\230\237\345\210\227.md.1e35fdac.js" index f0795c51..09b40f12 100644 --- "a/assets/knowledge-deposition_RabbitMQ_\345\267\245\344\275\234\351\230\237\345\210\227.md.3bc304af.js" +++ "b/assets/knowledge-deposition_RabbitMQ_\345\267\245\344\275\234\351\230\237\345\210\227.md.1e35fdac.js" @@ -1,4 +1,4 @@ -import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"工作队列","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"循环分发消息","slug":"循环分发消息","link":"#循环分发消息","children":[]},{"level":2,"title":"消息确认","slug":"消息确认","link":"#消息确认","children":[]},{"level":2,"title":"消息持久化","slug":"消息持久化","link":"#消息持久化","children":[]}],"relativePath":"knowledge-deposition/RabbitMQ/工作队列.md"}'),o={name:"knowledge-deposition/RabbitMQ/工作队列.md"},p=l(`

工作队列

循环分发消息

默认情况下,RabbitMQ将按顺序将每条消息发送给下一个消费者,每个Consumer将收到相同数量的消息,这种分发消息的方式称为循环轮询

我们可以同时开启多个协程去消费消息来测试这一特性,消费消息的我们称之为worker

写一个通用的接收消息的通用函数consumeMessage(worker.go),然后开启3个协程去消费消息

可以看到,每个message被消费后,会等待一段时间,才能去消费下一个消息(消息文案中包含几个.,就等待10-.的个数秒)

Go
for i := 1; i <= 3; i++ {
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"工作队列","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"循环分发消息","slug":"循环分发消息","link":"#循环分发消息","children":[]},{"level":2,"title":"消息确认","slug":"消息确认","link":"#消息确认","children":[]},{"level":2,"title":"消息持久化","slug":"消息持久化","link":"#消息持久化","children":[]}],"relativePath":"knowledge-deposition/RabbitMQ/工作队列.md"}'),o={name:"knowledge-deposition/RabbitMQ/工作队列.md"},p=l(`

工作队列

循环分发消息

默认情况下,RabbitMQ将按顺序将每条消息发送给下一个消费者,每个Consumer将收到相同数量的消息,这种分发消息的方式称为循环轮询

我们可以同时开启多个协程去消费消息来测试这一特性,消费消息的我们称之为worker

写一个通用的接收消息的通用函数consumeMessage(worker.go),然后开启3个协程去消费消息

可以看到,每个message被消费后,会等待一段时间,才能去消费下一个消息(消息文案中包含几个.,就等待10-.的个数秒)

Go
for i := 1; i <= 3; i++ {
     go consumeMessage(ch, queue.Name, i)
 }
 func consumeMessage(ch *amqp.Channel, queueName string, serialNumber int) {
diff --git "a/assets/knowledge-deposition_RabbitMQ_\345\267\245\344\275\234\351\230\237\345\210\227.md.3bc304af.lean.js" "b/assets/knowledge-deposition_RabbitMQ_\345\267\245\344\275\234\351\230\237\345\210\227.md.1e35fdac.lean.js"
similarity index 91%
rename from "assets/knowledge-deposition_RabbitMQ_\345\267\245\344\275\234\351\230\237\345\210\227.md.3bc304af.lean.js"
rename to "assets/knowledge-deposition_RabbitMQ_\345\267\245\344\275\234\351\230\237\345\210\227.md.1e35fdac.lean.js"
index 71ad7851..96a1675c 100644
--- "a/assets/knowledge-deposition_RabbitMQ_\345\267\245\344\275\234\351\230\237\345\210\227.md.3bc304af.lean.js"
+++ "b/assets/knowledge-deposition_RabbitMQ_\345\267\245\344\275\234\351\230\237\345\210\227.md.1e35fdac.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const i=JSON.parse('{"title":"工作队列","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"循环分发消息","slug":"循环分发消息","link":"#循环分发消息","children":[]},{"level":2,"title":"消息确认","slug":"消息确认","link":"#消息确认","children":[]},{"level":2,"title":"消息持久化","slug":"消息持久化","link":"#消息持久化","children":[]}],"relativePath":"knowledge-deposition/RabbitMQ/工作队列.md"}'),o={name:"knowledge-deposition/RabbitMQ/工作队列.md"},p=l("",38),e=[p];function t(c,r,C,D,y,A){return a(),n("div",null,e)}const d=s(o,[["render",t]]);export{i as __pageData,d as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const i=JSON.parse('{"title":"工作队列","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"循环分发消息","slug":"循环分发消息","link":"#循环分发消息","children":[]},{"level":2,"title":"消息确认","slug":"消息确认","link":"#消息确认","children":[]},{"level":2,"title":"消息持久化","slug":"消息持久化","link":"#消息持久化","children":[]}],"relativePath":"knowledge-deposition/RabbitMQ/工作队列.md"}'),o={name:"knowledge-deposition/RabbitMQ/工作队列.md"},p=l("",38),e=[p];function t(c,r,C,D,y,A){return a(),n("div",null,e)}const d=s(o,[["render",t]]);export{i as __pageData,d as default};
diff --git a/assets/knowledge-deposition_SSH_ssh-base.md.26c4a907.js b/assets/knowledge-deposition_SSH_ssh-base.md.6472c2dd.js
similarity index 99%
rename from assets/knowledge-deposition_SSH_ssh-base.md.26c4a907.js
rename to assets/knowledge-deposition_SSH_ssh-base.md.6472c2dd.js
index c34b67e5..86809804 100644
--- a/assets/knowledge-deposition_SSH_ssh-base.md.26c4a907.js
+++ b/assets/knowledge-deposition_SSH_ssh-base.md.6472c2dd.js
@@ -1,4 +1,4 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const D=JSON.parse('{"title":"SSH相关基础","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"简介","slug":"简介","link":"#简介","children":[]},{"level":2,"title":"登录服务器","slug":"登录服务器","link":"#登录服务器","children":[{"level":3,"title":"通过密码登录","slug":"通过密码登录","link":"#通过密码登录","children":[]},{"level":3,"title":"修改密钥权限,以防他人读取","slug":"修改密钥权限-以防他人读取","link":"#修改密钥权限-以防他人读取","children":[]},{"level":3,"title":"通过自定义配置文件快速登录","slug":"通过自定义配置文件快速登录","link":"#通过自定义配置文件快速登录","children":[]},{"level":3,"title":"通过密钥登录","slug":"通过密钥登录","link":"#通过密钥登录","children":[]},{"level":3,"title":"关闭密码登录","slug":"关闭密码登录","link":"#关闭密码登录","children":[]}]},{"level":2,"title":"自动上传公钥","slug":"自动上传公钥","link":"#自动上传公钥","children":[]},{"level":2,"title":"SSH配置相关文件解析","slug":"ssh配置相关文件解析","link":"#ssh配置相关文件解析","children":[]},{"level":2,"title":"ssh-keygen命令常用参数解析","slug":"ssh-keygen命令常用参数解析","link":"#ssh-keygen命令常用参数解析","children":[{"level":3,"title":"-b指定密钥的二进制位数","slug":"b指定密钥的二进制位数","link":"#b指定密钥的二进制位数","children":[]},{"level":3,"title":"-C为密钥文件指定新的注释","slug":"c为密钥文件指定新的注释","link":"#c为密钥文件指定新的注释","children":[]},{"level":3,"title":"-f指定生成的密钥文件路径","slug":"f指定生成的密钥文件路径","link":"#f指定生成的密钥文件路径","children":[]},{"level":3,"title":"-F查询是否存在某个服务","slug":"f查询是否存在某个服务","link":"#f查询是否存在某个服务","children":[]},{"level":3,"title":"-R 删除某个服务","slug":"r-删除某个服务","link":"#r-删除某个服务","children":[]},{"level":3,"title":"-t 指定生成密钥的算法","slug":"t-指定生成密钥的算法","link":"#t-指定生成密钥的算法","children":[]}]},{"level":2,"title":"配置多个ssh-key适配github多账号","slug":"配置多个ssh-key适配github多账号","link":"#配置多个ssh-key适配github多账号","children":[]}],"relativePath":"knowledge-deposition/SSH/ssh-base.md"}'),e={name:"knowledge-deposition/SSH/ssh-base.md"},o=l(`

SSH相关基础

简介

SSHLinux系统的登录工具,广泛用于服务器登录和各种加密通信。

OpenSSH的客户端是二进制程序ssh。它在 Linux/Unix系统的位置是/usr/bin/ssh

Linux一般都自带ssh,如果没有可以安装。

shell
# Ubuntu 和 Debian
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const D=JSON.parse('{"title":"SSH相关基础","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"简介","slug":"简介","link":"#简介","children":[]},{"level":2,"title":"登录服务器","slug":"登录服务器","link":"#登录服务器","children":[{"level":3,"title":"通过密码登录","slug":"通过密码登录","link":"#通过密码登录","children":[]},{"level":3,"title":"修改密钥权限,以防他人读取","slug":"修改密钥权限-以防他人读取","link":"#修改密钥权限-以防他人读取","children":[]},{"level":3,"title":"通过自定义配置文件快速登录","slug":"通过自定义配置文件快速登录","link":"#通过自定义配置文件快速登录","children":[]},{"level":3,"title":"通过密钥登录","slug":"通过密钥登录","link":"#通过密钥登录","children":[]},{"level":3,"title":"关闭密码登录","slug":"关闭密码登录","link":"#关闭密码登录","children":[]}]},{"level":2,"title":"自动上传公钥","slug":"自动上传公钥","link":"#自动上传公钥","children":[]},{"level":2,"title":"SSH配置相关文件解析","slug":"ssh配置相关文件解析","link":"#ssh配置相关文件解析","children":[]},{"level":2,"title":"ssh-keygen命令常用参数解析","slug":"ssh-keygen命令常用参数解析","link":"#ssh-keygen命令常用参数解析","children":[{"level":3,"title":"-b指定密钥的二进制位数","slug":"b指定密钥的二进制位数","link":"#b指定密钥的二进制位数","children":[]},{"level":3,"title":"-C为密钥文件指定新的注释","slug":"c为密钥文件指定新的注释","link":"#c为密钥文件指定新的注释","children":[]},{"level":3,"title":"-f指定生成的密钥文件路径","slug":"f指定生成的密钥文件路径","link":"#f指定生成的密钥文件路径","children":[]},{"level":3,"title":"-F查询是否存在某个服务","slug":"f查询是否存在某个服务","link":"#f查询是否存在某个服务","children":[]},{"level":3,"title":"-R 删除某个服务","slug":"r-删除某个服务","link":"#r-删除某个服务","children":[]},{"level":3,"title":"-t 指定生成密钥的算法","slug":"t-指定生成密钥的算法","link":"#t-指定生成密钥的算法","children":[]}]},{"level":2,"title":"配置多个ssh-key适配github多账号","slug":"配置多个ssh-key适配github多账号","link":"#配置多个ssh-key适配github多账号","children":[]}],"relativePath":"knowledge-deposition/SSH/ssh-base.md"}'),e={name:"knowledge-deposition/SSH/ssh-base.md"},o=l(`

SSH相关基础

简介

SSHLinux系统的登录工具,广泛用于服务器登录和各种加密通信。

OpenSSH的客户端是二进制程序ssh。它在 Linux/Unix系统的位置是/usr/bin/ssh

Linux一般都自带ssh,如果没有可以安装。

shell
# Ubuntu 和 Debian
 sudo apt install openssh-client
 # Centos
 sudo dnf install openssh-clients
diff --git a/assets/knowledge-deposition_SSH_ssh-base.md.26c4a907.lean.js b/assets/knowledge-deposition_SSH_ssh-base.md.6472c2dd.lean.js
similarity index 97%
rename from assets/knowledge-deposition_SSH_ssh-base.md.26c4a907.lean.js
rename to assets/knowledge-deposition_SSH_ssh-base.md.6472c2dd.lean.js
index ddb5c28c..526bbd71 100644
--- a/assets/knowledge-deposition_SSH_ssh-base.md.26c4a907.lean.js
+++ b/assets/knowledge-deposition_SSH_ssh-base.md.6472c2dd.lean.js
@@ -1 +1 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const D=JSON.parse('{"title":"SSH相关基础","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"简介","slug":"简介","link":"#简介","children":[]},{"level":2,"title":"登录服务器","slug":"登录服务器","link":"#登录服务器","children":[{"level":3,"title":"通过密码登录","slug":"通过密码登录","link":"#通过密码登录","children":[]},{"level":3,"title":"修改密钥权限,以防他人读取","slug":"修改密钥权限-以防他人读取","link":"#修改密钥权限-以防他人读取","children":[]},{"level":3,"title":"通过自定义配置文件快速登录","slug":"通过自定义配置文件快速登录","link":"#通过自定义配置文件快速登录","children":[]},{"level":3,"title":"通过密钥登录","slug":"通过密钥登录","link":"#通过密钥登录","children":[]},{"level":3,"title":"关闭密码登录","slug":"关闭密码登录","link":"#关闭密码登录","children":[]}]},{"level":2,"title":"自动上传公钥","slug":"自动上传公钥","link":"#自动上传公钥","children":[]},{"level":2,"title":"SSH配置相关文件解析","slug":"ssh配置相关文件解析","link":"#ssh配置相关文件解析","children":[]},{"level":2,"title":"ssh-keygen命令常用参数解析","slug":"ssh-keygen命令常用参数解析","link":"#ssh-keygen命令常用参数解析","children":[{"level":3,"title":"-b指定密钥的二进制位数","slug":"b指定密钥的二进制位数","link":"#b指定密钥的二进制位数","children":[]},{"level":3,"title":"-C为密钥文件指定新的注释","slug":"c为密钥文件指定新的注释","link":"#c为密钥文件指定新的注释","children":[]},{"level":3,"title":"-f指定生成的密钥文件路径","slug":"f指定生成的密钥文件路径","link":"#f指定生成的密钥文件路径","children":[]},{"level":3,"title":"-F查询是否存在某个服务","slug":"f查询是否存在某个服务","link":"#f查询是否存在某个服务","children":[]},{"level":3,"title":"-R 删除某个服务","slug":"r-删除某个服务","link":"#r-删除某个服务","children":[]},{"level":3,"title":"-t 指定生成密钥的算法","slug":"t-指定生成密钥的算法","link":"#t-指定生成密钥的算法","children":[]}]},{"level":2,"title":"配置多个ssh-key适配github多账号","slug":"配置多个ssh-key适配github多账号","link":"#配置多个ssh-key适配github多账号","children":[]}],"relativePath":"knowledge-deposition/SSH/ssh-base.md"}'),e={name:"knowledge-deposition/SSH/ssh-base.md"},o=l("",78),p=[o];function c(t,i,r,d,C,y){return n(),a("div",null,p)}const A=s(e,[["render",c]]);export{D as __pageData,A as default};
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const D=JSON.parse('{"title":"SSH相关基础","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"简介","slug":"简介","link":"#简介","children":[]},{"level":2,"title":"登录服务器","slug":"登录服务器","link":"#登录服务器","children":[{"level":3,"title":"通过密码登录","slug":"通过密码登录","link":"#通过密码登录","children":[]},{"level":3,"title":"修改密钥权限,以防他人读取","slug":"修改密钥权限-以防他人读取","link":"#修改密钥权限-以防他人读取","children":[]},{"level":3,"title":"通过自定义配置文件快速登录","slug":"通过自定义配置文件快速登录","link":"#通过自定义配置文件快速登录","children":[]},{"level":3,"title":"通过密钥登录","slug":"通过密钥登录","link":"#通过密钥登录","children":[]},{"level":3,"title":"关闭密码登录","slug":"关闭密码登录","link":"#关闭密码登录","children":[]}]},{"level":2,"title":"自动上传公钥","slug":"自动上传公钥","link":"#自动上传公钥","children":[]},{"level":2,"title":"SSH配置相关文件解析","slug":"ssh配置相关文件解析","link":"#ssh配置相关文件解析","children":[]},{"level":2,"title":"ssh-keygen命令常用参数解析","slug":"ssh-keygen命令常用参数解析","link":"#ssh-keygen命令常用参数解析","children":[{"level":3,"title":"-b指定密钥的二进制位数","slug":"b指定密钥的二进制位数","link":"#b指定密钥的二进制位数","children":[]},{"level":3,"title":"-C为密钥文件指定新的注释","slug":"c为密钥文件指定新的注释","link":"#c为密钥文件指定新的注释","children":[]},{"level":3,"title":"-f指定生成的密钥文件路径","slug":"f指定生成的密钥文件路径","link":"#f指定生成的密钥文件路径","children":[]},{"level":3,"title":"-F查询是否存在某个服务","slug":"f查询是否存在某个服务","link":"#f查询是否存在某个服务","children":[]},{"level":3,"title":"-R 删除某个服务","slug":"r-删除某个服务","link":"#r-删除某个服务","children":[]},{"level":3,"title":"-t 指定生成密钥的算法","slug":"t-指定生成密钥的算法","link":"#t-指定生成密钥的算法","children":[]}]},{"level":2,"title":"配置多个ssh-key适配github多账号","slug":"配置多个ssh-key适配github多账号","link":"#配置多个ssh-key适配github多账号","children":[]}],"relativePath":"knowledge-deposition/SSH/ssh-base.md"}'),e={name:"knowledge-deposition/SSH/ssh-base.md"},o=l("",78),p=[o];function c(t,i,r,d,C,y){return n(),a("div",null,p)}const A=s(e,[["render",c]]);export{D as __pageData,A as default};
diff --git "a/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Babel_Babel\345\237\272\347\241\200.md.452a4423.js" "b/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Babel_Babel\345\237\272\347\241\200.md.d7a84d1c.js"
similarity index 99%
rename from "assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Babel_Babel\345\237\272\347\241\200.md.452a4423.js"
rename to "assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Babel_Babel\345\237\272\347\241\200.md.d7a84d1c.js"
index 9da4a4c8..1df3334d 100644
--- "a/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Babel_Babel\345\237\272\347\241\200.md.452a4423.js"
+++ "b/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Babel_Babel\345\237\272\347\241\200.md.d7a84d1c.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as a,o as l,e as n}from"./app.7354b8c5.js";const A=JSON.parse('{"title":"Babel基础","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"相关工具文档","slug":"相关工具文档","link":"#相关工具文档","children":[]},{"level":2,"title":"相关Api","slug":"相关api","link":"#相关api","children":[{"level":3,"title":"Visitor","slug":"visitor","link":"#visitor","children":[]},{"level":3,"title":"Path","slug":"path","link":"#path","children":[]},{"level":3,"title":"Scope(作用域)","slug":"scope-作用域","link":"#scope-作用域","children":[]}]},{"level":2,"title":"插件选项","slug":"插件选项","link":"#插件选项","children":[{"level":3,"title":"插件编写和调用几种方法","slug":"插件编写和调用几种方法","link":"#插件编写和调用几种方法","children":[]}]},{"level":2,"title":"相关网站","slug":"相关网站","link":"#相关网站","children":[]}],"relativePath":"knowledge-deposition/前端工程化/Babel/Babel基础.md"}'),o={name:"knowledge-deposition/前端工程化/Babel/Babel基础.md"},e=n(`

Babel基础

相关工具文档

  • babylon

    • BabylonBabel的解析器。最初是Acorn的一份fork,它非常快,易于使用,并且针对非标准特性(以及那些未来的标准特性)设计了一个基于插件的架构。
  • @babel/traverse

    • Babel Tranverse(遍历)模块维护了整棵树的状态,并且负责替换、移除和添加节点。
  • @babel/types

    • babel-types-api文档
    • Babel Types(类型)模块是一个用于AST节点的Lodash式工具库。 它包含了构造验证以及变换AST节点的方法。 其设计周到的工具方法有助于编写清晰简单的AST逻辑。
  • @babel/generator

    • Babel GeneratorBabel代码生成器。它将AST输出为代码并包括源码映射(sourcemaps)
  • @babel/template

    • Babel Template 模块是一个很小但却非常有用的模块。它能让你编写带有占位符的字符串形式的代码,你可以用此来替代大量的手工构建的AST

相关Api

Visitor

  • visitor是一个对象,对象中定义了用于获取AST中具体节点的方法,例如ImportDeclarationCallExpression等等
javascript
const addCodePlugin = ({types}) => {
+import{_ as s,c as a,o as l,e as n}from"./app.4a806fb4.js";const A=JSON.parse('{"title":"Babel基础","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"相关工具文档","slug":"相关工具文档","link":"#相关工具文档","children":[]},{"level":2,"title":"相关Api","slug":"相关api","link":"#相关api","children":[{"level":3,"title":"Visitor","slug":"visitor","link":"#visitor","children":[]},{"level":3,"title":"Path","slug":"path","link":"#path","children":[]},{"level":3,"title":"Scope(作用域)","slug":"scope-作用域","link":"#scope-作用域","children":[]}]},{"level":2,"title":"插件选项","slug":"插件选项","link":"#插件选项","children":[{"level":3,"title":"插件编写和调用几种方法","slug":"插件编写和调用几种方法","link":"#插件编写和调用几种方法","children":[]}]},{"level":2,"title":"相关网站","slug":"相关网站","link":"#相关网站","children":[]}],"relativePath":"knowledge-deposition/前端工程化/Babel/Babel基础.md"}'),o={name:"knowledge-deposition/前端工程化/Babel/Babel基础.md"},e=n(`

Babel基础

相关工具文档

  • babylon

    • BabylonBabel的解析器。最初是Acorn的一份fork,它非常快,易于使用,并且针对非标准特性(以及那些未来的标准特性)设计了一个基于插件的架构。
  • @babel/traverse

    • Babel Tranverse(遍历)模块维护了整棵树的状态,并且负责替换、移除和添加节点。
  • @babel/types

    • babel-types-api文档
    • Babel Types(类型)模块是一个用于AST节点的Lodash式工具库。 它包含了构造验证以及变换AST节点的方法。 其设计周到的工具方法有助于编写清晰简单的AST逻辑。
  • @babel/generator

    • Babel GeneratorBabel代码生成器。它将AST输出为代码并包括源码映射(sourcemaps)
  • @babel/template

    • Babel Template 模块是一个很小但却非常有用的模块。它能让你编写带有占位符的字符串形式的代码,你可以用此来替代大量的手工构建的AST

相关Api

Visitor

  • visitor是一个对象,对象中定义了用于获取AST中具体节点的方法,例如ImportDeclarationCallExpression等等
javascript
const addCodePlugin = ({types}) => {
     return {
         visitor: {
             ImportDeclaration(path) {
diff --git "a/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Babel_Babel\345\237\272\347\241\200.md.452a4423.lean.js" "b/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Babel_Babel\345\237\272\347\241\200.md.d7a84d1c.lean.js"
similarity index 94%
rename from "assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Babel_Babel\345\237\272\347\241\200.md.452a4423.lean.js"
rename to "assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Babel_Babel\345\237\272\347\241\200.md.d7a84d1c.lean.js"
index 4648d672..5e8bfaa4 100644
--- "a/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Babel_Babel\345\237\272\347\241\200.md.452a4423.lean.js"
+++ "b/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Babel_Babel\345\237\272\347\241\200.md.d7a84d1c.lean.js"
@@ -1 +1 @@
-import{_ as s,c as a,o as l,e as n}from"./app.7354b8c5.js";const A=JSON.parse('{"title":"Babel基础","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"相关工具文档","slug":"相关工具文档","link":"#相关工具文档","children":[]},{"level":2,"title":"相关Api","slug":"相关api","link":"#相关api","children":[{"level":3,"title":"Visitor","slug":"visitor","link":"#visitor","children":[]},{"level":3,"title":"Path","slug":"path","link":"#path","children":[]},{"level":3,"title":"Scope(作用域)","slug":"scope-作用域","link":"#scope-作用域","children":[]}]},{"level":2,"title":"插件选项","slug":"插件选项","link":"#插件选项","children":[{"level":3,"title":"插件编写和调用几种方法","slug":"插件编写和调用几种方法","link":"#插件编写和调用几种方法","children":[]}]},{"level":2,"title":"相关网站","slug":"相关网站","link":"#相关网站","children":[]}],"relativePath":"knowledge-deposition/前端工程化/Babel/Babel基础.md"}'),o={name:"knowledge-deposition/前端工程化/Babel/Babel基础.md"},e=n("",22),p=[e];function t(c,r,i,y,D,F){return l(),a("div",null,p)}const C=s(o,[["render",t]]);export{A as __pageData,C as default};
+import{_ as s,c as a,o as l,e as n}from"./app.4a806fb4.js";const A=JSON.parse('{"title":"Babel基础","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"相关工具文档","slug":"相关工具文档","link":"#相关工具文档","children":[]},{"level":2,"title":"相关Api","slug":"相关api","link":"#相关api","children":[{"level":3,"title":"Visitor","slug":"visitor","link":"#visitor","children":[]},{"level":3,"title":"Path","slug":"path","link":"#path","children":[]},{"level":3,"title":"Scope(作用域)","slug":"scope-作用域","link":"#scope-作用域","children":[]}]},{"level":2,"title":"插件选项","slug":"插件选项","link":"#插件选项","children":[{"level":3,"title":"插件编写和调用几种方法","slug":"插件编写和调用几种方法","link":"#插件编写和调用几种方法","children":[]}]},{"level":2,"title":"相关网站","slug":"相关网站","link":"#相关网站","children":[]}],"relativePath":"knowledge-deposition/前端工程化/Babel/Babel基础.md"}'),o={name:"knowledge-deposition/前端工程化/Babel/Babel基础.md"},e=n("",22),p=[e];function t(c,r,i,y,D,F){return l(),a("div",null,p)}const C=s(o,[["render",t]]);export{A as __pageData,C as default};
diff --git "a/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_Rollup\347\232\204\346\217\222\344\273\266\346\234\272\345\210\266.md.cf92cfb6.js" "b/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_Rollup\347\232\204\346\217\222\344\273\266\346\234\272\345\210\266.md.ce43c41a.js"
similarity index 99%
rename from "assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_Rollup\347\232\204\346\217\222\344\273\266\346\234\272\345\210\266.md.cf92cfb6.js"
rename to "assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_Rollup\347\232\204\346\217\222\344\273\266\346\234\272\345\210\266.md.ce43c41a.js"
index c829f45a..aec52a08 100644
--- "a/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_Rollup\347\232\204\346\217\222\344\273\266\346\234\272\345\210\266.md.cf92cfb6.js"
+++ "b/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_Rollup\347\232\204\346\217\222\344\273\266\346\234\272\345\210\266.md.ce43c41a.js"
@@ -1,4 +1,4 @@
-import{_ as o,c as e,o as l,e as c}from"./app.7354b8c5.js";const s="/static-blog/image/Vite/rollup-plugin/1.png",a="/static-blog/image/Vite/rollup-plugin/2.png",D=JSON.parse('{"title":"Rollup的插件机制","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"Rollup 整体构建阶段","slug":"rollup-整体构建阶段","link":"#rollup-整体构建阶段","children":[]},{"level":2,"title":"插件Hook分类","slug":"插件hook分类","link":"#插件hook分类","children":[{"level":3,"title":"根据构建阶段分类","slug":"根据构建阶段分类","link":"#根据构建阶段分类","children":[]},{"level":3,"title":"根据Hook的执行方式分类","slug":"根据hook的执行方式分类","link":"#根据hook的执行方式分类","children":[]},{"level":3,"title":"拓展","slug":"拓展","link":"#拓展","children":[]}]},{"level":2,"title":"插件工作流","slug":"插件工作流","link":"#插件工作流","children":[{"level":3,"title":"Build阶段工作流","slug":"build阶段工作流","link":"#build阶段工作流","children":[]},{"level":3,"title":"Output阶段工作流","slug":"output阶段工作流","link":"#output阶段工作流","children":[]}]}],"relativePath":"knowledge-deposition/前端工程化/Vite/Rollup的插件机制.md"}'),t={name:"knowledge-deposition/前端工程化/Vite/Rollup的插件机制.md"},d=c(`

Rollup的插件机制

类似于Vue、React,在Rollup中也有一套自己的生命周期,从打包开始到产物输出,在每个周期都会执行特有的钩子函数(Hook)

Rollup 整体构建阶段

Rollup主要经历了BuildOutput两个阶段

对于一次完整的构建过程而言,Rollup会先进入到Build阶段,解析各模块的内容依赖关系,然后进入Output阶段,完成打包及输出。在不同的阶段,插件会有不同的工作流程。

插件Hook分类

根据构建阶段分类

Rollup的主要构建有BuildOutput两大阶段,根据构建阶段分类,插件的Hook也可分为Build HookOutput Hook

  • Build Hook就是在Build阶段执行的钩子函数,在这个阶段主要进行模块代码的转换AST解析以及模块依赖的解析,那么这个阶段的Hook对于代码的操作粒度一般为模块级别,也就是单文件级别

  • Output Hook主要进行代码的打包,操作粒度一般为chunk级别(一个chunk通常指很多文件打包到一起的产物)。

根据Hook的执行方式分类

根据Hook的执行方式可以分为AsyncSyncParallelSequentialFirst这几类

Async & Sync

Async和Sync钩子函数分别代表异步同步的钩子函数,Async钩子需要返回一个Promise,否则该钩子会被认为是Sync同步钩子

First

如果多个插件都实现了该类型的Hook,那Hook将按顺序执行,直到其中一个Hook返回非null或者非undefined的值。

TIP

  • 比如resolveId这个Hook,如果多个插件都实现了这个hook,其中某个插件的resolveId函数返回了一个路径,将停止执行后续插件的resolveId方法

Sequential

  • 如果好几个插件实现了该Hook,它们将会按照指定的顺序执行,如果当前Hook是异步的,后续的Hook也要等待当前Hook的状态为resolved后才能执行

  • 这种类型的Hook也适用于当前插件的Hook依赖上一插件Hook的处理结果,要等上一个插件Hook处理完后才返回处理结果给当前插件的Hook。比如transform钩子函数

Parallel

  • 该类型的Hook是指可以并行执行的Hook,如果多个插件都实现了该类型的钩子函数,那么这些钩子函数可以同时执行。就算当前Hook是异步的,其他该类型的Hook也不会等待该Hook执行完毕,而是一起执行

TIP

比如在Build阶段的buildStart钩子,它的执行时机是在构建刚开始的时候,每个插件声明的buildStart函数可以做一些状态初始化操作,但这些插件之间的操作并不是相互依赖,是可以并发执行的,从而提升构建性能。反之,对于需要依赖其他插件处理结果的情况就不适合用Parallel钩子了,比如transform钩子函数。

拓展

Hook可以是一个函数,也可以是一个对象,如果是一个对象,则对象中必须要有一个handler函数,该函数其实相当于实际的Hook,使用对象时,可以在对象中添加一些可选项,如下:

  • order: "pre" | "post" | null

如果有多个Hook,可以通过order选项来设置Hook执行优先级,pre先执行,post后执行,如果不设置或者设置为null,将会在用户指定的位置执行

javascript
export default function resolveFirst() {
+import{_ as o,c as e,o as l,e as c}from"./app.4a806fb4.js";const s="/static-blog/image/Vite/rollup-plugin/1.png",a="/static-blog/image/Vite/rollup-plugin/2.png",D=JSON.parse('{"title":"Rollup的插件机制","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"Rollup 整体构建阶段","slug":"rollup-整体构建阶段","link":"#rollup-整体构建阶段","children":[]},{"level":2,"title":"插件Hook分类","slug":"插件hook分类","link":"#插件hook分类","children":[{"level":3,"title":"根据构建阶段分类","slug":"根据构建阶段分类","link":"#根据构建阶段分类","children":[]},{"level":3,"title":"根据Hook的执行方式分类","slug":"根据hook的执行方式分类","link":"#根据hook的执行方式分类","children":[]},{"level":3,"title":"拓展","slug":"拓展","link":"#拓展","children":[]}]},{"level":2,"title":"插件工作流","slug":"插件工作流","link":"#插件工作流","children":[{"level":3,"title":"Build阶段工作流","slug":"build阶段工作流","link":"#build阶段工作流","children":[]},{"level":3,"title":"Output阶段工作流","slug":"output阶段工作流","link":"#output阶段工作流","children":[]}]}],"relativePath":"knowledge-deposition/前端工程化/Vite/Rollup的插件机制.md"}'),t={name:"knowledge-deposition/前端工程化/Vite/Rollup的插件机制.md"},d=c(`

Rollup的插件机制

类似于Vue、React,在Rollup中也有一套自己的生命周期,从打包开始到产物输出,在每个周期都会执行特有的钩子函数(Hook)

Rollup 整体构建阶段

Rollup主要经历了BuildOutput两个阶段

对于一次完整的构建过程而言,Rollup会先进入到Build阶段,解析各模块的内容依赖关系,然后进入Output阶段,完成打包及输出。在不同的阶段,插件会有不同的工作流程。

插件Hook分类

根据构建阶段分类

Rollup的主要构建有BuildOutput两大阶段,根据构建阶段分类,插件的Hook也可分为Build HookOutput Hook

  • Build Hook就是在Build阶段执行的钩子函数,在这个阶段主要进行模块代码的转换AST解析以及模块依赖的解析,那么这个阶段的Hook对于代码的操作粒度一般为模块级别,也就是单文件级别

  • Output Hook主要进行代码的打包,操作粒度一般为chunk级别(一个chunk通常指很多文件打包到一起的产物)。

根据Hook的执行方式分类

根据Hook的执行方式可以分为AsyncSyncParallelSequentialFirst这几类

Async & Sync

Async和Sync钩子函数分别代表异步同步的钩子函数,Async钩子需要返回一个Promise,否则该钩子会被认为是Sync同步钩子

First

如果多个插件都实现了该类型的Hook,那Hook将按顺序执行,直到其中一个Hook返回非null或者非undefined的值。

TIP

  • 比如resolveId这个Hook,如果多个插件都实现了这个hook,其中某个插件的resolveId函数返回了一个路径,将停止执行后续插件的resolveId方法

Sequential

  • 如果好几个插件实现了该Hook,它们将会按照指定的顺序执行,如果当前Hook是异步的,后续的Hook也要等待当前Hook的状态为resolved后才能执行

  • 这种类型的Hook也适用于当前插件的Hook依赖上一插件Hook的处理结果,要等上一个插件Hook处理完后才返回处理结果给当前插件的Hook。比如transform钩子函数

Parallel

  • 该类型的Hook是指可以并行执行的Hook,如果多个插件都实现了该类型的钩子函数,那么这些钩子函数可以同时执行。就算当前Hook是异步的,其他该类型的Hook也不会等待该Hook执行完毕,而是一起执行

TIP

比如在Build阶段的buildStart钩子,它的执行时机是在构建刚开始的时候,每个插件声明的buildStart函数可以做一些状态初始化操作,但这些插件之间的操作并不是相互依赖,是可以并发执行的,从而提升构建性能。反之,对于需要依赖其他插件处理结果的情况就不适合用Parallel钩子了,比如transform钩子函数。

拓展

Hook可以是一个函数,也可以是一个对象,如果是一个对象,则对象中必须要有一个handler函数,该函数其实相当于实际的Hook,使用对象时,可以在对象中添加一些可选项,如下:

  • order: "pre" | "post" | null

如果有多个Hook,可以通过order选项来设置Hook执行优先级,pre先执行,post后执行,如果不设置或者设置为null,将会在用户指定的位置执行

javascript
export default function resolveFirst() {
 	return {
 		name: 'resolve-first',
 		resolveId: {
diff --git "a/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_Rollup\347\232\204\346\217\222\344\273\266\346\234\272\345\210\266.md.cf92cfb6.lean.js" "b/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_Rollup\347\232\204\346\217\222\344\273\266\346\234\272\345\210\266.md.ce43c41a.lean.js"
similarity index 95%
rename from "assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_Rollup\347\232\204\346\217\222\344\273\266\346\234\272\345\210\266.md.cf92cfb6.lean.js"
rename to "assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_Rollup\347\232\204\346\217\222\344\273\266\346\234\272\345\210\266.md.ce43c41a.lean.js"
index b81aa1e7..095d99ab 100644
--- "a/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_Rollup\347\232\204\346\217\222\344\273\266\346\234\272\345\210\266.md.cf92cfb6.lean.js"
+++ "b/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_Rollup\347\232\204\346\217\222\344\273\266\346\234\272\345\210\266.md.ce43c41a.lean.js"
@@ -1 +1 @@
-import{_ as o,c as e,o as l,e as c}from"./app.7354b8c5.js";const s="/static-blog/image/Vite/rollup-plugin/1.png",a="/static-blog/image/Vite/rollup-plugin/2.png",D=JSON.parse('{"title":"Rollup的插件机制","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"Rollup 整体构建阶段","slug":"rollup-整体构建阶段","link":"#rollup-整体构建阶段","children":[]},{"level":2,"title":"插件Hook分类","slug":"插件hook分类","link":"#插件hook分类","children":[{"level":3,"title":"根据构建阶段分类","slug":"根据构建阶段分类","link":"#根据构建阶段分类","children":[]},{"level":3,"title":"根据Hook的执行方式分类","slug":"根据hook的执行方式分类","link":"#根据hook的执行方式分类","children":[]},{"level":3,"title":"拓展","slug":"拓展","link":"#拓展","children":[]}]},{"level":2,"title":"插件工作流","slug":"插件工作流","link":"#插件工作流","children":[{"level":3,"title":"Build阶段工作流","slug":"build阶段工作流","link":"#build阶段工作流","children":[]},{"level":3,"title":"Output阶段工作流","slug":"output阶段工作流","link":"#output阶段工作流","children":[]}]}],"relativePath":"knowledge-deposition/前端工程化/Vite/Rollup的插件机制.md"}'),t={name:"knowledge-deposition/前端工程化/Vite/Rollup的插件机制.md"},d=c("",47),n=[d];function p(r,i,u,h,k,F){return l(),e("div",null,n)}const H=o(t,[["render",p]]);export{D as __pageData,H as default};
+import{_ as o,c as e,o as l,e as c}from"./app.4a806fb4.js";const s="/static-blog/image/Vite/rollup-plugin/1.png",a="/static-blog/image/Vite/rollup-plugin/2.png",D=JSON.parse('{"title":"Rollup的插件机制","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"Rollup 整体构建阶段","slug":"rollup-整体构建阶段","link":"#rollup-整体构建阶段","children":[]},{"level":2,"title":"插件Hook分类","slug":"插件hook分类","link":"#插件hook分类","children":[{"level":3,"title":"根据构建阶段分类","slug":"根据构建阶段分类","link":"#根据构建阶段分类","children":[]},{"level":3,"title":"根据Hook的执行方式分类","slug":"根据hook的执行方式分类","link":"#根据hook的执行方式分类","children":[]},{"level":3,"title":"拓展","slug":"拓展","link":"#拓展","children":[]}]},{"level":2,"title":"插件工作流","slug":"插件工作流","link":"#插件工作流","children":[{"level":3,"title":"Build阶段工作流","slug":"build阶段工作流","link":"#build阶段工作流","children":[]},{"level":3,"title":"Output阶段工作流","slug":"output阶段工作流","link":"#output阶段工作流","children":[]}]}],"relativePath":"knowledge-deposition/前端工程化/Vite/Rollup的插件机制.md"}'),t={name:"knowledge-deposition/前端工程化/Vite/Rollup的插件机制.md"},d=c("",47),n=[d];function p(r,i,u,h,k,F){return l(),e("div",null,n)}const H=o(t,[["render",p]]);export{D as __pageData,H as default};
diff --git "a/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_Vite\346\217\222\344\273\266\346\234\272\345\210\266.md.76e5d746.js" "b/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_Vite\346\217\222\344\273\266\346\234\272\345\210\266.md.92943cff.js"
similarity index 99%
rename from "assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_Vite\346\217\222\344\273\266\346\234\272\345\210\266.md.76e5d746.js"
rename to "assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_Vite\346\217\222\344\273\266\346\234\272\345\210\266.md.92943cff.js"
index 5fd271da..165e653f 100644
--- "a/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_Vite\346\217\222\344\273\266\346\234\272\345\210\266.md.76e5d746.js"
+++ "b/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_Vite\346\217\222\344\273\266\346\234\272\345\210\266.md.92943cff.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const A=JSON.parse('{"title":"Vite插件机制","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"通用hook","slug":"通用hook","link":"#通用hook","children":[]},{"level":2,"title":"Vite独有的Hook","slug":"vite独有的hook","link":"#vite独有的hook","children":[{"level":3,"title":"config","slug":"config","link":"#config","children":[]},{"level":3,"title":"configResolved","slug":"configresolved","link":"#configresolved","children":[]},{"level":3,"title":"configureServer","slug":"configureserver","link":"#configureserver","children":[]},{"level":3,"title":"configurePreviewServer","slug":"configurepreviewserver","link":"#configurepreviewserver","children":[]},{"level":3,"title":"transformIndexHtml","slug":"transformindexhtml","link":"#transformindexhtml","children":[]},{"level":3,"title":"handleHotUpdate","slug":"handlehotupdate","link":"#handlehotupdate","children":[]}]},{"level":2,"title":"插件执行顺序","slug":"插件执行顺序","link":"#插件执行顺序","children":[]},{"level":2,"title":"插件Hook执行顺序","slug":"插件hook执行顺序","link":"#插件hook执行顺序","children":[]},{"level":2,"title":"插件应用条件","slug":"插件应用条件","link":"#插件应用条件","children":[]}],"relativePath":"knowledge-deposition/前端工程化/Vite/Vite插件机制.md"}'),o={name:"knowledge-deposition/前端工程化/Vite/Vite插件机制.md"},p=l(`

Vite插件机制

Vite的插件机制是基于Rollup来设计的,同时它也扩展了Rollup的插件接口,新增了一些特定于Vite的选项。所以,只需编写一次Vite插件,就可以让它同时适用于开发和构建。

通用hook

Vite在开发阶段会模拟Rollup的行为,Vite Dev Server会创建一个插件容器,以Rollup相同的方式调用Rollup Build Hooks,这些调用主要分为三个阶段:

  1. 服务器启动阶段: 在此阶段,optionsbuildStart Hook会被调用。
  2. 请求响应阶段: 当浏览器发起请求时,Vite 内部依次调用resolveIdloadtransform Hook。
  3. 服务器关闭阶段: 在此阶段,Vite会依次调用buildEndcloseBundle Hook。

TIP

  • 为了避免完整的AST解析以获得更好的性能,Vite在dev开发阶段没有调用moduleParsed Hook。
  • 在Vite dev开发阶段,除了closeBundle Hook,Rollup的Output Generation Hooks都没有被调用,我们可以认为Vite dev server只调用了rollup.rollup(),并没有调用bundle.generate()

Vite独有的Hook

这些Hook只会在Vite内部调用

config

Vite在读取完配置文件(vite.config.ts/vite.config.js和CLI选项的合并)之后,会拿到用户导出的配置对象,然后会执行config Hook。在这个Hook里面,我们可以对配置文件导出的对象进行自定义的操作。

该Hook可以返回部分配置对象,返回的对象将会和已存在的配置进行深度合并,也可以直接修改配置对象

如下两种情况:第一种返回部分配置对象,第二种直接对配置的某些属性进行修改

javascript
// return partial config (recommended)
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const A=JSON.parse('{"title":"Vite插件机制","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"通用hook","slug":"通用hook","link":"#通用hook","children":[]},{"level":2,"title":"Vite独有的Hook","slug":"vite独有的hook","link":"#vite独有的hook","children":[{"level":3,"title":"config","slug":"config","link":"#config","children":[]},{"level":3,"title":"configResolved","slug":"configresolved","link":"#configresolved","children":[]},{"level":3,"title":"configureServer","slug":"configureserver","link":"#configureserver","children":[]},{"level":3,"title":"configurePreviewServer","slug":"configurepreviewserver","link":"#configurepreviewserver","children":[]},{"level":3,"title":"transformIndexHtml","slug":"transformindexhtml","link":"#transformindexhtml","children":[]},{"level":3,"title":"handleHotUpdate","slug":"handlehotupdate","link":"#handlehotupdate","children":[]}]},{"level":2,"title":"插件执行顺序","slug":"插件执行顺序","link":"#插件执行顺序","children":[]},{"level":2,"title":"插件Hook执行顺序","slug":"插件hook执行顺序","link":"#插件hook执行顺序","children":[]},{"level":2,"title":"插件应用条件","slug":"插件应用条件","link":"#插件应用条件","children":[]}],"relativePath":"knowledge-deposition/前端工程化/Vite/Vite插件机制.md"}'),o={name:"knowledge-deposition/前端工程化/Vite/Vite插件机制.md"},p=l(`

Vite插件机制

Vite的插件机制是基于Rollup来设计的,同时它也扩展了Rollup的插件接口,新增了一些特定于Vite的选项。所以,只需编写一次Vite插件,就可以让它同时适用于开发和构建。

通用hook

Vite在开发阶段会模拟Rollup的行为,Vite Dev Server会创建一个插件容器,以Rollup相同的方式调用Rollup Build Hooks,这些调用主要分为三个阶段:

  1. 服务器启动阶段: 在此阶段,optionsbuildStart Hook会被调用。
  2. 请求响应阶段: 当浏览器发起请求时,Vite 内部依次调用resolveIdloadtransform Hook。
  3. 服务器关闭阶段: 在此阶段,Vite会依次调用buildEndcloseBundle Hook。

TIP

  • 为了避免完整的AST解析以获得更好的性能,Vite在dev开发阶段没有调用moduleParsed Hook。
  • 在Vite dev开发阶段,除了closeBundle Hook,Rollup的Output Generation Hooks都没有被调用,我们可以认为Vite dev server只调用了rollup.rollup(),并没有调用bundle.generate()

Vite独有的Hook

这些Hook只会在Vite内部调用

config

Vite在读取完配置文件(vite.config.ts/vite.config.js和CLI选项的合并)之后,会拿到用户导出的配置对象,然后会执行config Hook。在这个Hook里面,我们可以对配置文件导出的对象进行自定义的操作。

该Hook可以返回部分配置对象,返回的对象将会和已存在的配置进行深度合并,也可以直接修改配置对象

如下两种情况:第一种返回部分配置对象,第二种直接对配置的某些属性进行修改

javascript
// return partial config (recommended)
 const partialConfigPlugin = () => ({
   name: 'return-partial',
   config: () => ({
diff --git "a/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_Vite\346\217\222\344\273\266\346\234\272\345\210\266.md.76e5d746.lean.js" "b/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_Vite\346\217\222\344\273\266\346\234\272\345\210\266.md.92943cff.lean.js"
similarity index 96%
rename from "assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_Vite\346\217\222\344\273\266\346\234\272\345\210\266.md.76e5d746.lean.js"
rename to "assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_Vite\346\217\222\344\273\266\346\234\272\345\210\266.md.92943cff.lean.js"
index 095eee22..02ceefed 100644
--- "a/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_Vite\346\217\222\344\273\266\346\234\272\345\210\266.md.76e5d746.lean.js"
+++ "b/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_Vite\346\217\222\344\273\266\346\234\272\345\210\266.md.92943cff.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const A=JSON.parse('{"title":"Vite插件机制","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"通用hook","slug":"通用hook","link":"#通用hook","children":[]},{"level":2,"title":"Vite独有的Hook","slug":"vite独有的hook","link":"#vite独有的hook","children":[{"level":3,"title":"config","slug":"config","link":"#config","children":[]},{"level":3,"title":"configResolved","slug":"configresolved","link":"#configresolved","children":[]},{"level":3,"title":"configureServer","slug":"configureserver","link":"#configureserver","children":[]},{"level":3,"title":"configurePreviewServer","slug":"configurepreviewserver","link":"#configurepreviewserver","children":[]},{"level":3,"title":"transformIndexHtml","slug":"transformindexhtml","link":"#transformindexhtml","children":[]},{"level":3,"title":"handleHotUpdate","slug":"handlehotupdate","link":"#handlehotupdate","children":[]}]},{"level":2,"title":"插件执行顺序","slug":"插件执行顺序","link":"#插件执行顺序","children":[]},{"level":2,"title":"插件Hook执行顺序","slug":"插件hook执行顺序","link":"#插件hook执行顺序","children":[]},{"level":2,"title":"插件应用条件","slug":"插件应用条件","link":"#插件应用条件","children":[]}],"relativePath":"knowledge-deposition/前端工程化/Vite/Vite插件机制.md"}'),o={name:"knowledge-deposition/前端工程化/Vite/Vite插件机制.md"},p=l("",54),e=[p];function t(r,c,y,D,F,i){return a(),n("div",null,e)}const d=s(o,[["render",t]]);export{A as __pageData,d as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const A=JSON.parse('{"title":"Vite插件机制","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"通用hook","slug":"通用hook","link":"#通用hook","children":[]},{"level":2,"title":"Vite独有的Hook","slug":"vite独有的hook","link":"#vite独有的hook","children":[{"level":3,"title":"config","slug":"config","link":"#config","children":[]},{"level":3,"title":"configResolved","slug":"configresolved","link":"#configresolved","children":[]},{"level":3,"title":"configureServer","slug":"configureserver","link":"#configureserver","children":[]},{"level":3,"title":"configurePreviewServer","slug":"configurepreviewserver","link":"#configurepreviewserver","children":[]},{"level":3,"title":"transformIndexHtml","slug":"transformindexhtml","link":"#transformindexhtml","children":[]},{"level":3,"title":"handleHotUpdate","slug":"handlehotupdate","link":"#handlehotupdate","children":[]}]},{"level":2,"title":"插件执行顺序","slug":"插件执行顺序","link":"#插件执行顺序","children":[]},{"level":2,"title":"插件Hook执行顺序","slug":"插件hook执行顺序","link":"#插件hook执行顺序","children":[]},{"level":2,"title":"插件应用条件","slug":"插件应用条件","link":"#插件应用条件","children":[]}],"relativePath":"knowledge-deposition/前端工程化/Vite/Vite插件机制.md"}'),o={name:"knowledge-deposition/前端工程化/Vite/Vite插件机制.md"},p=l("",54),e=[p];function t(r,c,y,D,F,i){return a(),n("div",null,e)}const d=s(o,[["render",t]]);export{A as __pageData,d as default};
diff --git "a/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_esbuild\347\233\270\345\205\263.md.3df8e130.js" "b/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_esbuild\347\233\270\345\205\263.md.afe4b6f7.js"
similarity index 99%
rename from "assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_esbuild\347\233\270\345\205\263.md.3df8e130.js"
rename to "assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_esbuild\347\233\270\345\205\263.md.afe4b6f7.js"
index feca3f2a..7614f382 100644
--- "a/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_esbuild\347\233\270\345\205\263.md.3df8e130.js"
+++ "b/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_esbuild\347\233\270\345\205\263.md.afe4b6f7.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const p="/static-blog/image/Vite/usage-esbuild/1.png",o="/static-blog/image/Vite/usage-esbuild/2.png",e="/static-blog/image/Vite/usage-esbuild/3.png",t="/static-blog/image/Vite/usage-esbuild/4.png",c="/static-blog/image/Vite/usage-esbuild/5.png",r="/static-blog/image/Vite/usage-esbuild/6.png",f=JSON.parse('{"title":"esbuild相关","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"esbuild使用","slug":"esbuild使用","link":"#esbuild使用","children":[]},{"level":2,"title":"命令行调用","slug":"命令行调用","link":"#命令行调用","children":[]},{"level":2,"title":"代码调用","slug":"代码调用","link":"#代码调用","children":[{"level":3,"title":"Build API","slug":"build-api","link":"#build-api","children":[]},{"level":3,"title":"Transform API","slug":"transform-api","link":"#transform-api","children":[]}]},{"level":2,"title":"esbuild插件","slug":"esbuild插件","link":"#esbuild插件","children":[{"level":3,"title":"概念","slug":"概念","link":"#概念","children":[]},{"level":3,"title":"插件示例","slug":"插件示例","link":"#插件示例","children":[]}]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[]}],"relativePath":"knowledge-deposition/前端工程化/Vite/esbuild相关.md"}'),y={name:"knowledge-deposition/前端工程化/Vite/esbuild相关.md"},F=l(`

esbuild相关

esbuild使用

先初始化一个项目

shell
pnpm init
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const p="/static-blog/image/Vite/usage-esbuild/1.png",o="/static-blog/image/Vite/usage-esbuild/2.png",e="/static-blog/image/Vite/usage-esbuild/3.png",t="/static-blog/image/Vite/usage-esbuild/4.png",c="/static-blog/image/Vite/usage-esbuild/5.png",r="/static-blog/image/Vite/usage-esbuild/6.png",f=JSON.parse('{"title":"esbuild相关","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"esbuild使用","slug":"esbuild使用","link":"#esbuild使用","children":[]},{"level":2,"title":"命令行调用","slug":"命令行调用","link":"#命令行调用","children":[]},{"level":2,"title":"代码调用","slug":"代码调用","link":"#代码调用","children":[{"level":3,"title":"Build API","slug":"build-api","link":"#build-api","children":[]},{"level":3,"title":"Transform API","slug":"transform-api","link":"#transform-api","children":[]}]},{"level":2,"title":"esbuild插件","slug":"esbuild插件","link":"#esbuild插件","children":[{"level":3,"title":"概念","slug":"概念","link":"#概念","children":[]},{"level":3,"title":"插件示例","slug":"插件示例","link":"#插件示例","children":[]}]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[]}],"relativePath":"knowledge-deposition/前端工程化/Vite/esbuild相关.md"}'),y={name:"knowledge-deposition/前端工程化/Vite/esbuild相关.md"},F=l(`

esbuild相关

esbuild使用

先初始化一个项目

shell
pnpm init
 

安装依赖

shell
pnpm install esbuild -D
 pnpm install react react-dom
 

创建src/index.jsx

jsx
import * as React from 'react'
diff --git "a/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_esbuild\347\233\270\345\205\263.md.3df8e130.lean.js" "b/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_esbuild\347\233\270\345\205\263.md.afe4b6f7.lean.js"
similarity index 95%
rename from "assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_esbuild\347\233\270\345\205\263.md.3df8e130.lean.js"
rename to "assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_esbuild\347\233\270\345\205\263.md.afe4b6f7.lean.js"
index f90cd0dc..4cc486fc 100644
--- "a/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_esbuild\347\233\270\345\205\263.md.3df8e130.lean.js"
+++ "b/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_esbuild\347\233\270\345\205\263.md.afe4b6f7.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const p="/static-blog/image/Vite/usage-esbuild/1.png",o="/static-blog/image/Vite/usage-esbuild/2.png",e="/static-blog/image/Vite/usage-esbuild/3.png",t="/static-blog/image/Vite/usage-esbuild/4.png",c="/static-blog/image/Vite/usage-esbuild/5.png",r="/static-blog/image/Vite/usage-esbuild/6.png",f=JSON.parse('{"title":"esbuild相关","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"esbuild使用","slug":"esbuild使用","link":"#esbuild使用","children":[]},{"level":2,"title":"命令行调用","slug":"命令行调用","link":"#命令行调用","children":[]},{"level":2,"title":"代码调用","slug":"代码调用","link":"#代码调用","children":[{"level":3,"title":"Build API","slug":"build-api","link":"#build-api","children":[]},{"level":3,"title":"Transform API","slug":"transform-api","link":"#transform-api","children":[]}]},{"level":2,"title":"esbuild插件","slug":"esbuild插件","link":"#esbuild插件","children":[{"level":3,"title":"概念","slug":"概念","link":"#概念","children":[]},{"level":3,"title":"插件示例","slug":"插件示例","link":"#插件示例","children":[]}]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[]}],"relativePath":"knowledge-deposition/前端工程化/Vite/esbuild相关.md"}'),y={name:"knowledge-deposition/前端工程化/Vite/esbuild相关.md"},F=l("",169),D=[F];function i(C,A,d,u,h,g){return a(),n("div",null,D)}const m=s(y,[["render",i]]);export{f as __pageData,m as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const p="/static-blog/image/Vite/usage-esbuild/1.png",o="/static-blog/image/Vite/usage-esbuild/2.png",e="/static-blog/image/Vite/usage-esbuild/3.png",t="/static-blog/image/Vite/usage-esbuild/4.png",c="/static-blog/image/Vite/usage-esbuild/5.png",r="/static-blog/image/Vite/usage-esbuild/6.png",f=JSON.parse('{"title":"esbuild相关","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"esbuild使用","slug":"esbuild使用","link":"#esbuild使用","children":[]},{"level":2,"title":"命令行调用","slug":"命令行调用","link":"#命令行调用","children":[]},{"level":2,"title":"代码调用","slug":"代码调用","link":"#代码调用","children":[{"level":3,"title":"Build API","slug":"build-api","link":"#build-api","children":[]},{"level":3,"title":"Transform API","slug":"transform-api","link":"#transform-api","children":[]}]},{"level":2,"title":"esbuild插件","slug":"esbuild插件","link":"#esbuild插件","children":[{"level":3,"title":"概念","slug":"概念","link":"#概念","children":[]},{"level":3,"title":"插件示例","slug":"插件示例","link":"#插件示例","children":[]}]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[]}],"relativePath":"knowledge-deposition/前端工程化/Vite/esbuild相关.md"}'),y={name:"knowledge-deposition/前端工程化/Vite/esbuild相关.md"},F=l("",169),D=[F];function i(C,A,d,u,h,g){return a(),n("div",null,D)}const m=s(y,[["render",i]]);export{f as __pageData,m as default};
diff --git "a/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\344\276\235\350\265\226\351\242\204\346\236\204\345\273\272.md.e11f1e2c.js" "b/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\344\276\235\350\265\226\351\242\204\346\236\204\345\273\272.md.2f4b3057.js"
similarity index 99%
rename from "assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\344\276\235\350\265\226\351\242\204\346\236\204\345\273\272.md.e11f1e2c.js"
rename to "assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\344\276\235\350\265\226\351\242\204\346\236\204\345\273\272.md.2f4b3057.js"
index 5ba6404c..00da20bc 100644
--- "a/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\344\276\235\350\265\226\351\242\204\346\236\204\345\273\272.md.e11f1e2c.js"
+++ "b/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\344\276\235\350\265\226\351\242\204\346\236\204\345\273\272.md.2f4b3057.js"
@@ -1,4 +1,4 @@
-import{_ as e,c as s,o,e as l}from"./app.7354b8c5.js";const a="/static-blog/image/Vite/pre-built/1.png",n="/static-blog/image/Vite/pre-built/2.png",p="/static-blog/image/Vite/pre-built/4.png",c="/static-blog/image/Vite/pre-built/5.png",t="/static-blog/image/Vite/pre-built/6.png",g=JSON.parse('{"title":"依赖预构建","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"为什么需要依赖预构建","slug":"为什么需要依赖预构建","link":"#为什么需要依赖预构建","children":[]},{"level":2,"title":"依赖预构建相关配置","slug":"依赖预构建相关配置","link":"#依赖预构建相关配置","children":[{"level":3,"title":"optimizeDeps.entries","slug":"optimizedeps-entries","link":"#optimizedeps-entries","children":[]},{"level":3,"title":"optimizeDeps.exclude","slug":"optimizedeps-exclude","link":"#optimizedeps-exclude","children":[]},{"level":3,"title":"optimizeDeps.include","slug":"optimizedeps-include","link":"#optimizedeps-include","children":[]},{"level":3,"title":"optimizeDeps.esbuildOptions","slug":"optimizedeps-esbuildoptions","link":"#optimizedeps-esbuildoptions","children":[]},{"level":3,"title":"optimizeDeps.force","slug":"optimizedeps-force","link":"#optimizedeps-force","children":[]},{"level":3,"title":"optimizeDeps.disabled","slug":"optimizedeps-disabled","link":"#optimizedeps-disabled","children":[]}]},{"level":2,"title":"缓存","slug":"缓存","link":"#缓存","children":[{"level":3,"title":"文件系统缓存","slug":"文件系统缓存","link":"#文件系统缓存","children":[]},{"level":3,"title":"浏览器缓存","slug":"浏览器缓存","link":"#浏览器缓存","children":[]}]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[]}],"relativePath":"knowledge-deposition/前端工程化/Vite/依赖预构建.md"}'),i={name:"knowledge-deposition/前端工程化/Vite/依赖预构建.md"},d=l(`

依赖预构建

Vite是一个提倡no-boundle的构建工具,相比于Webpack,可以做到开发时模块按需编译,这里的模块分为两部分

  • 一部分是自己写的业务代码

  • 一部分是依赖的第三方库,即node_modules中的第三方库的代码

TIP

  • Vite中的no-bundle只是针对于自己写的业务代码,对于依赖的第三方库Vite选择使用esbuild进行bundle(打包)

  • 依赖预构建仅作用于开发环境,使用esbuild将依赖转换为ES Module规范,在生产环境中,使用@rollup/plugin-commonjs代替

为什么需要依赖预构建

  • 统一项目依赖库的导入/导出规范:当项目中有依赖库是非ES Module的语法,例如CommonJSUMD语法时,Vite会调用esbuild将其转换为ES Module规范的代码

react这个库就没有ES版本的产物,其仍旧是commonjs语法

  • 方便路径重写,统一项目中第三方模块的导入路径:在依赖预构建时,对导入的第三方包进行统一处理,处理后的结果放到当前项目的node_modules/.vite/deps目录下,并且在引入该模块的地方进行路径重写,这样就统一所有资源的引入路径
js
// 路径重写前
+import{_ as e,c as s,o,e as l}from"./app.4a806fb4.js";const a="/static-blog/image/Vite/pre-built/1.png",n="/static-blog/image/Vite/pre-built/2.png",p="/static-blog/image/Vite/pre-built/4.png",c="/static-blog/image/Vite/pre-built/5.png",t="/static-blog/image/Vite/pre-built/6.png",g=JSON.parse('{"title":"依赖预构建","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"为什么需要依赖预构建","slug":"为什么需要依赖预构建","link":"#为什么需要依赖预构建","children":[]},{"level":2,"title":"依赖预构建相关配置","slug":"依赖预构建相关配置","link":"#依赖预构建相关配置","children":[{"level":3,"title":"optimizeDeps.entries","slug":"optimizedeps-entries","link":"#optimizedeps-entries","children":[]},{"level":3,"title":"optimizeDeps.exclude","slug":"optimizedeps-exclude","link":"#optimizedeps-exclude","children":[]},{"level":3,"title":"optimizeDeps.include","slug":"optimizedeps-include","link":"#optimizedeps-include","children":[]},{"level":3,"title":"optimizeDeps.esbuildOptions","slug":"optimizedeps-esbuildoptions","link":"#optimizedeps-esbuildoptions","children":[]},{"level":3,"title":"optimizeDeps.force","slug":"optimizedeps-force","link":"#optimizedeps-force","children":[]},{"level":3,"title":"optimizeDeps.disabled","slug":"optimizedeps-disabled","link":"#optimizedeps-disabled","children":[]}]},{"level":2,"title":"缓存","slug":"缓存","link":"#缓存","children":[{"level":3,"title":"文件系统缓存","slug":"文件系统缓存","link":"#文件系统缓存","children":[]},{"level":3,"title":"浏览器缓存","slug":"浏览器缓存","link":"#浏览器缓存","children":[]}]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[]}],"relativePath":"knowledge-deposition/前端工程化/Vite/依赖预构建.md"}'),i={name:"knowledge-deposition/前端工程化/Vite/依赖预构建.md"},d=l(`

依赖预构建

Vite是一个提倡no-boundle的构建工具,相比于Webpack,可以做到开发时模块按需编译,这里的模块分为两部分

  • 一部分是自己写的业务代码

  • 一部分是依赖的第三方库,即node_modules中的第三方库的代码

TIP

  • Vite中的no-bundle只是针对于自己写的业务代码,对于依赖的第三方库Vite选择使用esbuild进行bundle(打包)

  • 依赖预构建仅作用于开发环境,使用esbuild将依赖转换为ES Module规范,在生产环境中,使用@rollup/plugin-commonjs代替

为什么需要依赖预构建

  • 统一项目依赖库的导入/导出规范:当项目中有依赖库是非ES Module的语法,例如CommonJSUMD语法时,Vite会调用esbuild将其转换为ES Module规范的代码

react这个库就没有ES版本的产物,其仍旧是commonjs语法

  • 方便路径重写,统一项目中第三方模块的导入路径:在依赖预构建时,对导入的第三方包进行统一处理,处理后的结果放到当前项目的node_modules/.vite/deps目录下,并且在引入该模块的地方进行路径重写,这样就统一所有资源的引入路径
js
// 路径重写前
 import _ from 'lodash-es';
 // 路径重写之后
 import _ from "/node_modules/.vite/deps/lodash-es.js?v=a2b41ab7"
diff --git "a/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\344\276\235\350\265\226\351\242\204\346\236\204\345\273\272.md.e11f1e2c.lean.js" "b/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\344\276\235\350\265\226\351\242\204\346\236\204\345\273\272.md.2f4b3057.lean.js"
similarity index 96%
rename from "assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\344\276\235\350\265\226\351\242\204\346\236\204\345\273\272.md.e11f1e2c.lean.js"
rename to "assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\344\276\235\350\265\226\351\242\204\346\236\204\345\273\272.md.2f4b3057.lean.js"
index 4f62195a..f13ed7b8 100644
--- "a/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\344\276\235\350\265\226\351\242\204\346\236\204\345\273\272.md.e11f1e2c.lean.js"
+++ "b/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\344\276\235\350\265\226\351\242\204\346\236\204\345\273\272.md.2f4b3057.lean.js"
@@ -1 +1 @@
-import{_ as e,c as s,o,e as l}from"./app.7354b8c5.js";const a="/static-blog/image/Vite/pre-built/1.png",n="/static-blog/image/Vite/pre-built/2.png",p="/static-blog/image/Vite/pre-built/4.png",c="/static-blog/image/Vite/pre-built/5.png",t="/static-blog/image/Vite/pre-built/6.png",g=JSON.parse('{"title":"依赖预构建","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"为什么需要依赖预构建","slug":"为什么需要依赖预构建","link":"#为什么需要依赖预构建","children":[]},{"level":2,"title":"依赖预构建相关配置","slug":"依赖预构建相关配置","link":"#依赖预构建相关配置","children":[{"level":3,"title":"optimizeDeps.entries","slug":"optimizedeps-entries","link":"#optimizedeps-entries","children":[]},{"level":3,"title":"optimizeDeps.exclude","slug":"optimizedeps-exclude","link":"#optimizedeps-exclude","children":[]},{"level":3,"title":"optimizeDeps.include","slug":"optimizedeps-include","link":"#optimizedeps-include","children":[]},{"level":3,"title":"optimizeDeps.esbuildOptions","slug":"optimizedeps-esbuildoptions","link":"#optimizedeps-esbuildoptions","children":[]},{"level":3,"title":"optimizeDeps.force","slug":"optimizedeps-force","link":"#optimizedeps-force","children":[]},{"level":3,"title":"optimizeDeps.disabled","slug":"optimizedeps-disabled","link":"#optimizedeps-disabled","children":[]}]},{"level":2,"title":"缓存","slug":"缓存","link":"#缓存","children":[{"level":3,"title":"文件系统缓存","slug":"文件系统缓存","link":"#文件系统缓存","children":[]},{"level":3,"title":"浏览器缓存","slug":"浏览器缓存","link":"#浏览器缓存","children":[]}]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[]}],"relativePath":"knowledge-deposition/前端工程化/Vite/依赖预构建.md"}'),i={name:"knowledge-deposition/前端工程化/Vite/依赖预构建.md"},d=l("",71),r=[d];function D(y,F,u,h,m,b){return o(),s("div",null,r)}const A=e(i,[["render",D]]);export{g as __pageData,A as default};
+import{_ as e,c as s,o,e as l}from"./app.4a806fb4.js";const a="/static-blog/image/Vite/pre-built/1.png",n="/static-blog/image/Vite/pre-built/2.png",p="/static-blog/image/Vite/pre-built/4.png",c="/static-blog/image/Vite/pre-built/5.png",t="/static-blog/image/Vite/pre-built/6.png",g=JSON.parse('{"title":"依赖预构建","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"为什么需要依赖预构建","slug":"为什么需要依赖预构建","link":"#为什么需要依赖预构建","children":[]},{"level":2,"title":"依赖预构建相关配置","slug":"依赖预构建相关配置","link":"#依赖预构建相关配置","children":[{"level":3,"title":"optimizeDeps.entries","slug":"optimizedeps-entries","link":"#optimizedeps-entries","children":[]},{"level":3,"title":"optimizeDeps.exclude","slug":"optimizedeps-exclude","link":"#optimizedeps-exclude","children":[]},{"level":3,"title":"optimizeDeps.include","slug":"optimizedeps-include","link":"#optimizedeps-include","children":[]},{"level":3,"title":"optimizeDeps.esbuildOptions","slug":"optimizedeps-esbuildoptions","link":"#optimizedeps-esbuildoptions","children":[]},{"level":3,"title":"optimizeDeps.force","slug":"optimizedeps-force","link":"#optimizedeps-force","children":[]},{"level":3,"title":"optimizeDeps.disabled","slug":"optimizedeps-disabled","link":"#optimizedeps-disabled","children":[]}]},{"level":2,"title":"缓存","slug":"缓存","link":"#缓存","children":[{"level":3,"title":"文件系统缓存","slug":"文件系统缓存","link":"#文件系统缓存","children":[]},{"level":3,"title":"浏览器缓存","slug":"浏览器缓存","link":"#浏览器缓存","children":[]}]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[]}],"relativePath":"knowledge-deposition/前端工程化/Vite/依赖预构建.md"}'),i={name:"knowledge-deposition/前端工程化/Vite/依赖预构建.md"},d=l("",71),r=[d];function D(y,F,u,h,m,b){return o(),s("div",null,r)}const A=e(i,[["render",D]]);export{g as __pageData,A as default};
diff --git "a/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\345\210\235\344\275\223\351\252\214.md.6d23449b.js" "b/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\345\210\235\344\275\223\351\252\214.md.609505c0.js"
similarity index 99%
rename from "assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\345\210\235\344\275\223\351\252\214.md.6d23449b.js"
rename to "assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\345\210\235\344\275\223\351\252\214.md.609505c0.js"
index d5b493c6..d618a148 100644
--- "a/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\345\210\235\344\275\223\351\252\214.md.6d23449b.js"
+++ "b/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\345\210\235\344\275\223\351\252\214.md.609505c0.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const o="/static-blog/image/Vite/1.png",p="/static-blog/image/Vite/2.png",u=JSON.parse('{"title":"初体验","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"Introduction","slug":"introduction","link":"#introduction","children":[]},{"level":2,"title":"创建项目并启动","slug":"创建项目并启动","link":"#创建项目并启动","children":[]},{"level":2,"title":"修改入口路径","slug":"修改入口路径","link":"#修改入口路径","children":[]},{"level":2,"title":"引入第三方模块","slug":"引入第三方模块","link":"#引入第三方模块","children":[]},{"level":2,"title":"vite.config.js语法提示","slug":"vite-config-js语法提示","link":"#vite-config-js语法提示","children":[]},{"level":2,"title":"vite.config.js中为什么可以用esmodule语法","slug":"vite-config-js中为什么可以用esmodule语法","link":"#vite-config-js中为什么可以用esmodule语法","children":[]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[]}],"relativePath":"knowledge-deposition/前端工程化/Vite/初体验.md"}'),e={name:"knowledge-deposition/前端工程化/Vite/初体验.md"},t=l(`

初体验

Introduction

  • Vite是一个开箱即用(out of box)构建工具,不需要使用额外配置就可以帮助我们处理构建工作。

  • Vite开发阶段基于浏览器原生ESM的支持实现了no-bundle服务,进行模块的按需加载,开发环境使用esbuild打包,提高构建速度

  • Vite生产环境中使用Rollup进行打包,并采取一系列的打包优化手段

创建项目并启动

创建一个空项目initial_experience,使用pnpm init初始化项目,然后下载Vite

shell
mkdir initial_experience
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const o="/static-blog/image/Vite/1.png",p="/static-blog/image/Vite/2.png",u=JSON.parse('{"title":"初体验","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"Introduction","slug":"introduction","link":"#introduction","children":[]},{"level":2,"title":"创建项目并启动","slug":"创建项目并启动","link":"#创建项目并启动","children":[]},{"level":2,"title":"修改入口路径","slug":"修改入口路径","link":"#修改入口路径","children":[]},{"level":2,"title":"引入第三方模块","slug":"引入第三方模块","link":"#引入第三方模块","children":[]},{"level":2,"title":"vite.config.js语法提示","slug":"vite-config-js语法提示","link":"#vite-config-js语法提示","children":[]},{"level":2,"title":"vite.config.js中为什么可以用esmodule语法","slug":"vite-config-js中为什么可以用esmodule语法","link":"#vite-config-js中为什么可以用esmodule语法","children":[]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[]}],"relativePath":"knowledge-deposition/前端工程化/Vite/初体验.md"}'),e={name:"knowledge-deposition/前端工程化/Vite/初体验.md"},t=l(`

初体验

Introduction

  • Vite是一个开箱即用(out of box)构建工具,不需要使用额外配置就可以帮助我们处理构建工作。

  • Vite开发阶段基于浏览器原生ESM的支持实现了no-bundle服务,进行模块的按需加载,开发环境使用esbuild打包,提高构建速度

  • Vite生产环境中使用Rollup进行打包,并采取一系列的打包优化手段

创建项目并启动

创建一个空项目initial_experience,使用pnpm init初始化项目,然后下载Vite

shell
mkdir initial_experience
 cd initial_experience
 pnpm init
 pnpm install vite
diff --git "a/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\345\210\235\344\275\223\351\252\214.md.6d23449b.lean.js" "b/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\345\210\235\344\275\223\351\252\214.md.609505c0.lean.js"
similarity index 95%
rename from "assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\345\210\235\344\275\223\351\252\214.md.6d23449b.lean.js"
rename to "assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\345\210\235\344\275\223\351\252\214.md.609505c0.lean.js"
index 24a00a11..f8f95d54 100644
--- "a/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\345\210\235\344\275\223\351\252\214.md.6d23449b.lean.js"
+++ "b/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\345\210\235\344\275\223\351\252\214.md.609505c0.lean.js"
@@ -1 +1 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const o="/static-blog/image/Vite/1.png",p="/static-blog/image/Vite/2.png",u=JSON.parse('{"title":"初体验","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"Introduction","slug":"introduction","link":"#introduction","children":[]},{"level":2,"title":"创建项目并启动","slug":"创建项目并启动","link":"#创建项目并启动","children":[]},{"level":2,"title":"修改入口路径","slug":"修改入口路径","link":"#修改入口路径","children":[]},{"level":2,"title":"引入第三方模块","slug":"引入第三方模块","link":"#引入第三方模块","children":[]},{"level":2,"title":"vite.config.js语法提示","slug":"vite-config-js语法提示","link":"#vite-config-js语法提示","children":[]},{"level":2,"title":"vite.config.js中为什么可以用esmodule语法","slug":"vite-config-js中为什么可以用esmodule语法","link":"#vite-config-js中为什么可以用esmodule语法","children":[]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[]}],"relativePath":"knowledge-deposition/前端工程化/Vite/初体验.md"}'),e={name:"knowledge-deposition/前端工程化/Vite/初体验.md"},t=l("",50),c=[t];function r(i,D,y,F,d,C){return n(),a("div",null,c)}const h=s(e,[["render",r]]);export{u as __pageData,h as default};
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const o="/static-blog/image/Vite/1.png",p="/static-blog/image/Vite/2.png",u=JSON.parse('{"title":"初体验","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"Introduction","slug":"introduction","link":"#introduction","children":[]},{"level":2,"title":"创建项目并启动","slug":"创建项目并启动","link":"#创建项目并启动","children":[]},{"level":2,"title":"修改入口路径","slug":"修改入口路径","link":"#修改入口路径","children":[]},{"level":2,"title":"引入第三方模块","slug":"引入第三方模块","link":"#引入第三方模块","children":[]},{"level":2,"title":"vite.config.js语法提示","slug":"vite-config-js语法提示","link":"#vite-config-js语法提示","children":[]},{"level":2,"title":"vite.config.js中为什么可以用esmodule语法","slug":"vite-config-js中为什么可以用esmodule语法","link":"#vite-config-js中为什么可以用esmodule语法","children":[]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[]}],"relativePath":"knowledge-deposition/前端工程化/Vite/初体验.md"}'),e={name:"knowledge-deposition/前端工程化/Vite/初体验.md"},t=l("",50),c=[t];function r(i,D,y,F,d,C){return n(),a("div",null,c)}const h=s(e,[["render",r]]);export{u as __pageData,h as default};
diff --git "a/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\345\214\272\345\210\206\344\270\215\345\220\214\347\216\257\345\242\203.md.1e4d6e36.js" "b/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\345\214\272\345\210\206\344\270\215\345\220\214\347\216\257\345\242\203.md.362102b0.js"
similarity index 99%
rename from "assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\345\214\272\345\210\206\344\270\215\345\220\214\347\216\257\345\242\203.md.1e4d6e36.js"
rename to "assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\345\214\272\345\210\206\344\270\215\345\220\214\347\216\257\345\242\203.md.362102b0.js"
index 090baa4c..56432e40 100644
--- "a/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\345\214\272\345\210\206\344\270\215\345\220\214\347\216\257\345\242\203.md.1e4d6e36.js"
+++ "b/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\345\214\272\345\210\206\344\270\215\345\220\214\347\216\257\345\242\203.md.362102b0.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const A=JSON.parse('{"title":"区分不同环境","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"根据启动命令","slug":"根据启动命令","link":"#根据启动命令","children":[]},{"level":2,"title":"根据环境变量","slug":"根据环境变量","link":"#根据环境变量","children":[{"level":3,"title":"在vite.config.js中获取环境变量","slug":"在vite-config-js中获取环境变量","link":"#在vite-config-js中获取环境变量","children":[]},{"level":3,"title":"在业务代码中获取环境变量","slug":"在业务代码中获取环境变量","link":"#在业务代码中获取环境变量","children":[]}]},{"level":2,"title":"环境变量相关配置","slug":"环境变量相关配置","link":"#环境变量相关配置","children":[]},{"level":2,"title":"添加其他环境","slug":"添加其他环境","link":"#添加其他环境","children":[]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[]}],"relativePath":"knowledge-deposition/前端工程化/Vite/区分不同环境.md"}'),o={name:"knowledge-deposition/前端工程化/Vite/区分不同环境.md"},p=l(`

区分不同环境

根据启动命令

先看下项目运行时会有哪些参数

package.jsonscripts中的命令

json
  "scripts": {
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const A=JSON.parse('{"title":"区分不同环境","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"根据启动命令","slug":"根据启动命令","link":"#根据启动命令","children":[]},{"level":2,"title":"根据环境变量","slug":"根据环境变量","link":"#根据环境变量","children":[{"level":3,"title":"在vite.config.js中获取环境变量","slug":"在vite-config-js中获取环境变量","link":"#在vite-config-js中获取环境变量","children":[]},{"level":3,"title":"在业务代码中获取环境变量","slug":"在业务代码中获取环境变量","link":"#在业务代码中获取环境变量","children":[]}]},{"level":2,"title":"环境变量相关配置","slug":"环境变量相关配置","link":"#环境变量相关配置","children":[]},{"level":2,"title":"添加其他环境","slug":"添加其他环境","link":"#添加其他环境","children":[]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[]}],"relativePath":"knowledge-deposition/前端工程化/Vite/区分不同环境.md"}'),o={name:"knowledge-deposition/前端工程化/Vite/区分不同环境.md"},p=l(`

区分不同环境

根据启动命令

先看下项目运行时会有哪些参数

package.jsonscripts中的命令

json
  "scripts": {
     "dev": "vite",
     "build": "vite build",
     "test": "echo \\"Error: no test specified\\" && exit 1"
diff --git "a/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\345\214\272\345\210\206\344\270\215\345\220\214\347\216\257\345\242\203.md.1e4d6e36.lean.js" "b/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\345\214\272\345\210\206\344\270\215\345\220\214\347\216\257\345\242\203.md.362102b0.lean.js"
similarity index 95%
rename from "assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\345\214\272\345\210\206\344\270\215\345\220\214\347\216\257\345\242\203.md.1e4d6e36.lean.js"
rename to "assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\345\214\272\345\210\206\344\270\215\345\220\214\347\216\257\345\242\203.md.362102b0.lean.js"
index 1037d26c..e0a3e658 100644
--- "a/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\345\214\272\345\210\206\344\270\215\345\220\214\347\216\257\345\242\203.md.1e4d6e36.lean.js"
+++ "b/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\345\214\272\345\210\206\344\270\215\345\220\214\347\216\257\345\242\203.md.362102b0.lean.js"
@@ -1 +1 @@
-import{_ as s,c as n,o as a,e as l}from"./app.7354b8c5.js";const A=JSON.parse('{"title":"区分不同环境","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"根据启动命令","slug":"根据启动命令","link":"#根据启动命令","children":[]},{"level":2,"title":"根据环境变量","slug":"根据环境变量","link":"#根据环境变量","children":[{"level":3,"title":"在vite.config.js中获取环境变量","slug":"在vite-config-js中获取环境变量","link":"#在vite-config-js中获取环境变量","children":[]},{"level":3,"title":"在业务代码中获取环境变量","slug":"在业务代码中获取环境变量","link":"#在业务代码中获取环境变量","children":[]}]},{"level":2,"title":"环境变量相关配置","slug":"环境变量相关配置","link":"#环境变量相关配置","children":[]},{"level":2,"title":"添加其他环境","slug":"添加其他环境","link":"#添加其他环境","children":[]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[]}],"relativePath":"knowledge-deposition/前端工程化/Vite/区分不同环境.md"}'),o={name:"knowledge-deposition/前端工程化/Vite/区分不同环境.md"},p=l("",43),e=[p];function t(c,r,D,y,F,i){return a(),n("div",null,e)}const d=s(o,[["render",t]]);export{A as __pageData,d as default};
+import{_ as s,c as n,o as a,e as l}from"./app.4a806fb4.js";const A=JSON.parse('{"title":"区分不同环境","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"根据启动命令","slug":"根据启动命令","link":"#根据启动命令","children":[]},{"level":2,"title":"根据环境变量","slug":"根据环境变量","link":"#根据环境变量","children":[{"level":3,"title":"在vite.config.js中获取环境变量","slug":"在vite-config-js中获取环境变量","link":"#在vite-config-js中获取环境变量","children":[]},{"level":3,"title":"在业务代码中获取环境变量","slug":"在业务代码中获取环境变量","link":"#在业务代码中获取环境变量","children":[]}]},{"level":2,"title":"环境变量相关配置","slug":"环境变量相关配置","link":"#环境变量相关配置","children":[]},{"level":2,"title":"添加其他环境","slug":"添加其他环境","link":"#添加其他环境","children":[]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[]}],"relativePath":"knowledge-deposition/前端工程化/Vite/区分不同环境.md"}'),o={name:"knowledge-deposition/前端工程化/Vite/区分不同环境.md"},p=l("",43),e=[p];function t(c,r,D,y,F,i){return a(),n("div",null,e)}const d=s(o,[["render",t]]);export{A as __pageData,d as default};
diff --git "a/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\345\244\204\347\220\206\346\240\267\345\274\217.md.a4b43b40.js" "b/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\345\244\204\347\220\206\346\240\267\345\274\217.md.2997b7e6.js"
similarity index 99%
rename from "assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\345\244\204\347\220\206\346\240\267\345\274\217.md.a4b43b40.js"
rename to "assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\345\244\204\347\220\206\346\240\267\345\274\217.md.2997b7e6.js"
index 45e1e6a9..3f88e77f 100644
--- "a/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\345\244\204\347\220\206\346\240\267\345\274\217.md.a4b43b40.js"
+++ "b/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\345\244\204\347\220\206\346\240\267\345\274\217.md.2997b7e6.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const o="/static-blog/image/Vite/4.png",p="/static-blog/image/Vite/5.png",e="/static-blog/image/Vite/6.png",c="/static-blog/image/Vite/7.png",f=JSON.parse('{"title":"处理样式","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"普通CSS","slug":"普通css","link":"#普通css","children":[]},{"level":2,"title":"CSS Module","slug":"css-module","link":"#css-module","children":[{"level":3,"title":"CSS Module配置","slug":"css-module配置","link":"#css-module配置","children":[]}]},{"level":2,"title":"Sass/Less","slug":"sass-less","link":"#sass-less","children":[{"level":3,"title":"预处理器编译选项","slug":"预处理器编译选项","link":"#预处理器编译选项","children":[]}]},{"level":2,"title":"开启sourceMap","slug":"开启sourcemap","link":"#开启sourcemap","children":[]},{"level":2,"title":"postcss配置","slug":"postcss配置","link":"#postcss配置","children":[{"level":3,"title":"示例","slug":"示例","link":"#示例","children":[]}]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[]}],"relativePath":"knowledge-deposition/前端工程化/Vite/处理样式.md"}'),t={name:"knowledge-deposition/前端工程化/Vite/处理样式.md"},r=l(`

处理样式

普通CSS

TIP

vite支持直接处理css

main.js

javascript
import './common.css'
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const o="/static-blog/image/Vite/4.png",p="/static-blog/image/Vite/5.png",e="/static-blog/image/Vite/6.png",c="/static-blog/image/Vite/7.png",f=JSON.parse('{"title":"处理样式","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"普通CSS","slug":"普通css","link":"#普通css","children":[]},{"level":2,"title":"CSS Module","slug":"css-module","link":"#css-module","children":[{"level":3,"title":"CSS Module配置","slug":"css-module配置","link":"#css-module配置","children":[]}]},{"level":2,"title":"Sass/Less","slug":"sass-less","link":"#sass-less","children":[{"level":3,"title":"预处理器编译选项","slug":"预处理器编译选项","link":"#预处理器编译选项","children":[]}]},{"level":2,"title":"开启sourceMap","slug":"开启sourcemap","link":"#开启sourcemap","children":[]},{"level":2,"title":"postcss配置","slug":"postcss配置","link":"#postcss配置","children":[{"level":3,"title":"示例","slug":"示例","link":"#示例","children":[]}]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[]}],"relativePath":"knowledge-deposition/前端工程化/Vite/处理样式.md"}'),t={name:"knowledge-deposition/前端工程化/Vite/处理样式.md"},r=l(`

处理样式

普通CSS

TIP

vite支持直接处理css

main.js

javascript
import './common.css'
 console.log('handle style')
 

common.css

css
html {
     background-color: #f5f5f5;
diff --git "a/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\345\244\204\347\220\206\346\240\267\345\274\217.md.a4b43b40.lean.js" "b/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\345\244\204\347\220\206\346\240\267\345\274\217.md.2997b7e6.lean.js"
similarity index 95%
rename from "assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\345\244\204\347\220\206\346\240\267\345\274\217.md.a4b43b40.lean.js"
rename to "assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\345\244\204\347\220\206\346\240\267\345\274\217.md.2997b7e6.lean.js"
index 449ddc88..de246955 100644
--- "a/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\345\244\204\347\220\206\346\240\267\345\274\217.md.a4b43b40.lean.js"
+++ "b/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\345\244\204\347\220\206\346\240\267\345\274\217.md.2997b7e6.lean.js"
@@ -1 +1 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const o="/static-blog/image/Vite/4.png",p="/static-blog/image/Vite/5.png",e="/static-blog/image/Vite/6.png",c="/static-blog/image/Vite/7.png",f=JSON.parse('{"title":"处理样式","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"普通CSS","slug":"普通css","link":"#普通css","children":[]},{"level":2,"title":"CSS Module","slug":"css-module","link":"#css-module","children":[{"level":3,"title":"CSS Module配置","slug":"css-module配置","link":"#css-module配置","children":[]}]},{"level":2,"title":"Sass/Less","slug":"sass-less","link":"#sass-less","children":[{"level":3,"title":"预处理器编译选项","slug":"预处理器编译选项","link":"#预处理器编译选项","children":[]}]},{"level":2,"title":"开启sourceMap","slug":"开启sourcemap","link":"#开启sourcemap","children":[]},{"level":2,"title":"postcss配置","slug":"postcss配置","link":"#postcss配置","children":[{"level":3,"title":"示例","slug":"示例","link":"#示例","children":[]}]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[]}],"relativePath":"knowledge-deposition/前端工程化/Vite/处理样式.md"}'),t={name:"knowledge-deposition/前端工程化/Vite/处理样式.md"},r=l("",55),D=[r];function y(i,F,C,A,d,u){return n(),a("div",null,D)}const m=s(t,[["render",y]]);export{f as __pageData,m as default};
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const o="/static-blog/image/Vite/4.png",p="/static-blog/image/Vite/5.png",e="/static-blog/image/Vite/6.png",c="/static-blog/image/Vite/7.png",f=JSON.parse('{"title":"处理样式","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"普通CSS","slug":"普通css","link":"#普通css","children":[]},{"level":2,"title":"CSS Module","slug":"css-module","link":"#css-module","children":[{"level":3,"title":"CSS Module配置","slug":"css-module配置","link":"#css-module配置","children":[]}]},{"level":2,"title":"Sass/Less","slug":"sass-less","link":"#sass-less","children":[{"level":3,"title":"预处理器编译选项","slug":"预处理器编译选项","link":"#预处理器编译选项","children":[]}]},{"level":2,"title":"开启sourceMap","slug":"开启sourcemap","link":"#开启sourcemap","children":[]},{"level":2,"title":"postcss配置","slug":"postcss配置","link":"#postcss配置","children":[{"level":3,"title":"示例","slug":"示例","link":"#示例","children":[]}]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[]}],"relativePath":"knowledge-deposition/前端工程化/Vite/处理样式.md"}'),t={name:"knowledge-deposition/前端工程化/Vite/处理样式.md"},r=l("",55),D=[r];function y(i,F,C,A,d,u){return n(),a("div",null,D)}const m=s(t,[["render",y]]);export{f as __pageData,m as default};
diff --git "a/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\345\244\204\347\220\206\351\235\231\346\200\201\350\265\204\346\272\220.md.3a391948.js" "b/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\345\244\204\347\220\206\351\235\231\346\200\201\350\265\204\346\272\220.md.6aa4348d.js"
similarity index 99%
rename from "assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\345\244\204\347\220\206\351\235\231\346\200\201\350\265\204\346\272\220.md.3a391948.js"
rename to "assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\345\244\204\347\220\206\351\235\231\346\200\201\350\265\204\346\272\220.md.6aa4348d.js"
index ec336f77..a7aa1055 100644
--- "a/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\345\244\204\347\220\206\351\235\231\346\200\201\350\265\204\346\272\220.md.3a391948.js"
+++ "b/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\345\244\204\347\220\206\351\235\231\346\200\201\350\265\204\346\272\220.md.6aa4348d.js"
@@ -1,4 +1,4 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const o="/static-blog/image/Vite/static-resource/1.png",p="/static-blog/image/Vite/static-resource/2.png",g=JSON.parse('{"title":"处理静态资源","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"图片加载","slug":"图片加载","link":"#图片加载","children":[{"level":3,"title":"加载图片的几种场景","slug":"加载图片的几种场景","link":"#加载图片的几种场景","children":[]},{"level":3,"title":"设置路径别名","slug":"设置路径别名","link":"#设置路径别名","children":[]}]},{"level":2,"title":"SVG加载方式","slug":"svg加载方式","link":"#svg加载方式","children":[]},{"level":2,"title":"JSON文件加载","slug":"json文件加载","link":"#json文件加载","children":[{"level":3,"title":"禁用命名导入","slug":"禁用命名导入","link":"#禁用命名导入","children":[]}]},{"level":2,"title":"特殊资源后缀","slug":"特殊资源后缀","link":"#特殊资源后缀","children":[]},{"level":2,"title":"静态资源类型","slug":"静态资源类型","link":"#静态资源类型","children":[]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[]}],"relativePath":"knowledge-deposition/前端工程化/Vite/处理静态资源.md"}'),e={name:"knowledge-deposition/前端工程化/Vite/处理静态资源.md"},t=l(`

处理静态资源

图片加载

加载图片的几种场景

  • HTML中使用img标签来加载图片
html
<img src="xxx.png" alt="xxx">
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const o="/static-blog/image/Vite/static-resource/1.png",p="/static-blog/image/Vite/static-resource/2.png",g=JSON.parse('{"title":"处理静态资源","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"图片加载","slug":"图片加载","link":"#图片加载","children":[{"level":3,"title":"加载图片的几种场景","slug":"加载图片的几种场景","link":"#加载图片的几种场景","children":[]},{"level":3,"title":"设置路径别名","slug":"设置路径别名","link":"#设置路径别名","children":[]}]},{"level":2,"title":"SVG加载方式","slug":"svg加载方式","link":"#svg加载方式","children":[]},{"level":2,"title":"JSON文件加载","slug":"json文件加载","link":"#json文件加载","children":[{"level":3,"title":"禁用命名导入","slug":"禁用命名导入","link":"#禁用命名导入","children":[]}]},{"level":2,"title":"特殊资源后缀","slug":"特殊资源后缀","link":"#特殊资源后缀","children":[]},{"level":2,"title":"静态资源类型","slug":"静态资源类型","link":"#静态资源类型","children":[]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[]}],"relativePath":"knowledge-deposition/前端工程化/Vite/处理静态资源.md"}'),e={name:"knowledge-deposition/前端工程化/Vite/处理静态资源.md"},t=l(`

处理静态资源

图片加载

加载图片的几种场景

  • HTML中使用img标签来加载图片
html
<img src="xxx.png" alt="xxx">
 
  • CSS中通过background属性设置背景图
css
.home {
     background: url("../xxx.png") no-repeat;
 }
diff --git "a/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\345\244\204\347\220\206\351\235\231\346\200\201\350\265\204\346\272\220.md.3a391948.lean.js" "b/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\345\244\204\347\220\206\351\235\231\346\200\201\350\265\204\346\272\220.md.6aa4348d.lean.js"
similarity index 95%
rename from "assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\345\244\204\347\220\206\351\235\231\346\200\201\350\265\204\346\272\220.md.3a391948.lean.js"
rename to "assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\345\244\204\347\220\206\351\235\231\346\200\201\350\265\204\346\272\220.md.6aa4348d.lean.js"
index 9a3f3164..8c2d5a38 100644
--- "a/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\345\244\204\347\220\206\351\235\231\346\200\201\350\265\204\346\272\220.md.3a391948.lean.js"
+++ "b/assets/knowledge-deposition_\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226_Vite_\345\244\204\347\220\206\351\235\231\346\200\201\350\265\204\346\272\220.md.6aa4348d.lean.js"
@@ -1 +1 @@
-import{_ as s,c as a,o as n,e as l}from"./app.7354b8c5.js";const o="/static-blog/image/Vite/static-resource/1.png",p="/static-blog/image/Vite/static-resource/2.png",g=JSON.parse('{"title":"处理静态资源","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"图片加载","slug":"图片加载","link":"#图片加载","children":[{"level":3,"title":"加载图片的几种场景","slug":"加载图片的几种场景","link":"#加载图片的几种场景","children":[]},{"level":3,"title":"设置路径别名","slug":"设置路径别名","link":"#设置路径别名","children":[]}]},{"level":2,"title":"SVG加载方式","slug":"svg加载方式","link":"#svg加载方式","children":[]},{"level":2,"title":"JSON文件加载","slug":"json文件加载","link":"#json文件加载","children":[{"level":3,"title":"禁用命名导入","slug":"禁用命名导入","link":"#禁用命名导入","children":[]}]},{"level":2,"title":"特殊资源后缀","slug":"特殊资源后缀","link":"#特殊资源后缀","children":[]},{"level":2,"title":"静态资源类型","slug":"静态资源类型","link":"#静态资源类型","children":[]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[]}],"relativePath":"knowledge-deposition/前端工程化/Vite/处理静态资源.md"}'),e={name:"knowledge-deposition/前端工程化/Vite/处理静态资源.md"},t=l("",53),c=[t];function r(D,y,i,C,F,A){return n(),a("div",null,c)}const u=s(e,[["render",r]]);export{g as __pageData,u as default};
+import{_ as s,c as a,o as n,e as l}from"./app.4a806fb4.js";const o="/static-blog/image/Vite/static-resource/1.png",p="/static-blog/image/Vite/static-resource/2.png",g=JSON.parse('{"title":"处理静态资源","description":"","frontmatter":{"layout":"doc"},"headers":[{"level":2,"title":"图片加载","slug":"图片加载","link":"#图片加载","children":[{"level":3,"title":"加载图片的几种场景","slug":"加载图片的几种场景","link":"#加载图片的几种场景","children":[]},{"level":3,"title":"设置路径别名","slug":"设置路径别名","link":"#设置路径别名","children":[]}]},{"level":2,"title":"SVG加载方式","slug":"svg加载方式","link":"#svg加载方式","children":[]},{"level":2,"title":"JSON文件加载","slug":"json文件加载","link":"#json文件加载","children":[{"level":3,"title":"禁用命名导入","slug":"禁用命名导入","link":"#禁用命名导入","children":[]}]},{"level":2,"title":"特殊资源后缀","slug":"特殊资源后缀","link":"#特殊资源后缀","children":[]},{"level":2,"title":"静态资源类型","slug":"静态资源类型","link":"#静态资源类型","children":[]},{"level":2,"title":"其他","slug":"其他","link":"#其他","children":[]}],"relativePath":"knowledge-deposition/前端工程化/Vite/处理静态资源.md"}'),e={name:"knowledge-deposition/前端工程化/Vite/处理静态资源.md"},t=l("",53),c=[t];function r(D,y,i,C,F,A){return n(),a("div",null,c)}const u=s(e,[["render",r]]);export{g as __pageData,u as default};
diff --git a/favorites/Books/index.html b/favorites/Books/index.html
index d6f9b36a..e08b5b43 100644
--- a/favorites/Books/index.html
+++ b/favorites/Books/index.html
@@ -6,16 +6,16 @@
     Books | mx52jing
     
     
-    
-    
-    
+    
+    
+    
     
     
   
   
     
-    
-    
+    
+    
     
   
 
\ No newline at end of file
diff --git a/favorites/Browser/index.html b/favorites/Browser/index.html
index e8d742ae..0202c5ef 100644
--- a/favorites/Browser/index.html
+++ b/favorites/Browser/index.html
@@ -6,16 +6,16 @@
     Browser相关 | mx52jing
     
     
-    
-    
-    
+    
+    
+    
     
     
   
   
     
-    
-    
+    
+    
     
   
 
\ No newline at end of file
diff --git a/favorites/CSS/index.html b/favorites/CSS/index.html
index 0b26c04a..b4dedd35 100644
--- a/favorites/CSS/index.html
+++ b/favorites/CSS/index.html
@@ -6,16 +6,16 @@
     CSS | mx52jing
     
     
-    
-    
-    
+    
+    
+    
     
     
   
   
     
-    
-    
+    
+    
     
   
 
\ No newline at end of file
diff --git a/favorites/Canvas/index.html b/favorites/Canvas/index.html
index 482914c3..848ea91d 100644
--- a/favorites/Canvas/index.html
+++ b/favorites/Canvas/index.html
@@ -6,16 +6,16 @@
     Canvas相关 | mx52jing
     
     
-    
-    
-    
+    
+    
+    
     
     
   
   
     
-    
-    
+    
+    
     
   
 
\ No newline at end of file
diff --git a/favorites/Docker/index.html b/favorites/Docker/index.html
index f5d54c78..3a9c9cac 100644
--- a/favorites/Docker/index.html
+++ b/favorites/Docker/index.html
@@ -6,16 +6,16 @@
     Docker | mx52jing
     
     
-    
-    
-    
+    
+    
+    
     
     
   
   
     
-    
-    
+    
+    
     
   
 
\ No newline at end of file
diff --git a/favorites/Git/index.html b/favorites/Git/index.html
index 8a007dc8..02776562 100644
--- a/favorites/Git/index.html
+++ b/favorites/Git/index.html
@@ -6,16 +6,16 @@
     Git | mx52jing
     
     
-    
-    
-    
+    
+    
+    
     
     
   
   
     
-    
-    
+    
+    
     
   
 
\ No newline at end of file
diff --git a/favorites/Golang/index.html b/favorites/Golang/index.html
index f3e75b4e..cb62d9bd 100644
--- a/favorites/Golang/index.html
+++ b/favorites/Golang/index.html
@@ -6,16 +6,16 @@
     Golang | mx52jing
     
     
-    
-    
-    
+    
+    
+    
     
     
   
   
     
-    
-    
+    
+    
     
   
 
\ No newline at end of file
diff --git a/favorites/IDE/index.html b/favorites/IDE/index.html
index 35411e6c..8fa61f02 100644
--- a/favorites/IDE/index.html
+++ b/favorites/IDE/index.html
@@ -6,16 +6,16 @@
     IDE | mx52jing
     
     
-    
-    
-    
+    
+    
+    
     
     
   
   
     
-    
-    
+    
+    
     
   
 
\ No newline at end of file
diff --git a/favorites/JavasSript/index.html b/favorites/JavasSript/index.html
index a06e97ab..59775fba 100644
--- a/favorites/JavasSript/index.html
+++ b/favorites/JavasSript/index.html
@@ -6,16 +6,16 @@
     JavaScript | mx52jing
     
     
-    
-    
-    
+    
+    
+    
     
     
   
   
     
-    
-    
+    
+    
     
   
 
\ No newline at end of file
diff --git a/favorites/Linux/index.html b/favorites/Linux/index.html
index 1396b650..5ff8f4b0 100644
--- a/favorites/Linux/index.html
+++ b/favorites/Linux/index.html
@@ -6,16 +6,16 @@
     Linux | mx52jing
     
     
-    
-    
-    
+    
+    
+    
     
     
   
   
     
-    
-    
+    
+    
     
   
 
\ No newline at end of file
diff --git a/favorites/Mac/index.html b/favorites/Mac/index.html
index 06910d42..46a8dfa6 100644
--- a/favorites/Mac/index.html
+++ b/favorites/Mac/index.html
@@ -6,16 +6,16 @@
     Mac | mx52jing
     
     
-    
-    
-    
+    
+    
+    
     
     
   
   
     
-    
-    
+    
+    
     
   
 
\ No newline at end of file
diff --git a/favorites/Mobile/index.html b/favorites/Mobile/index.html
index 33a3dc93..529c3f89 100644
--- a/favorites/Mobile/index.html
+++ b/favorites/Mobile/index.html
@@ -6,16 +6,16 @@
     Mobile Side | mx52jing
     
     
-    
-    
-    
+    
+    
+    
     
     
   
   
     
-    
-    
+    
+    
     
   
 
\ No newline at end of file
diff --git a/favorites/Nginx/index.html b/favorites/Nginx/index.html
index 5b266e9f..9d3e0d82 100644
--- a/favorites/Nginx/index.html
+++ b/favorites/Nginx/index.html
@@ -6,16 +6,16 @@
     Nginx | mx52jing
     
     
-    
-    
-    
+    
+    
+    
     
     
   
   
     
-    
-    
+    
+    
     
   
 
\ No newline at end of file
diff --git a/favorites/ProblemSolving/index.html b/favorites/ProblemSolving/index.html
index faf8fdac..fac3fb0e 100644
--- a/favorites/ProblemSolving/index.html
+++ b/favorites/ProblemSolving/index.html
@@ -6,16 +6,16 @@
     Problem Solving | mx52jing
     
     
-    
-    
-    
+    
+    
+    
     
     
   
   
     
-    
-    
+    
+    
     
   
 
\ No newline at end of file
diff --git a/favorites/React/index.html b/favorites/React/index.html
index c80846db..48a478a2 100644
--- a/favorites/React/index.html
+++ b/favorites/React/index.html
@@ -6,16 +6,16 @@
     React | mx52jing
     
     
-    
-    
-    
+    
+    
+    
     
     
   
   
     
-    
-    
+    
+    
     
   
 
\ No newline at end of file
diff --git a/favorites/Typescript/index.html b/favorites/Typescript/index.html
index 111253fd..a20b17c9 100644
--- a/favorites/Typescript/index.html
+++ b/favorites/Typescript/index.html
@@ -6,16 +6,16 @@
     Typescript | mx52jing
     
     
-    
-    
-    
+    
+    
+    
     
     
   
   
     
-    
-    
+    
+    
     
   
 
\ No newline at end of file
diff --git "a/favorites/UI\350\256\276\350\256\241\347\201\265\346\204\237/index.html" "b/favorites/UI\350\256\276\350\256\241\347\201\265\346\204\237/index.html"
index 287b9013..024942e0 100644
--- "a/favorites/UI\350\256\276\350\256\241\347\201\265\346\204\237/index.html"
+++ "b/favorites/UI\350\256\276\350\256\241\347\201\265\346\204\237/index.html"
@@ -6,16 +6,16 @@
     UI设计灵感 | mx52jing
     
     
-    
-    
-    
+    
+    
+    
     
     
   
   
     
-    
-    
+    
+    
     
   
 
\ No newline at end of file
diff --git a/favorites/Vue/index.html b/favorites/Vue/index.html
index 4088166d..94956aef 100644
--- a/favorites/Vue/index.html
+++ b/favorites/Vue/index.html
@@ -6,16 +6,16 @@
     Vue | mx52jing
     
     
-    
-    
-    
+    
+    
+    
     
     
   
   
     
-    
-    
+    
+    
     
   
 
\ No newline at end of file
diff --git "a/favorites/\345\205\266\344\273\226/index.html" "b/favorites/\345\205\266\344\273\226/index.html"
index eca338eb..dbb92be4 100644
--- "a/favorites/\345\205\266\344\273\226/index.html"
+++ "b/favorites/\345\205\266\344\273\226/index.html"
@@ -6,16 +6,16 @@
     其他 | mx52jing
     
     
-    
-    
-    
+    
+    
+    
     
     
   
   
     
-    
-    
+    
+    
     
   
 
\ No newline at end of file
diff --git "a/favorites/\347\256\227\346\263\225/index.html" "b/favorites/\347\256\227\346\263\225/index.html"
index 346cca92..9615c390 100644
--- "a/favorites/\347\256\227\346\263\225/index.html"
+++ "b/favorites/\347\256\227\346\263\225/index.html"
@@ -6,16 +6,16 @@
     算法 | mx52jing
     
     
-    
-    
-    
+    
+    
+    
     
     
   
   
     
-    
-    
+    
+    
     
   
 
\ No newline at end of file
diff --git "a/hand-notes/CSS/CSS\345\256\236\347\216\260\346\226\207\345\255\227\346\270\220\345\217\230.html" "b/hand-notes/CSS/CSS\345\256\236\347\216\260\346\226\207\345\255\227\346\270\220\345\217\230.html"
index 37666257..cc5c173c 100644
--- "a/hand-notes/CSS/CSS\345\256\236\347\216\260\346\226\207\345\255\227\346\270\220\345\217\230.html"
+++ "b/hand-notes/CSS/CSS\345\256\236\347\216\260\346\226\207\345\255\227\346\270\220\345\217\230.html"
@@ -6,9 +6,9 @@
     CSS实现文字渐变 | mx52jing
     
     
-    
-    
-    
+    
+    
+    
     
     
   
@@ -21,8 +21,8 @@
   -webkit-background-clip: text;
 }
 

其他

效果预览

查看代码

- - + + \ No newline at end of file diff --git "a/hand-notes/CSS/CSS\345\256\236\347\216\260\347\252\201\345\207\272\344\270\215\345\220\214\351\242\234\350\211\262\347\232\204\345\234\206\350\247\222.html" "b/hand-notes/CSS/CSS\345\256\236\347\216\260\347\252\201\345\207\272\344\270\215\345\220\214\351\242\234\350\211\262\347\232\204\345\234\206\350\247\222.html" index 4a5fa85f..d361b29f 100644 --- "a/hand-notes/CSS/CSS\345\256\236\347\216\260\347\252\201\345\207\272\344\270\215\345\220\214\351\242\234\350\211\262\347\232\204\345\234\206\350\247\222.html" +++ "b/hand-notes/CSS/CSS\345\256\236\347\216\260\347\252\201\345\207\272\344\270\215\345\220\214\351\242\234\350\211\262\347\232\204\345\234\206\350\247\222.html" @@ -6,9 +6,9 @@ CSS实现突出不同颜色的圆角 | mx52jing - - - + + + @@ -50,8 +50,8 @@ border-radius: 16px; }

其他

效果预览

查看代码

- - + + \ No newline at end of file diff --git "a/hand-notes/CSS/CSS\345\256\236\347\216\260\347\261\273\344\274\274\345\276\256\344\277\241\345\244\264\345\203\217\346\225\210\346\236\234.html" "b/hand-notes/CSS/CSS\345\256\236\347\216\260\347\261\273\344\274\274\345\276\256\344\277\241\345\244\264\345\203\217\346\225\210\346\236\234.html" index c416c75d..1378bb03 100644 --- "a/hand-notes/CSS/CSS\345\256\236\347\216\260\347\261\273\344\274\274\345\276\256\344\277\241\345\244\264\345\203\217\346\225\210\346\236\234.html" +++ "b/hand-notes/CSS/CSS\345\256\236\347\216\260\347\261\273\344\274\274\345\276\256\344\277\241\345\244\264\345\203\217\346\225\210\346\236\234.html" @@ -6,9 +6,9 @@ CSS实现类似微信头像效果 | mx52jing - - - + + + @@ -76,8 +76,8 @@ width: calc(100% / 3); }

效果预览

- - + + \ No newline at end of file diff --git "a/hand-notes/CSS/CSS\346\250\241\346\213\237\346\225\260\345\255\227loading.html" "b/hand-notes/CSS/CSS\346\250\241\346\213\237\346\225\260\345\255\227loading.html" index 5a033f35..35c902f7 100644 --- "a/hand-notes/CSS/CSS\346\250\241\346\213\237\346\225\260\345\255\227loading.html" +++ "b/hand-notes/CSS/CSS\346\250\241\346\213\237\346\225\260\345\255\227loading.html" @@ -6,9 +6,9 @@ CSS模拟数字loading | mx52jing - - - + + + @@ -117,8 +117,8 @@ transition: 10s --percentage cubic-bezier(.08,.81,.29,.99);; }

其他

兼容性

效果预览

相关代码

- - + + \ No newline at end of file diff --git "a/hand-notes/CSS/CSS\350\256\241\346\225\260\345\231\250-counter.html" "b/hand-notes/CSS/CSS\350\256\241\346\225\260\345\231\250-counter.html" index 8a89fdb1..bdbf33a0 100644 --- "a/hand-notes/CSS/CSS\350\256\241\346\225\260\345\231\250-counter.html" +++ "b/hand-notes/CSS/CSS\350\256\241\346\225\260\345\231\250-counter.html" @@ -6,9 +6,9 @@ CSS计数器-counter | mx52jing - - - + + + @@ -134,8 +134,8 @@ content: counters(counters-change, '-', decimal) '. '; }

效果如下:

TIP

  • 一个元素如果设置了counter-increment, 但是设置了display: none,则此计数值是不会增加的。visibility: hidden以及其他样式不会有此现象。

其他

效果预览

相关代码

- - + + \ No newline at end of file diff --git "a/hand-notes/CSS/\345\233\276\347\211\207\345\212\240\350\275\275\345\207\272\351\224\231\346\240\267\345\274\217\350\256\276\347\275\256.html" "b/hand-notes/CSS/\345\233\276\347\211\207\345\212\240\350\275\275\345\207\272\351\224\231\346\240\267\345\274\217\350\256\276\347\275\256.html" index 500f23d1..38f4afd9 100644 --- "a/hand-notes/CSS/\345\233\276\347\211\207\345\212\240\350\275\275\345\207\272\351\224\231\346\240\267\345\274\217\350\256\276\347\275\256.html" +++ "b/hand-notes/CSS/\345\233\276\347\211\207\345\212\240\350\275\275\345\207\272\351\224\231\346\240\267\345\274\217\350\256\276\347\275\256.html" @@ -6,9 +6,9 @@ 图片加载出错样式设置 | mx52jing - - - + + + @@ -74,8 +74,8 @@ padding: 0 10px; }

效果预览

- - + + \ No newline at end of file diff --git "a/hand-notes/CSS/\345\256\236\347\216\260\351\253\230\345\272\246\350\277\207\346\270\241.html" "b/hand-notes/CSS/\345\256\236\347\216\260\351\253\230\345\272\246\350\277\207\346\270\241.html" index 8b0d339d..7af0f579 100644 --- "a/hand-notes/CSS/\345\256\236\347\216\260\351\253\230\345\272\246\350\277\207\346\270\241.html" +++ "b/hand-notes/CSS/\345\256\236\347\216\260\351\253\230\345\272\246\350\277\207\346\270\241.html" @@ -6,9 +6,9 @@ 实现高度过渡 | mx52jing - - - + + + @@ -143,8 +143,8 @@ </body> </html>

效果如下:

- - + + \ No newline at end of file diff --git "a/hand-notes/CSS/\350\231\232\347\272\277\350\276\271\346\241\206.html" "b/hand-notes/CSS/\350\231\232\347\272\277\350\276\271\346\241\206.html" index 9c5a9f21..90166012 100644 --- "a/hand-notes/CSS/\350\231\232\347\272\277\350\276\271\346\241\206.html" +++ "b/hand-notes/CSS/\350\231\232\347\272\277\350\276\271\346\241\206.html" @@ -6,9 +6,9 @@ 虚线边框 | mx52jing - - - + + + @@ -26,8 +26,8 @@ background: linear-gradient(#F1DEC1, #F1DEC1) padding-box, repeating-linear-gradient(-45deg, #666666 0, #666666 6px, #FFFFFF 0, #FFFFFF 12px); }

效果预览

- - + + \ No newline at end of file diff --git "a/hand-notes/Canvas/\347\273\230\345\210\266\345\233\276\347\211\207\344\270\215\346\270\205\346\231\260\351\227\256\351\242\230.html" "b/hand-notes/Canvas/\347\273\230\345\210\266\345\233\276\347\211\207\344\270\215\346\270\205\346\231\260\351\227\256\351\242\230.html" index b9346edd..37afe67e 100644 --- "a/hand-notes/Canvas/\347\273\230\345\210\266\345\233\276\347\211\207\344\270\215\346\270\205\346\231\260\351\227\256\351\242\230.html" +++ "b/hand-notes/Canvas/\347\273\230\345\210\266\345\233\276\347\211\207\344\270\215\346\270\205\346\231\260\351\227\256\351\242\230.html" @@ -6,9 +6,9 @@ 绘制图片不清晰问题 | mx52jing - - - + + + @@ -41,8 +41,8 @@ const ctx = canvas.getContext('2d') ctx.scale(dpr, dpr)

查看效果

- - + + \ No newline at end of file diff --git "a/hand-notes/Charles/\344\277\256\346\224\271\350\257\267\346\261\202\346\210\226\345\223\215\345\272\224.html" "b/hand-notes/Charles/\344\277\256\346\224\271\350\257\267\346\261\202\346\210\226\345\223\215\345\272\224.html" index 72bc5a71..3fc53c8d 100644 --- "a/hand-notes/Charles/\344\277\256\346\224\271\350\257\267\346\261\202\346\210\226\345\223\215\345\272\224.html" +++ "b/hand-notes/Charles/\344\277\256\346\224\271\350\257\267\346\261\202\346\210\226\345\223\215\345\272\224.html" @@ -6,16 +6,16 @@ 修改请求或响应 | mx52jing - - - + + +
Skip to content
On this page

修改请求或响应

修改接口请求/响应数据

  • 打开Charles,请求接口后,选中要修改的接口,右键,点击Breakpoints

breakpoints

  • 打开CharlesProxy => Breakpoint Settings

breakpoint-settings

  • 打开后展示如下,这里可以看到添加的要拦截的接口,想拦截哪个接口就双击哪个

open-breaking-settings

  • 双击后打开窗口如下

edit-breakpoint

TIP

  • 请求的query中如果有随机字符串最好去掉,不然不同的参数就不会拦截,也可以把query整体删掉

  • 如果要修改请求的数据,勾选Request

  • 如果要修改接口响应数据,勾选Response

  • APP/网页重新请求接口,这里演示的是修改Response

  • 响应数据返回后会自动锁定到如下图,等待修改Response,点击Edit Response

install

  • 修改完毕后,点击Excute即可

修改响应文件内容

  • 点击CharlesTools => Map Local

map-local

  • 勾选Enable Map Local,添加拦截的文件路径

map-local-settings

  • 填写文件路径Path,如/a/b.txt,然后选择本地替换文件路径

  • 其他HostPort等想限制也可以填写

mapping-edit

- - + + \ No newline at end of file diff --git "a/hand-notes/Charles/\346\212\223\345\214\205\351\205\215\347\275\256.html" "b/hand-notes/Charles/\346\212\223\345\214\205\351\205\215\347\275\256.html" index 821ac506..d35750f6 100644 --- "a/hand-notes/Charles/\346\212\223\345\214\205\351\205\215\347\275\256.html" +++ "b/hand-notes/Charles/\346\212\223\345\214\205\351\205\215\347\275\256.html" @@ -6,16 +6,16 @@ Charles配置 | mx52jing - - - + + +
Skip to content
On this page

Charles配置

电脑端操作

安装证书

  • 打开Charles,选择Help => SSL Proxying => Install Charles Root Certificate,安装完成后,会启动钥匙串访问

install

查找证书

  • 钥匙串访问程序中,找到刚才的证书Charles Proxy CA

install

信任证书

  • 选中该证书,右键 => 显示简介 => 信任 => 在使用此证书时选项中选择始终信任

install

install

TIP

上述操作完成后,关闭窗口,此时会提示输入电脑密码,按照提示输入即可

设置支持HTTPS

HTTPS

HTTPS

HTTPS

查看IP

  • 使用Charles查看电脑IP

local-ip

local-ip

手机端设置

WARNING

保证手机和电脑连接同一个WIFI

IOS


进入WIFI设置

  • 进入设置 => 无线局域网,找到当前手机链接的wifi,点击后面的info icon进入wifi详情

wifi-info

设置代理IP

  • WIFI详情滑动到最下面,找到HTTP Proxy

http-proxy

  • 进入,选择手动(Manual),设置Serverport

    • Server就是刚才查看的本机IP

    • port一直都是8888

configure-proxy

下载证书

  • 打开Safari浏览器,访问:chls.pro/ssl,此时电脑上会有连接提示,点击allow允许,然后在手机端下载证书

  • 电脑端展示

connect-from

  • 手机端下载确认

download

信任证书

  • 证书下载完成后,点击设置 => 通用 => VPN和设备管理,找到刚才的证书,并下载

device-manage

  • 点击下载

install-profile

  • 完成上述步骤就可以进行抓包了

安卓

  • 设置手机wifi代理和IOS的操作基本一样,设置完wifi代理后进行下一步

  • 本人使用的小米6自带的浏览器是下载不下来证书的,最后下载了Edge浏览器,访问:chls.pro/ssl,此时电脑上会有连接提示,点击allow允许,然后在手机端下载证书并且安装

  • 然后就可以使用了

- - + + \ No newline at end of file diff --git "a/hand-notes/Chart/AntVF2/\344\275\277\347\224\250\345\260\217\350\256\260.html" "b/hand-notes/Chart/AntVF2/\344\275\277\347\224\250\345\260\217\350\256\260.html" index 2c6fa589..a431e500 100644 --- "a/hand-notes/Chart/AntVF2/\344\275\277\347\224\250\345\260\217\350\256\260.html" +++ "b/hand-notes/Chart/AntVF2/\344\275\277\347\224\250\345\260\217\350\256\260.html" @@ -6,9 +6,9 @@ AntV F2 使用小记 | mx52jing - - - + + + @@ -65,8 +65,8 @@ marginRatio?: number; }

TIP

marginRatio属性试着设置了,但是没起到效果,设置各个柱子的间隔可以使用F2.Global.widthRatio.column = 1来设置,参考链接在这里

F2.Global.widthRatio.column = 1设置后效果如下: 间隔为1

- - + + \ No newline at end of file diff --git "a/hand-notes/JavaScript/\345\210\244\346\226\255\345\255\227\346\257\215\345\244\247\345\260\217\345\206\231.html" "b/hand-notes/JavaScript/\345\210\244\346\226\255\345\255\227\346\257\215\345\244\247\345\260\217\345\206\231.html" index 9b2ce18f..269fb641 100644 --- "a/hand-notes/JavaScript/\345\210\244\346\226\255\345\255\227\346\257\215\345\244\247\345\260\217\345\206\231.html" +++ "b/hand-notes/JavaScript/\345\210\244\346\226\255\345\255\227\346\257\215\345\244\247\345\260\217\345\206\231.html" @@ -6,9 +6,9 @@ 判断字母大小写 | mx52jing - - - + + + @@ -22,8 +22,8 @@ return ascii >= 97 && ascii <= 122; }

MDN上可查看charCodeAt方法的具体描述

- - + + \ No newline at end of file diff --git "a/hand-notes/JavaScript/\346\216\247\345\210\266\345\271\266\345\217\221\346\211\247\350\241\214\345\207\275\346\225\260.html" "b/hand-notes/JavaScript/\346\216\247\345\210\266\345\271\266\345\217\221\346\211\247\350\241\214\345\207\275\346\225\260.html" index 0ad2ba44..7c67a9cd 100644 --- "a/hand-notes/JavaScript/\346\216\247\345\210\266\345\271\266\345\217\221\346\211\247\350\241\214\345\207\275\346\225\260.html" +++ "b/hand-notes/JavaScript/\346\216\247\345\210\266\345\271\266\345\217\221\346\211\247\350\241\214\345\207\275\346\225\260.html" @@ -6,9 +6,9 @@ 控制并发执行函数 | mx52jing - - - + + + @@ -64,8 +64,8 @@ }) }
- - + + \ No newline at end of file diff --git "a/hand-notes/JavaScript/\346\225\260\345\255\227\345\233\233\350\210\215\344\272\224\345\205\245.html" "b/hand-notes/JavaScript/\346\225\260\345\255\227\345\233\233\350\210\215\344\272\224\345\205\245.html" index 93439d3b..53b4ec43 100644 --- "a/hand-notes/JavaScript/\346\225\260\345\255\227\345\233\233\350\210\215\344\272\224\345\205\245.html" +++ "b/hand-notes/JavaScript/\346\225\260\345\255\227\345\233\233\350\210\215\344\272\224\345\205\245.html" @@ -6,9 +6,9 @@ 数字四舍五入 | mx52jing - - - + + + @@ -20,8 +20,8 @@ return Math.round(+number + 'e' + precision) / Math.pow(10, precision); }
- - + + \ No newline at end of file diff --git "a/hand-notes/JavaScript/\346\240\271\346\215\256\347\224\237\346\227\245\350\256\241\347\256\227\345\271\264\351\276\204.html" "b/hand-notes/JavaScript/\346\240\271\346\215\256\347\224\237\346\227\245\350\256\241\347\256\227\345\271\264\351\276\204.html" index aeeb4cff..1f67458c 100644 --- "a/hand-notes/JavaScript/\346\240\271\346\215\256\347\224\237\346\227\245\350\256\241\347\256\227\345\271\264\351\276\204.html" +++ "b/hand-notes/JavaScript/\346\240\271\346\215\256\347\224\237\346\227\245\350\256\241\347\256\227\345\271\264\351\276\204.html" @@ -6,9 +6,9 @@ 根据生日计算年龄 | mx52jing - - - + + + @@ -46,8 +46,8 @@ return monthDiff < 0 ? (yearDiff - 1) : yearDiff; }
- - + + \ No newline at end of file diff --git "a/hand-notes/JavaScript/\351\232\217\346\234\272\346\225\260\347\232\204\345\272\224\347\224\250.html" "b/hand-notes/JavaScript/\351\232\217\346\234\272\346\225\260\347\232\204\345\272\224\347\224\250.html" index 6d2558f3..ad1b4384 100644 --- "a/hand-notes/JavaScript/\351\232\217\346\234\272\346\225\260\347\232\204\345\272\224\347\224\250.html" +++ "b/hand-notes/JavaScript/\351\232\217\346\234\272\346\225\260\347\232\204\345\272\224\347\224\250.html" @@ -6,9 +6,9 @@ 随机数的应用 | mx52jing - - - + + + @@ -39,8 +39,8 @@ return `rgb(${generateRandomNumber([55, 255], true)}, ${generateRandomNumber([55, 255], true)}, ${generateRandomNumber([55, 255], true)})` }
- - + + \ No newline at end of file diff --git a/hand-notes/Linux/practice-method.html b/hand-notes/Linux/practice-method.html index 7a845390..e38ffc32 100644 --- a/hand-notes/Linux/practice-method.html +++ b/hand-notes/Linux/practice-method.html @@ -6,9 +6,9 @@ Bash实用方法 | mx52jing - - - + + + @@ -93,8 +93,8 @@ npm ERR! /Users/xxx/.npm/_logs/2023-03-10T15_19_28_286Z-debug-0.log

获取当前机器IP

shell
ifconfig | grep inet | grep -v inet6 | grep -v 127.0.0.1 | awk '{print $2}'
 
- - + + \ No newline at end of file diff --git "a/hand-notes/Linux/\345\233\276\347\211\207\345\216\213\347\274\251\345\222\214\346\240\274\345\274\217\350\275\254\346\215\242.html" "b/hand-notes/Linux/\345\233\276\347\211\207\345\216\213\347\274\251\345\222\214\346\240\274\345\274\217\350\275\254\346\215\242.html" index 7c9fdb54..98d77b24 100644 --- "a/hand-notes/Linux/\345\233\276\347\211\207\345\216\213\347\274\251\345\222\214\346\240\274\345\274\217\350\275\254\346\215\242.html" +++ "b/hand-notes/Linux/\345\233\276\347\211\207\345\216\213\347\274\251\345\222\214\346\240\274\345\274\217\350\275\254\346\215\242.html" @@ -6,9 +6,9 @@ Bash 脚本记录 | mx52jing - - - + + + @@ -108,8 +108,8 @@ IFS=${SAVEIFS} wait
- - + + \ No newline at end of file diff --git "a/hand-notes/Linux/\346\226\207\344\273\266\345\216\213\347\274\251.html" "b/hand-notes/Linux/\346\226\207\344\273\266\345\216\213\347\274\251.html" index 9c889956..d91469e9 100644 --- "a/hand-notes/Linux/\346\226\207\344\273\266\345\216\213\347\274\251.html" +++ "b/hand-notes/Linux/\346\226\207\344\273\266\345\216\213\347\274\251.html" @@ -6,9 +6,9 @@ 文件压缩 | mx52jing - - - + + + @@ -65,8 +65,8 @@ unrar l xxx.rar // 列出xxx.rar内的文件结构 unrar lb xxx.rar // 列出xxx.rar内的文件结构
- - + + \ No newline at end of file diff --git "a/hand-notes/Linux/\346\235\203\351\231\220\347\233\270\345\205\263.html" "b/hand-notes/Linux/\346\235\203\351\231\220\347\233\270\345\205\263.html" index 4818bbfa..175abb88 100644 --- "a/hand-notes/Linux/\346\235\203\351\231\220\347\233\270\345\205\263.html" +++ "b/hand-notes/Linux/\346\235\203\351\231\220\347\233\270\345\205\263.html" @@ -6,9 +6,9 @@ 权限相关 | mx52jing - - - + + + @@ -24,8 +24,8 @@

chown

改变文件拥有者

shell
chown 用户名 文件名
 

chgrp

改变文件所属群组

shell
chgrp 组名 文件名
 
- - + + \ No newline at end of file diff --git "a/hand-notes/Linux/\347\224\250\346\210\267\346\223\215\344\275\234\347\233\270\345\205\263.html" "b/hand-notes/Linux/\347\224\250\346\210\267\346\223\215\344\275\234\347\233\270\345\205\263.html" index 5b5310e5..33d7f4ee 100644 --- "a/hand-notes/Linux/\347\224\250\346\210\267\346\223\215\344\275\234\347\233\270\345\205\263.html" +++ "b/hand-notes/Linux/\347\224\250\346\210\267\346\223\215\344\275\234\347\233\270\345\205\263.html" @@ -6,9 +6,9 @@ 用户操作相关 | mx52jing - - - + + + @@ -19,8 +19,8 @@

给已创建的用户user设置密码

shell
passwd username
 

为用户添加权限

shell
gpasswd -h 查看操作
 
  • -a:添加用户到组

  • -d:从组删除用户

- - + + \ No newline at end of file diff --git "a/hand-notes/Linux/\350\256\241\347\256\227\345\215\207\347\272\247\347\211\210\346\234\254\345\217\267.html" "b/hand-notes/Linux/\350\256\241\347\256\227\345\215\207\347\272\247\347\211\210\346\234\254\345\217\267.html" index aa08f803..b9f3fca1 100644 --- "a/hand-notes/Linux/\350\256\241\347\256\227\345\215\207\347\272\247\347\211\210\346\234\254\345\217\267.html" +++ "b/hand-notes/Linux/\350\256\241\347\256\227\345\215\207\347\272\247\347\211\210\346\234\254\345\217\267.html" @@ -6,9 +6,9 @@ 计算升级版本号 | mx52jing - - - + + + @@ -69,8 +69,8 @@ echo "升级后的版本号为【${selected_version}"

shell语句备注

shell
IFS='.' read -ra version_parts <<< "$current_version"
 
  • 首先,将IFS设置为.,这意味着Shell将使用.作为字段分隔符,用于将字符串分割成多个部分;

  • 然后,使用read命令结合<<<操作符,将字符串"$current_version"作为输入传递给read命令;

  • read命令读取输入,并将其分割为多个字段,并将每个字段存储在一个数组中

    • -a选项告诉read命令将字段存储在数组

    • -r选项告诉它不要对反斜杠进行转义

- - + + \ No newline at end of file diff --git a/hand-notes/Mac/frequently-commands.html b/hand-notes/Mac/frequently-commands.html index a6d84cba..18b73deb 100644 --- a/hand-notes/Mac/frequently-commands.html +++ b/hand-notes/Mac/frequently-commands.html @@ -6,9 +6,9 @@ Mac 使用小记 | mx52jing - - - + + + @@ -51,8 +51,8 @@

如果还有第二个Warning的问题,再执行一次

shell
Git -C $(brew --repo homebrew/core) checkout master
 

Mac双开微信

shell
open -n /Applications/WeChat.app/Contents/MacOS/WeChat
 
- - + + \ No newline at end of file diff --git a/hand-notes/Mac/init.html b/hand-notes/Mac/init.html index c9615375..e5ee48b6 100644 --- a/hand-notes/Mac/init.html +++ b/hand-notes/Mac/init.html @@ -6,9 +6,9 @@ Mac环境初始化 | mx52jing - - - + + + @@ -28,8 +28,8 @@
  • 管理JDK版本
shell
jenv versions
 jenv global 17.0.3
 

配置参考

其他软件

软件名称说明
istat-menus监控神器,展示电脑CPU占用,内存占用等
artpip每日自动更换壁纸
wpsoffice-cnWPS
logitech-options罗技鼠标用户必装,否则无法开启高dpi
asciiquarium命令行水族馆
iinamac视频播放神器
fliqlo锁屏画面展示当前时间,地址

其他收藏/参考

- - + + \ No newline at end of file diff --git "a/hand-notes/Mac/\345\277\253\346\215\267\350\277\220\350\241\214\350\207\252\345\256\232\344\271\211shell\350\204\232\346\234\254.html" "b/hand-notes/Mac/\345\277\253\346\215\267\350\277\220\350\241\214\350\207\252\345\256\232\344\271\211shell\350\204\232\346\234\254.html" index b643ae00..675865bd 100644 --- "a/hand-notes/Mac/\345\277\253\346\215\267\350\277\220\350\241\214\350\207\252\345\256\232\344\271\211shell\350\204\232\346\234\254.html" +++ "b/hand-notes/Mac/\345\277\253\346\215\267\350\277\220\350\241\214\350\207\252\345\256\232\344\271\211shell\350\204\232\346\234\254.html" @@ -6,9 +6,9 @@ 快捷使用自定义shell脚本 | mx52jing - - - + + + @@ -25,8 +25,8 @@ Downloads reinforcing.sh I am reinforcing.sh
- - + + \ No newline at end of file diff --git a/hand-notes/React/ProComponents/ProTable.html b/hand-notes/React/ProComponents/ProTable.html index 6d827589..31963192 100644 --- a/hand-notes/React/ProComponents/ProTable.html +++ b/hand-notes/React/ProComponents/ProTable.html @@ -6,9 +6,9 @@ ProTable | mx52jing - - - + + + @@ -75,8 +75,8 @@ }, ]
- - + + \ No newline at end of file diff --git "a/hand-notes/Sass/sass\345\256\236\347\216\260\346\230\237\347\251\272\346\225\210\346\236\234.html" "b/hand-notes/Sass/sass\345\256\236\347\216\260\346\230\237\347\251\272\346\225\210\346\236\234.html" index 637d031f..4afc25be 100644 --- "a/hand-notes/Sass/sass\345\256\236\347\216\260\346\230\237\347\251\272\346\225\210\346\236\234.html" +++ "b/hand-notes/Sass/sass\345\256\236\347\216\260\346\230\237\347\251\272\346\225\210\346\236\234.html" @@ -6,9 +6,9 @@ sass实现星空效果 | mx52jing - - - + + + @@ -100,8 +100,8 @@ } }

其他

效果预览

- - + + \ No newline at end of file diff --git "a/hand-notes/Sass/sass\345\260\217\346\212\200\345\267\247.html" "b/hand-notes/Sass/sass\345\260\217\346\212\200\345\267\247.html" index b252be8a..7b1eb7a5 100644 --- "a/hand-notes/Sass/sass\345\260\217\346\212\200\345\267\247.html" +++ "b/hand-notes/Sass/sass\345\260\217\346\212\200\345\267\247.html" @@ -6,9 +6,9 @@ sass小技巧 | mx52jing - - - + + + @@ -48,8 +48,8 @@ @debug $d; // Debug: 900px //@debug $e;
- - + + \ No newline at end of file diff --git "a/hand-notes/Sass/\345\260\217\347\220\203\344\272\244\344\272\222loading.html" "b/hand-notes/Sass/\345\260\217\347\220\203\344\272\244\344\272\222loading.html" index 5be913a6..c6c13180 100644 --- "a/hand-notes/Sass/\345\260\217\347\220\203\344\272\244\344\272\222loading.html" +++ "b/hand-notes/Sass/\345\260\217\347\220\203\344\272\244\344\272\222loading.html" @@ -6,9 +6,9 @@ 小球交互loading | mx52jing - - - + + + @@ -153,8 +153,8 @@ </body> </html>

预览和源码

- - + + \ No newline at end of file diff --git "a/hand-notes/Sass/\351\200\232\350\277\207mixin\347\256\200\345\214\226\345\223\215\345\272\224\345\274\217\344\273\243\347\240\201.html" "b/hand-notes/Sass/\351\200\232\350\277\207mixin\347\256\200\345\214\226\345\223\215\345\272\224\345\274\217\344\273\243\347\240\201.html" index 3bca33cd..a025309c 100644 --- "a/hand-notes/Sass/\351\200\232\350\277\207mixin\347\256\200\345\214\226\345\223\215\345\272\224\345\274\217\344\273\243\347\240\201.html" +++ "b/hand-notes/Sass/\351\200\232\350\277\207mixin\347\256\200\345\214\226\345\223\215\345\272\224\345\274\217\344\273\243\347\240\201.html" @@ -6,9 +6,9 @@ 通过mixin简化响应式代码 | mx52jing - - - + + + @@ -170,8 +170,8 @@ } }

这样想修改对应尺寸或者样式,就很方便了

其他

查看代码

效果预览

- - + + \ No newline at end of file diff --git a/hashmap.json b/hashmap.json index 9c41df7b..334e9a84 100644 --- a/hashmap.json +++ b/hashmap.json @@ -1 +1 @@ -{"algorithm_leetcode刷题_144-94-145-遍历二叉树.md":"e507babe","hand-notes_javascript_控制并发执行函数.md":"c1bee19d","hand-notes_javascript_数字四舍五入.md":"eb2653d9","knowledge-deposition_golang_crawler_http请求方法.md":"b4518c67","knowledge-deposition_golang_gin_hello-world.md":"f785906c","favorites_git_index.md":"ecef71c4","knowledge-deposition_golang_gin_支持跨域.md":"a6da96aa","favorites_linux_index.md":"392dcbff","knowledge-deposition_ssh_ssh-base.md":"26c4a907","hand-notes_css_css实现突出不同颜色的圆角.md":"060cbe39","algorithm_leetcode刷题_1-两数之和.md":"1075836c","hand-notes_css_css实现类似微信头像效果.md":"256cc0b5","algorithm_leetcode刷题_1047-删除字符串中的所有相邻重复项.md":"0e7bf723","hand-notes_css_css模拟数字loading.md":"928c88c1","algorithm_leetcode刷题_136-只出现一次的数字.md":"3eab0a7d","algorithm_leetcode刷题_14-最长公共前缀.md":"1607ff4f","hand-notes_css_图片加载出错样式设置.md":"8af14403","hand-notes_css_实现高度过渡.md":"66bf8c45","hand-notes_css_css计数器-counter.md":"19b4b21f","algorithm_leetcode刷题_15-三数之和.md":"01e6709d","hand-notes_css_虚线边框.md":"b4a171ef","algorithm_leetcode刷题_151-反转字符串中的单词.md":"a39dca42","hand-notes_charles_修改请求或响应.md":"024dd161","algorithm_leetcode刷题_17-电话号码的字母组合.md":"3d544b67","hand-notes_canvas_绘制图片不清晰问题.md":"2376cc2d","hand-notes_charles_抓包配置.md":"de550059","algorithm_leetcode刷题_18-四数之和.md":"9044437a","hand-notes_chart_antvf2_使用小记.md":"bdd847dd","algorithm_leetcode刷题_19-删除链表的倒数第n个结点.md":"897ec378","algorithm_leetcode刷题_150-逆波兰表达式求值.md":"a354b8ea","algorithm_leetcode刷题_20-有效的括号.md":"8aeefd8f","hand-notes_javascript_判断字母大小写.md":"4524662c","algorithm_leetcode刷题_202-快乐数.md":"efdd8af6","algorithm_leetcode刷题_203-移除链表元素.md":"90f233b5","algorithm_leetcode刷题_206-反转链表.md":"e71ab261","algorithm_leetcode刷题_209-长度最小的子数组.md":"93baba0e","algorithm_leetcode刷题_24-两两交换链表中的节点.md":"b4990bc4","hand-notes_linux_practice-method.md":"33f8d1b8","hand-notes_linux_图片压缩和格式转换.md":"7713eade","algorithm_leetcode刷题_26-删除有序数组中的重复项.md":"d980da74","algorithm_leetcode刷题_242-有效的字母异位词.md":"d4ccd114","hand-notes_linux_权限相关.md":"3a45c64d","hand-notes_linux_文件压缩.md":"a2c455af","algorithm_leetcode刷题_28-找出字符串中第一个匹配项的下标.md":"72572c74","algorithm_leetcode刷题_27-移除元素.md":"6d23ade8","hand-notes_linux_用户操作相关.md":"e102ddb9","algorithm_leetcode刷题_344-反转字符串.md":"d2e9aaea","algorithm_leetcode刷题_3-无重复字符的最长子串.md":"5a87c5d7","algorithm_leetcode刷题_349-两个数组的交集.md":"63b22dc9","hand-notes_linux_计算升级版本号.md":"9d69f23b","algorithm_leetcode刷题_35-搜索插入位置.md":"7d66d92e","hand-notes_mac_快捷运行自定义shell脚本.md":"4c7f4146","hand-notes_mac_init.md":"4cdb4ee1","algorithm_leetcode刷题_485-最大连续1的个数.md":"40b39e33","hand-notes_sass_sass小技巧.md":"aff9b5f1","hand-notes_mac_frequently-commands.md":"95a50733","algorithm_leetcode刷题_520-检测大写字母.md":"951a3bce","hand-notes_sass_小球交互loading.md":"d8228218","algorithm_leetcode刷题_541-反转字符串ii.md":"c9a8f2ae","algorithm_leetcode刷题_414-第三大的数.md":"c010270a","hand-notes_sass_sass实现星空效果.md":"6c71ae69","algorithm_leetcode刷题_58-最后一个单词的长度.md":"66bb4a2c","hand-notes_sass_通过mixin简化响应式代码.md":"64db7d7a","knowledge-deposition_docker_dockerfile.md":"939bce8b","index.md":"f96a796f","algorithm_leetcode刷题_628-三个数的最大乘积.md":"189555ed","algorithm_leetcode刷题_454-四数相加ii.md":"76199da8","algorithm_leetcode刷题_977-有序数组的平方.md":"8f3b8803","algorithm_leetcode刷题_9-回文数.md":"4a097db8","favorites_browser_index.md":"b1f00a99","favorites_docker_index.md":"a5eb5870","favorites_golang_index.md":"349984a5","knowledge-deposition_golang_gin_中间件.md":"cc2d04cb","knowledge-deposition_golang_gin_集成swagger.md":"5336a9c6","knowledge-deposition_golang_gin_请求参数.md":"5be26865","knowledge-deposition_golang_gin_路由分组.md":"0731e2d5","knowledge-deposition_golang_gorm_advancedquery.md":"c7051263","knowledge-deposition_golang_gorm_create.md":"1e32e024","knowledge-deposition_golang_gorm_delete.md":"3870ed2f","favorites_mac_index.md":"7a6f29b7","knowledge-deposition_golang_gorm_update.md":"52550cdf","knowledge-deposition_golang_gorm_事务.md":"9933dce2","knowledge-deposition_golang_gorm_query.md":"d817b096","knowledge-deposition_golang_gorm_关联之一对一.md":"617e50e7","knowledge-deposition_golang_gorm_关联之多对多.md":"34fdda09","knowledge-deposition_golang_gorm_模型定义.md":"68bf6c3d","knowledge-deposition_golang_gorm_关联之一对多.md":"bfab2338","knowledge-deposition_golang_jwt_jwt.md":"2fbc5e68","knowledge-deposition_golang_logger_logrus_hook.md":"99b69a20","knowledge-deposition_golang_logger_logrus_基础用法.md":"80bd7d94","knowledge-deposition_golang_gorm_自定义数据类型.md":"be58d009","knowledge-deposition_golang_gorm_连接数据库.md":"e4b93656","favorites_nginx_index.md":"0d0ac958","favorites_problemsolving_index.md":"207eebb7","favorites_ui设计灵感_index.md":"e1b0abe1","favorites_其他_index.md":"76a64e72","favorites_typescript_index.md":"a5d46b22","knowledge-deposition_golang_logger_logrus_日志分割.md":"7ac92ceb","favorites_算法_index.md":"d24390a6","favorites_vue_index.md":"b7b9c892","favorites_mobile_index.md":"7d3acc99","favorites_react_index.md":"aebf8954","knowledge-deposition_golang_logger_zap_zap使用.md":"ba025bb4","knowledge-deposition_golang_gin_bind绑定器.md":"1284249d","knowledge-deposition_golang_加密_aes加密.md":"da682d72","knowledge-deposition_docker_docker基础知识.md":"411e97ab","knowledge-deposition_rabbitmq_基本概念和安装启动.md":"71f4493e","knowledge-deposition_golang_基础知识_文件操作_文件复制.md":"b1187562","knowledge-deposition_golang_gin_响应数据.md":"81a3d1b3","knowledge-deposition_golang_基础知识_context.md":"7de14551","algorithm_leetcode刷题_707-设计链表.md":"482bdc90","knowledge-deposition_前端工程化_vite_vite插件机制.md":"76e5d746","knowledge-deposition_mysql_基础知识.md":"8d0d2210","knowledge-deposition_golang_基础知识_指针.md":"1d05b090","hand-notes_react_procomponents_protable.md":"55cd81c1","knowledge-deposition_golang_基础知识_函数.md":"f9923c5b","knowledge-deposition_rabbitmq_工作队列.md":"3bc304af","knowledge-deposition_前端工程化_vite_区分不同环境.md":"1e4d6e36","knowledge-deposition_golang_基础知识_通道channel.md":"19854e46","knowledge-deposition_golang_基础知识_test.md":"1460987b","knowledge-deposition_golang_基础知识_fmt输出含义.md":"dd54b6ea","favorites_canvas_index.md":"46427179","knowledge-deposition_golang_基础知识_time包.md":"4e4b16f6","knowledge-deposition_golang_基础知识_json序列化.md":"50c9b73c","knowledge-deposition_linux_bash基础知识.md":"82919afa","knowledge-deposition_mysql_sql.md":"2e092928","hand-notes_css_css实现文字渐变.md":"64d22e67","knowledge-deposition_mysql_函数.md":"6a699cc5","knowledge-deposition_前端工程化_vite_处理静态资源.md":"3a391948","knowledge-deposition_golang_基础知识_url包.md":"52febc22","knowledge-deposition_golang_基础知识_网络_rpc.md":"02632663","favorites_books_index.md":"2ca1ac14","favorites_css_index.md":"512ce1d4","knowledge-deposition_golang_基础知识_流程控制.md":"56ff6296","knowledge-deposition_golang_gin_请求头和响应头.md":"474f93f6","knowledge-deposition_mysql_分组和子查询.md":"ddb606e0","knowledge-deposition_golang_基础知识_网络_http.md":"72c76449","knowledge-deposition_nacos_基本概念和安装启动.md":"b38a534c","knowledge-deposition_golang_基础知识_select.md":"f521220c","knowledge-deposition_golang_基础知识_文件操作_并发下载远程文件.md":"b33920dc","algorithm_leetcode刷题_lcr-018-验证回文串.md":"b5f7abf4","knowledge-deposition_golang_基础知识_strings包.md":"c94073bc","knowledge-deposition_前端工程化_vite_依赖预构建.md":"e11f1e2c","knowledge-deposition_golang_基础知识_网络_tcp.md":"bb131091","knowledge-deposition_前端工程化_vite_处理样式.md":"a4b43b40","knowledge-deposition_golang_基础知识_文件操作_读文件.md":"adf33587","hand-notes_javascript_根据生日计算年龄.md":"2c943e7e","hand-notes_javascript_随机数的应用.md":"b63afbbd","knowledge-deposition_golang_基础知识_协程安全.md":"a1450797","knowledge-deposition_golang_基础知识_文件操作_index.md":"6ceea063","knowledge-deposition_golang_基础知识_环境搭建.md":"434b2f33","knowledge-deposition_前端工程化_vite_初体验.md":"6d23449b","knowledge-deposition_前端工程化_vite_rollup的插件机制.md":"cf92cfb6","knowledge-deposition_mysql_表连接.md":"27337605","favorites_javassript_index.md":"78b014a2","knowledge-deposition_golang_基础知识_基础数据类型.md":"f8e101d3","knowledge-deposition_前端工程化_babel_babel基础.md":"452a4423","favorites_ide_index.md":"5f54bd13","knowledge-deposition_golang_基础知识_结构体.md":"589c4277","knowledge-deposition_nacos_操作动态配置文件.md":"32b4899c","knowledge-deposition_golang_基础知识_数组、切片、map.md":"7cd93973","knowledge-deposition_mysql_数据操作和查询.md":"d8f411bc","knowledge-deposition_golang_基础知识_接口.md":"d4683051","knowledge-deposition_golang_基础知识_协程.md":"67b11186","knowledge-deposition_golang_基础知识_变量常量.md":"bbbc63c3","knowledge-deposition_golang_基础知识_文件操作_读取配置文件.md":"a630c503","knowledge-deposition_golang_gin_上传和下载文件.md":"74431ba5","knowledge-deposition_golang_基础知识_文件操作_目录操作.md":"fb7153be","knowledge-deposition_golang_基础知识_文件操作_写文件.md":"39d043f9","knowledge-deposition_golang_加密_rsa加密.md":"2fd5c0ee","knowledge-deposition_前端工程化_vite_esbuild相关.md":"3df8e130"} +{"algorithm_leetcode刷题_136-只出现一次的数字.md":"e62490a4","algorithm_leetcode刷题_1-两数之和.md":"22843d62","hand-notes_react_procomponents_protable.md":"8f0c5ce2","algorithm_leetcode刷题_15-三数之和.md":"06c460e7","hand-notes_sass_sass实现星空效果.md":"9b28dff8","hand-notes_sass_sass小技巧.md":"ac4aadc7","algorithm_leetcode刷题_18-四数之和.md":"b359d493","algorithm_leetcode刷题_19-删除链表的倒数第n个结点.md":"d0455de0","algorithm_leetcode刷题_202-快乐数.md":"35f4fce3","favorites_linux_index.md":"9f5adffa","algorithm_leetcode刷题_203-移除链表元素.md":"8c0d5e81","algorithm_leetcode刷题_206-反转链表.md":"8ca2938b","favorites_mac_index.md":"c2173cbc","algorithm_leetcode刷题_24-两两交换链表中的节点.md":"f5f907a1","algorithm_leetcode刷题_242-有效的字母异位词.md":"16723461","algorithm_leetcode刷题_209-长度最小的子数组.md":"9138822d","algorithm_leetcode刷题_485-最大连续1的个数.md":"c22ca3e0","hand-notes_javascript_判断字母大小写.md":"2a4e67f9","algorithm_leetcode刷题_9-回文数.md":"c6f185ef","algorithm_leetcode刷题_150-逆波兰表达式求值.md":"613aff08","favorites_vue_index.md":"5c09f787","favorites_browser_index.md":"49af41a6","hand-notes_canvas_绘制图片不清晰问题.md":"4042af7f","hand-notes_linux_用户操作相关.md":"dd43f7a7","favorites_problemsolving_index.md":"31d052cf","favorites_ide_index.md":"544087e7","algorithm_leetcode刷题_520-检测大写字母.md":"9f452f4f","algorithm_leetcode刷题_977-有序数组的平方.md":"dcf73009","favorites_docker_index.md":"26697292","favorites_git_index.md":"1da721df","algorithm_leetcode刷题_707-设计链表.md":"31dd9a73","favorites_books_index.md":"a8f285fc","hand-notes_chart_antvf2_使用小记.md":"c0d13818","favorites_typescript_index.md":"c3245407","algorithm_leetcode刷题_28-找出字符串中第一个匹配项的下标.md":"3e05948e","hand-notes_css_实现高度过渡.md":"eae928a7","algorithm_leetcode刷题_14-最长公共前缀.md":"debf1a99","favorites_golang_index.md":"9b49e96d","favorites_css_index.md":"435c75d9","favorites_mobile_index.md":"2efd4270","favorites_ui设计灵感_index.md":"54b71597","hand-notes_linux_权限相关.md":"ed6eecd5","hand-notes_css_css实现突出不同颜色的圆角.md":"cfbe08e2","favorites_其他_index.md":"bf268dfb","algorithm_leetcode刷题_lcr-018-验证回文串.md":"ddcfa306","hand-notes_linux_文件压缩.md":"6a1427b0","favorites_算法_index.md":"c7607dd6","favorites_nginx_index.md":"3291d3a9","favorites_react_index.md":"b931891e","hand-notes_linux_图片压缩和格式转换.md":"7f7dde48","hand-notes_css_css实现文字渐变.md":"641219fe","algorithm_leetcode刷题_3-无重复字符的最长子串.md":"108630a8","hand-notes_css_css实现类似微信头像效果.md":"dcf074cc","favorites_canvas_index.md":"6af808eb","hand-notes_javascript_数字四舍五入.md":"ba45c7b5","hand-notes_sass_小球交互loading.md":"e8afd7b0","knowledge-deposition_golang_gin_hello-world.md":"636eb2cc","knowledge-deposition_前端工程化_vite_处理静态资源.md":"6aa4348d","index.md":"aae28096","knowledge-deposition_docker_dockerfile.md":"acfd4f8d","knowledge-deposition_golang_gin_支持跨域.md":"69953c2c","knowledge-deposition_docker_docker基础知识.md":"3c35ae53","knowledge-deposition_golang_gin_响应数据.md":"52608b1f","algorithm_leetcode刷题_151-反转字符串中的单词.md":"884bfa8f","favorites_javassript_index.md":"4b194472","hand-notes_linux_计算升级版本号.md":"9aeefd68","hand-notes_mac_快捷运行自定义shell脚本.md":"f00eea09","hand-notes_mac_init.md":"47271201","knowledge-deposition_golang_gin_请求头和响应头.md":"1a6c808d","knowledge-deposition_golang_gin_路由分组.md":"22bde1bb","knowledge-deposition_golang_gin_集成swagger.md":"286e03b5","knowledge-deposition_golang_gorm_advancedquery.md":"25247741","knowledge-deposition_golang_gorm_create.md":"32150fe7","knowledge-deposition_golang_gorm_update.md":"9fe613fe","knowledge-deposition_golang_gorm_delete.md":"70f875f7","knowledge-deposition_golang_gorm_事务.md":"8a6eb6be","knowledge-deposition_golang_gorm_关联之一对一.md":"d30fe49d","knowledge-deposition_golang_gorm_关联之一对多.md":"4d4b119c","knowledge-deposition_golang_gorm_关联之多对多.md":"9a5cad71","knowledge-deposition_golang_gorm_query.md":"e7919829","knowledge-deposition_golang_gorm_连接数据库.md":"f195036b","knowledge-deposition_golang_加密_aes加密.md":"bfac1ae4","knowledge-deposition_golang_加密_rsa加密.md":"c9b6bd36","knowledge-deposition_golang_基础知识_context.md":"f33dae97","knowledge-deposition_golang_基础知识_select.md":"2a462f49","knowledge-deposition_golang_基础知识_fmt输出含义.md":"fe596fc2","knowledge-deposition_golang_基础知识_json序列化.md":"dfd6a49a","knowledge-deposition_golang_基础知识_strings包.md":"377dc095","knowledge-deposition_golang_基础知识_url包.md":"4e0ba066","knowledge-deposition_golang_基础知识_函数.md":"d84c6cd1","knowledge-deposition_golang_基础知识_协程.md":"e61d6f2f","knowledge-deposition_golang_基础知识_test.md":"bfc61dd9","knowledge-deposition_golang_基础知识_协程安全.md":"9597e397","knowledge-deposition_golang_基础知识_变量常量.md":"e02ff635","knowledge-deposition_golang_基础知识_接口.md":"10af3955","knowledge-deposition_golang_基础知识_time包.md":"858d3479","knowledge-deposition_golang_基础知识_文件操作_并发下载远程文件.md":"17c7d940","knowledge-deposition_golang_基础知识_文件操作_index.md":"e49ea555","knowledge-deposition_golang_基础知识_环境搭建.md":"ee9688ce","knowledge-deposition_golang_基础知识_文件操作_读文件.md":"bfa7e4a3","knowledge-deposition_golang_基础知识_结构体.md":"9cf50ee3","knowledge-deposition_golang_基础知识_流程控制.md":"e768e476","knowledge-deposition_golang_基础知识_网络_rpc.md":"7b7cae6f","knowledge-deposition_golang_基础知识_网络_http.md":"c26b4f8c","knowledge-deposition_golang_基础知识_通道channel.md":"37ecf790","knowledge-deposition_linux_bash基础知识.md":"b1e37b79","algorithm_leetcode刷题_1047-删除字符串中的所有相邻重复项.md":"de6f20ac","knowledge-deposition_mysql_sql.md":"f63d9a44","knowledge-deposition_golang_基础知识_网络_tcp.md":"eb9cae40","knowledge-deposition_mysql_分组和子查询.md":"9647f2a4","knowledge-deposition_mysql_函数.md":"912200a8","knowledge-deposition_mysql_基础知识.md":"a7ff1eba","knowledge-deposition_mysql_数据操作和查询.md":"b8266413","knowledge-deposition_mysql_表连接.md":"852b1cc4","knowledge-deposition_nacos_基本概念和安装启动.md":"37394e88","algorithm_leetcode刷题_27-移除元素.md":"9db196ba","knowledge-deposition_rabbitmq_工作队列.md":"1e35fdac","knowledge-deposition_rabbitmq_基本概念和安装启动.md":"2ecff914","knowledge-deposition_ssh_ssh-base.md":"6472c2dd","hand-notes_javascript_随机数的应用.md":"a6c868ad","algorithm_leetcode刷题_454-四数相加ii.md":"f66e8216","algorithm_leetcode刷题_144-94-145-遍历二叉树.md":"3c849491","hand-notes_javascript_控制并发执行函数.md":"38064388","algorithm_leetcode刷题_628-三个数的最大乘积.md":"d03fb6fb","knowledge-deposition_前端工程化_vite_处理样式.md":"2997b7e6","algorithm_leetcode刷题_26-删除有序数组中的重复项.md":"299438fb","algorithm_leetcode刷题_349-两个数组的交集.md":"029e4730","algorithm_leetcode刷题_541-反转字符串ii.md":"9cddfa39","algorithm_leetcode刷题_344-反转字符串.md":"1fe55d7e","algorithm_leetcode刷题_35-搜索插入位置.md":"9d06ccb0","hand-notes_javascript_根据生日计算年龄.md":"02a203de","algorithm_leetcode刷题_58-最后一个单词的长度.md":"2352595a","hand-notes_css_图片加载出错样式设置.md":"b622c02a","algorithm_leetcode刷题_414-第三大的数.md":"13153ebb","hand-notes_css_虚线边框.md":"a129fd01","hand-notes_css_css计数器-counter.md":"5edc732a","hand-notes_mac_frequently-commands.md":"5cc2cd17","hand-notes_charles_抓包配置.md":"735d347c","hand-notes_linux_practice-method.md":"0c4a7dcf","hand-notes_charles_修改请求或响应.md":"708e7c67","knowledge-deposition_golang_gin_中间件.md":"4ac3f3f8","hand-notes_css_css模拟数字loading.md":"30f2b579","knowledge-deposition_golang_crawler_http请求方法.md":"d55c151b","algorithm_leetcode刷题_20-有效的括号.md":"1d88a675","algorithm_leetcode刷题_17-电话号码的字母组合.md":"9983d4c9","knowledge-deposition_golang_gin_bind绑定器.md":"9ceb2b33","knowledge-deposition_nacos_操作动态配置文件.md":"9c09c798","hand-notes_sass_通过mixin简化响应式代码.md":"d6b29977","knowledge-deposition_golang_jwt_jwt.md":"402a05cd","knowledge-deposition_golang_logger_logrus_hook.md":"d190ad72","knowledge-deposition_golang_gorm_模型定义.md":"2175756f","knowledge-deposition_golang_gorm_自定义数据类型.md":"58e6b0be","knowledge-deposition_golang_基础知识_基础数据类型.md":"ff38ab8d","knowledge-deposition_golang_基础知识_文件操作_文件复制.md":"1f2e6f5a","knowledge-deposition_golang_logger_logrus_基础用法.md":"0f507f2b","knowledge-deposition_golang_logger_logrus_日志分割.md":"dd69bf24","knowledge-deposition_golang_基础知识_指针.md":"1411fccf","knowledge-deposition_golang_基础知识_文件操作_写文件.md":"50c41735","knowledge-deposition_golang_基础知识_文件操作_目录操作.md":"3cdb8f98","knowledge-deposition_golang_基础知识_文件操作_读取配置文件.md":"293ba402","knowledge-deposition_前端工程化_vite_依赖预构建.md":"2f4b3057","knowledge-deposition_前端工程化_babel_babel基础.md":"d7a84d1c","knowledge-deposition_golang_基础知识_数组、切片、map.md":"076b5002","knowledge-deposition_前端工程化_vite_rollup的插件机制.md":"ce43c41a","knowledge-deposition_golang_gin_上传和下载文件.md":"d8791962","knowledge-deposition_前端工程化_vite_esbuild相关.md":"afe4b6f7","knowledge-deposition_前端工程化_vite_vite插件机制.md":"92943cff","knowledge-deposition_前端工程化_vite_初体验.md":"609505c0","knowledge-deposition_golang_gin_请求参数.md":"ce823438","knowledge-deposition_前端工程化_vite_区分不同环境.md":"362102b0","knowledge-deposition_rabbitmq_发布订阅.md":"7326d7a7","knowledge-deposition_golang_logger_zap_zap使用.md":"49627403"} diff --git a/index.html b/index.html index b3637f49..f6d9300a 100644 --- a/index.html +++ b/index.html @@ -6,16 +6,16 @@ mx52jing | mx52jing - - - + + +
Skip to content

mx52jing的博客

前端路上的点滴

小知识汇聚成大海洋

- - + + \ No newline at end of file diff --git a/knowledge-deposition/Docker/Dockerfile.html b/knowledge-deposition/Docker/Dockerfile.html index 75e2864f..77f11c1a 100644 --- a/knowledge-deposition/Docker/Dockerfile.html +++ b/knowledge-deposition/Docker/Dockerfile.html @@ -6,14 +6,14 @@ Dockerfile | mx52jing - - - + + + -
Skip to content
On this page

Dockerfile

Dockerfile是一个文本文件,其内包含了一条条的指令(Instruction)每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。

Dockerfile指令

FROM

  • FROM指定基础镜像
shell
FROM basicImage
+    
Skip to content
On this page

Dockerfile

Dockerfile是一个文本文件,其内包含了一条条的指令(Instruction)每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。

Dockerfile指令

FROM

  • FROM指定基础镜像
shell
FROM basicImage
 
  • 定制镜像都要以一个镜像为基础,FROM作用就是指定基础镜像

  • Dockerfile中,FROM必须的,必须是第一条指令

特殊空白镜像

  • Docker存在一个特殊的scratch镜像。这个镜像是虚拟的概念,不实际存在,表示一个空白的镜像

  • scratch为基础镜像的,表示不以任何镜像为基础,所写的指令将作为镜像第一层开始存在。

RUN

  • RUN表示执行命令

两种格式:

  • shell格式: RUN <命令>`,如下:
shell
RUN echo '<h1>hello</h1>' > /usr/share/nginx/html/index.html
 
  • exec格式:RUN ["可执行文件", "参数1", "参数2"]

WARNING

注意:不要用下面这种写法

FROM basicImage
 RUN operation1
@@ -75,8 +75,8 @@
 
 docker build -t nginx:v1 .
 

镜像构建上下文

  • docker build命令末尾会指定一个路径,通常为.,这个.的作用就是来指定上下文路径

  • docker build这一构建命令的执行,实际上是使用远程调用形式在服务端(Docker 引擎)完成。在服务端构建时,有可能需要将本地的一些文件复制到镜像里面去,服务器要获取本地需要复制的文件就是要通过这个上下文路径,而这个路径是我们自己在build时指定的路径

  • docker build命令获取到这个路径之后,会将路径下内容打包,传给Docker引擎,这样Docker引擎收到这个上下文包之后,展开就会得到构建镜像所需文件

  • 如果所给出的URL不是个仓库地址,而是个tar压缩包,那么Docker引擎下载这个包,并自动解压缩,以其作为上下文,开始构建

  • 如果标准输入传入的是文本文件,则将其视为Dockerfile,并开始构建。这种形式由于直接从标准输入中读取Dockerfile的内容,它没有上下文,因此不可以像其他方法那样可以将本地文件COPY进镜像之类的事情

- - + + \ No newline at end of file diff --git "a/knowledge-deposition/Docker/Docker\345\237\272\347\241\200\347\237\245\350\257\206.html" "b/knowledge-deposition/Docker/Docker\345\237\272\347\241\200\347\237\245\350\257\206.html" index 8bf7ad65..232e73d6 100644 --- "a/knowledge-deposition/Docker/Docker\345\237\272\347\241\200\347\237\245\350\257\206.html" +++ "b/knowledge-deposition/Docker/Docker\345\237\272\347\241\200\347\237\245\350\257\206.html" @@ -6,14 +6,14 @@ Docker基础知识 | mx52jing - - - + + + -
Skip to content
On this page

Docker基础知识

基本概念

Docker包括3个基本概念:

  • 镜像(Image)

  • 容器(Container)

  • 仓库(Repository)

Docker镜像(Image)

  • Docker镜像是一个特殊的文件系统,提供容器运行时所需的仓库、资源、配置等文件以及容器运行所需参数。

  • 镜像是分层的,每一层叫做一个镜像层,使用docker history [IMAGE ID]查看

  • 镜像是有依赖关系的,上层的镜像依赖下层的镜像,这样设计的好处是,镜像可以复用

  • 镜像是只读的,下层的镜像层不会被修改,只能新增镜像层,所以会越来越多

获取镜像的几种方式

  • 从仓库获取(docker pull)

  • 基于Dockerfile使用docker build命令构建

  • 文件载入docker load

Docker容器(Container)

容器的特点:

  • 容器是基于镜像来运行的,docker run命令使用image启动了一个运行中的系统,就是container(容器)

  • 容器是可读写的

  • 在容器里面进行的操作不会影响image,删除文件也只是在容器里面标记为已删除

  • 容器删除,则保存在容器中的数据也会被删除,容器停止,数据不会被删除

  • 容器只有被保存成镜像才能被移植到其他地方

Docker仓库(Repository)

  • Docker的仓库和git仓库差不多,拥有tag仓库名,在本地构建完镜像以后,就可以通过仓库分发

  • 官方仓库

  • 阿里云

安装

  • 进入官网安装系统对应的客户端

如果需要配置镜像源,可以在客户端设置中配置,如下:

任务栏 => Perferences => Docker Engine 配置,设置完后点击Apply & restart按钮重启

执行docker info可以查看Registry Mirrors查询镜像源是否配置成功

查看docker占用磁盘空间信息

  • 查看镜像、容器、数据卷所占用空间
shell
docker system df
+    
Skip to content
On this page

Docker基础知识

基本概念

Docker包括3个基本概念:

  • 镜像(Image)

  • 容器(Container)

  • 仓库(Repository)

Docker镜像(Image)

  • Docker镜像是一个特殊的文件系统,提供容器运行时所需的仓库、资源、配置等文件以及容器运行所需参数。

  • 镜像是分层的,每一层叫做一个镜像层,使用docker history [IMAGE ID]查看

  • 镜像是有依赖关系的,上层的镜像依赖下层的镜像,这样设计的好处是,镜像可以复用

  • 镜像是只读的,下层的镜像层不会被修改,只能新增镜像层,所以会越来越多

获取镜像的几种方式

  • 从仓库获取(docker pull)

  • 基于Dockerfile使用docker build命令构建

  • 文件载入docker load

Docker容器(Container)

容器的特点:

  • 容器是基于镜像来运行的,docker run命令使用image启动了一个运行中的系统,就是container(容器)

  • 容器是可读写的

  • 在容器里面进行的操作不会影响image,删除文件也只是在容器里面标记为已删除

  • 容器删除,则保存在容器中的数据也会被删除,容器停止,数据不会被删除

  • 容器只有被保存成镜像才能被移植到其他地方

Docker仓库(Repository)

  • Docker的仓库和git仓库差不多,拥有tag仓库名,在本地构建完镜像以后,就可以通过仓库分发

  • 官方仓库

  • 阿里云

安装

  • 进入官网安装系统对应的客户端

如果需要配置镜像源,可以在客户端设置中配置,如下:

任务栏 => Perferences => Docker Engine 配置,设置完后点击Apply & restart按钮重启

执行docker info可以查看Registry Mirrors查询镜像源是否配置成功

查看docker占用磁盘空间信息

  • 查看镜像、容器、数据卷所占用空间
shell
docker system df
 

如下所示:

shell
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
 Images          2         2         565.8MB   0B (0%)
 Containers      3         3         14B       0B (0%)
@@ -51,8 +51,8 @@
 
  • 清理所有处于终止状态的容器
shell
docker container prune
 
  • 强行删除所有容器(运行中/已停止的都会全部被删除)
shell
docker container rm -f (docker container ls -a -q )
 
- - + + \ No newline at end of file diff --git "a/knowledge-deposition/GoLang/Crawler/HTTP\350\257\267\346\261\202\346\226\271\346\263\225.html" "b/knowledge-deposition/GoLang/Crawler/HTTP\350\257\267\346\261\202\346\226\271\346\263\225.html" index cca994af..b8c33f44 100644 --- "a/knowledge-deposition/GoLang/Crawler/HTTP\350\257\267\346\261\202\346\226\271\346\263\225.html" +++ "b/knowledge-deposition/GoLang/Crawler/HTTP\350\257\267\346\261\202\346\226\271\346\263\225.html" @@ -6,14 +6,14 @@ HTTP请求方法 | mx52jing - - - + + + -
Skip to content
On this page

HTTP请求方法

GET

GET请求函数源码如下:

Go
func Get(url string) (resp *Response, err error) {
+    
Skip to content
On this page

HTTP请求方法

GET

GET请求函数源码如下:

Go
func Get(url string) (resp *Response, err error) {
 	return DefaultClient.Get(url)
 }
 

不带参数的get请求

例子:

Go
func getNoParams() {
@@ -167,8 +167,8 @@
 	os.Stdout.WriteString("\n")
 }
 
- - + + \ No newline at end of file diff --git "a/knowledge-deposition/GoLang/Gin/bind\347\273\221\345\256\232\345\231\250.html" "b/knowledge-deposition/GoLang/Gin/bind\347\273\221\345\256\232\345\231\250.html" index 5da9c2ae..4c302482 100644 --- "a/knowledge-deposition/GoLang/Gin/bind\347\273\221\345\256\232\345\231\250.html" +++ "b/knowledge-deposition/GoLang/Gin/bind\347\273\221\345\256\232\345\231\250.html" @@ -6,14 +6,14 @@ bind绑定器 | mx52jing - - - + + + -
Skip to content
On this page

bind绑定器

  • gin中的绑定器bind可以很方便的将前端传递来的数据与结构体进行参数绑定,以及参数校验

  • 在使用这个功能的时候,需要给结构体加上Tag, 如:jsonformurixmlyaml

绑定器API

ShouldBindJSON

Go
type User struct {
+    
Skip to content
On this page

bind绑定器

  • gin中的绑定器bind可以很方便的将前端传递来的数据与结构体进行参数绑定,以及参数校验

  • 在使用这个功能的时候,需要给结构体加上Tag, 如:jsonformurixmlyaml

绑定器API

ShouldBindJSON

Go
type User struct {
 	UserName string `json:"user_name" form:"user_name" uri:"user_name"`
 	Age int `json:"age" form:"age" uri:"age"`
 	Sex string `json:"sex" form:"sex" uri:"sex"`
@@ -275,8 +275,8 @@
 	Age       uint8     `gorm:"not null;comment:年龄" json:"age" binding:"omitempty,gte=18,lte=70" gte_msg:"年龄必须在18-70之间" lte_msg:"年龄必须在18-70之间"`
 }
 
- - + + \ No newline at end of file diff --git a/knowledge-deposition/GoLang/Gin/hello-world.html b/knowledge-deposition/GoLang/Gin/hello-world.html index e6de6cbc..014f84f5 100644 --- a/knowledge-deposition/GoLang/Gin/hello-world.html +++ b/knowledge-deposition/GoLang/Gin/hello-world.html @@ -6,14 +6,14 @@ hello-world | mx52jing - - - + + + -
Skip to content
On this page

hello-world

项目初始化并启动

  • 初始化
shell
go mod init projectname
+    
Skip to content
On this page

hello-world

项目初始化并启动

  • 初始化
shell
go mod init projectname
 
 go mod init github.com/username/projectname
 
  • 下载gin
shell
go get -u github.com/gin-gonic/gin
@@ -38,8 +38,8 @@
 	router.Run(":9100")
 }
 
  • 访问0.0.0.0:9100/user或者本机IP:9100/user查看结果
- - + + \ No newline at end of file diff --git "a/knowledge-deposition/GoLang/Gin/\344\270\212\344\274\240\345\222\214\344\270\213\350\275\275\346\226\207\344\273\266.html" "b/knowledge-deposition/GoLang/Gin/\344\270\212\344\274\240\345\222\214\344\270\213\350\275\275\346\226\207\344\273\266.html" index e0fd0e03..e5fce23d 100644 --- "a/knowledge-deposition/GoLang/Gin/\344\270\212\344\274\240\345\222\214\344\270\213\350\275\275\346\226\207\344\273\266.html" +++ "b/knowledge-deposition/GoLang/Gin/\344\270\212\344\274\240\345\222\214\344\270\213\350\275\275\346\226\207\344\273\266.html" @@ -6,14 +6,14 @@ 上传和下载文件 | mx52jing - - - + + + -
Skip to content
On this page

上传和下载文件

上传文件

  • 服务端使用ctx.SaveUploadedFile保存文件到服务器
Go
// 通过name获取form file
+    
Skip to content
On this page

上传和下载文件

上传文件

  • 服务端使用ctx.SaveUploadedFile保存文件到服务器
Go
// 通过name获取form file
 func (c *Context) FormFile(name string) (*multipart.FileHeader, error)
 // 获取上传的整个form
 func (c *Context) MultipartForm() (*multipart.Form, error)
@@ -225,8 +225,8 @@
 	router.Run(":9100")
 }
 
- - + + \ No newline at end of file diff --git "a/knowledge-deposition/GoLang/Gin/\344\270\255\351\227\264\344\273\266.html" "b/knowledge-deposition/GoLang/Gin/\344\270\255\351\227\264\344\273\266.html" index 0247fccd..518b49ca 100644 --- "a/knowledge-deposition/GoLang/Gin/\344\270\255\351\227\264\344\273\266.html" +++ "b/knowledge-deposition/GoLang/Gin/\344\270\255\351\227\264\344\273\266.html" @@ -6,14 +6,14 @@ 中间件 | mx52jing - - - + + + -
Skip to content
On this page

中间件

  • gin中间件和Koa的中间件思想一致,都是洋葱模型

  • 使用ctx.Next方法表示调用下一个中间件

  • 使用ctx.Abort方法表示阻断当前中间件之后的其他中间件执行

单个路由中间件

Go
package main
+    
Skip to content
On this page

中间件

  • gin中间件和Koa的中间件思想一致,都是洋葱模型

  • 使用ctx.Next方法表示调用下一个中间件

  • 使用ctx.Abort方法表示阻断当前中间件之后的其他中间件执行

单个路由中间件

Go
package main
 
 import (
 	"fmt"
@@ -160,8 +160,8 @@
 tagsHanlder
 退出globalMiddleware
 
- - + + \ No newline at end of file diff --git "a/knowledge-deposition/GoLang/Gin/\345\223\215\345\272\224\346\225\260\346\215\256.html" "b/knowledge-deposition/GoLang/Gin/\345\223\215\345\272\224\346\225\260\346\215\256.html" index ff467279..98857065 100644 --- "a/knowledge-deposition/GoLang/Gin/\345\223\215\345\272\224\346\225\260\346\215\256.html" +++ "b/knowledge-deposition/GoLang/Gin/\345\223\215\345\272\224\346\225\260\346\215\256.html" @@ -6,14 +6,14 @@ 响应数据 | mx52jing - - - + + + -
Skip to content
On this page

响应数据

响应字符串

Go
func UserHandle(ctx *gin.Context) {
+    
Skip to content
On this page

响应数据

响应字符串

Go
func UserHandle(ctx *gin.Context) {
 	ctx.String(http.StatusOK, "hello world")
 } 
 

响应JSON

使用结构体

  • 可以通过json tag来设置返回数据的别名,格式如下,这样返回的json数据的key就是设置的别名
Go
type User struct {
@@ -321,8 +321,8 @@
 	router.Run(":9100")
 }
 
- - + + \ No newline at end of file diff --git "a/knowledge-deposition/GoLang/Gin/\346\224\257\346\214\201\350\267\250\345\237\237.html" "b/knowledge-deposition/GoLang/Gin/\346\224\257\346\214\201\350\267\250\345\237\237.html" index 965cfe11..8f6a6cd5 100644 --- "a/knowledge-deposition/GoLang/Gin/\346\224\257\346\214\201\350\267\250\345\237\237.html" +++ "b/knowledge-deposition/GoLang/Gin/\346\224\257\346\214\201\350\267\250\345\237\237.html" @@ -6,14 +6,14 @@ 支持跨域 | mx52jing - - - + + + -
Skip to content
On this page

支持跨域

下载依赖

shell
go get -u github.com/gin-contrib/cors
+    
Skip to content
On this page

支持跨域

下载依赖

shell
go get -u github.com/gin-contrib/cors
 

配置

  • 下面这几种配置都可以

典型的例子

Go

 package main
 
@@ -92,8 +92,8 @@
 	}
 }
 
- - + + \ No newline at end of file diff --git "a/knowledge-deposition/GoLang/Gin/\350\257\267\346\261\202\345\217\202\346\225\260.html" "b/knowledge-deposition/GoLang/Gin/\350\257\267\346\261\202\345\217\202\346\225\260.html" index a861eb5d..89067327 100644 --- "a/knowledge-deposition/GoLang/Gin/\350\257\267\346\261\202\345\217\202\346\225\260.html" +++ "b/knowledge-deposition/GoLang/Gin/\350\257\267\346\261\202\345\217\202\346\225\260.html" @@ -6,14 +6,14 @@ 请求参数 | mx52jing - - - + + + -
Skip to content
On this page

请求参数

GET请求

普通参数

  • ctx.Query:获取参数

  • ctx.DefaultQuery:可设置参数默认值

  • ctx.GetQuery:可验证参数是否传递

Go
func (*gin.Context).Query(key string) (value string)
+    
Skip to content
On this page

请求参数

GET请求

普通参数

  • ctx.Query:获取参数

  • ctx.DefaultQuery:可设置参数默认值

  • ctx.GetQuery:可验证参数是否传递

Go
func (*gin.Context).Query(key string) (value string)
 
 func (*gin.Context).DefaultQuery(key string, defaultValue string) string
 
@@ -161,8 +161,8 @@
     "userName": "zhang"
 }
 
- - + + \ No newline at end of file diff --git "a/knowledge-deposition/GoLang/Gin/\350\257\267\346\261\202\345\244\264\345\222\214\345\223\215\345\272\224\345\244\264.html" "b/knowledge-deposition/GoLang/Gin/\350\257\267\346\261\202\345\244\264\345\222\214\345\223\215\345\272\224\345\244\264.html" index 17906e0e..dee80679 100644 --- "a/knowledge-deposition/GoLang/Gin/\350\257\267\346\261\202\345\244\264\345\222\214\345\223\215\345\272\224\345\244\264.html" +++ "b/knowledge-deposition/GoLang/Gin/\350\257\267\346\261\202\345\244\264\345\222\214\345\223\215\345\272\224\345\244\264.html" @@ -6,14 +6,14 @@ 请求头和响应头 | mx52jing - - - + + + -
Skip to content
On this page

请求头和响应头

请求头

  • 获取请求头,使用ctx.GetHeader("xx")或者ctx.Request.Header.Get("xxx")
Go
func getHeaderHandler(ctx *gin.Context) {
+    
Skip to content
On this page

请求头和响应头

请求头

  • 获取请求头,使用ctx.GetHeader("xx")或者ctx.Request.Header.Get("xxx")
Go
func getHeaderHandler(ctx *gin.Context) {
 	// 首字母大小写不区分  单词与单词之间用 - 连接
 	fmt.Printf("ctx.GetHeader(\"user-agent\"): %v\n", ctx.GetHeader("user-agent"))
 	fmt.Printf("ctx.GetHeader(\"admin-token\"): %v\n", ctx.GetHeader("admin-token"))
@@ -29,8 +29,8 @@
 	router.Run(":9100")
 }
 

响应头

  • 设置响应头,使用ctx.Header(key, value)
- - + + \ No newline at end of file diff --git "a/knowledge-deposition/GoLang/Gin/\350\267\257\347\224\261\345\210\206\347\273\204.html" "b/knowledge-deposition/GoLang/Gin/\350\267\257\347\224\261\345\210\206\347\273\204.html" index 10e57a81..d99092f6 100644 --- "a/knowledge-deposition/GoLang/Gin/\350\267\257\347\224\261\345\210\206\347\273\204.html" +++ "b/knowledge-deposition/GoLang/Gin/\350\267\257\347\224\261\345\210\206\347\273\204.html" @@ -6,14 +6,14 @@ 路由分组 | mx52jing - - - + + + -
Skip to content
On this page

路由分组

可以针对不同的功能模块对路由分组

  • 使用router.Group(name)定义一个群组
Go
package main
+    
Skip to content
On this page

路由分组

可以针对不同的功能模块对路由分组

  • 使用router.Group(name)定义一个群组
Go
package main
 
 import "github.com/gin-gonic/gin"
 
@@ -74,8 +74,8 @@
 	router.Run(":9100")
 }
 

访问/user/v1/name/user/v1/401

- - + + \ No newline at end of file diff --git "a/knowledge-deposition/GoLang/Gin/\351\233\206\346\210\220Swagger.html" "b/knowledge-deposition/GoLang/Gin/\351\233\206\346\210\220Swagger.html" index d656f89e..6c487e1f 100644 --- "a/knowledge-deposition/GoLang/Gin/\351\233\206\346\210\220Swagger.html" +++ "b/knowledge-deposition/GoLang/Gin/\351\233\206\346\210\220Swagger.html" @@ -6,14 +6,14 @@ 集成Swagger | mx52jing - - - + + + -
Skip to content
On this page

集成Swagger

通过在代码中添加符合swagger规范的注解,可以自动生成文档

依赖安装和初始化

安装Swagger

shell
go get github.com/swaggo/swag/cmd/swag
+    
Skip to content
On this page

集成Swagger

通过在代码中添加符合swagger规范的注解,可以自动生成文档

依赖安装和初始化

安装Swagger

shell
go get github.com/swaggo/swag/cmd/swag
 # 生成可执行文件
 go install github.com/swaggo/swag/cmd/swag@latest
 

查看swagger版本

shell
swag -v
@@ -95,8 +95,8 @@
 	})
 }
 
- - + + \ No newline at end of file diff --git a/knowledge-deposition/GoLang/Gorm/AdvancedQuery.html b/knowledge-deposition/GoLang/Gorm/AdvancedQuery.html index b3b8aab4..e01e6794 100644 --- a/knowledge-deposition/GoLang/Gorm/AdvancedQuery.html +++ b/knowledge-deposition/GoLang/Gorm/AdvancedQuery.html @@ -6,14 +6,14 @@ Advanced Query | mx52jing - - - + + + -
Skip to content
On this page

Advanced Query

智能选择字段

  • 选择字段可以使用Select,但是如果有多个Select操作,可以定义一个结构体,查询的时候会自动检索结构体中的字段
Go
type SmartFields struct {
+    
Skip to content
On this page

Advanced Query

智能选择字段

  • 选择字段可以使用Select,但是如果有多个Select操作,可以定义一个结构体,查询的时候会自动检索结构体中的字段
Go
type SmartFields struct {
 	Name   string
 	Age    int
 	Gender int
@@ -60,8 +60,8 @@
 DB.Model(&Teacher{}).Where("age >= ?", 18).Count(&count)
 // SELECT count(*) FROM `teachers` WHERE age >= 18
 
- - + + \ No newline at end of file diff --git a/knowledge-deposition/GoLang/Gorm/Create.html b/knowledge-deposition/GoLang/Gorm/Create.html index 4baedea7..be555e10 100644 --- a/knowledge-deposition/GoLang/Gorm/Create.html +++ b/knowledge-deposition/GoLang/Gorm/Create.html @@ -6,14 +6,14 @@ Create | mx52jing - - - + + + -
Skip to content
On this page

Create

  • 下面的操作都以该Teacher结构体为基础
Go
type Teacher struct {
+    
Skip to content
On this page

Create

  • 下面的操作都以该Teacher结构体为基础
Go
type Teacher struct {
 	gorm.Model
 	Name    string `gorm:"type:varchar(32)"`
 	Age     uint8
@@ -75,8 +75,8 @@
 }
 

相当于如下SQL

SQL
INSERT INTO `teachers` (`age`,`name`) VALUES (22,'multiMap1'),(32,'multiMap2'),(42,'multiMap3'),(52,'multiMap4')
 
- - + + \ No newline at end of file diff --git a/knowledge-deposition/GoLang/Gorm/Delete.html b/knowledge-deposition/GoLang/Gorm/Delete.html index 7ff205e6..67bb8db0 100644 --- a/knowledge-deposition/GoLang/Gorm/Delete.html +++ b/knowledge-deposition/GoLang/Gorm/Delete.html @@ -6,14 +6,14 @@ Delete | mx52jing - - - + + + -
Skip to content
On this page

Delete

删除单条

  • 删除一条记录时,删除对象需要指定主键,否则会触发批量删除
Go
singleD := Teacher{ID: 2}
+    
Skip to content
On this page

Delete

删除单条

  • 删除一条记录时,删除对象需要指定主键,否则会触发批量删除
Go
singleD := Teacher{ID: 2}
 DB.Delete(&singleD)
 // DELETE FROM `teachers` WHERE `teachers`.`id` = 2
 
@@ -31,8 +31,8 @@
 DB.Delete(&Teacher{}, "name LIKE ?", "元%")
 // DELETE FROM `teachers` WHERE name LIKE '元%'
 
- - + + \ No newline at end of file diff --git a/knowledge-deposition/GoLang/Gorm/Query.html b/knowledge-deposition/GoLang/Gorm/Query.html index 88c2f104..27edc8ba 100644 --- a/knowledge-deposition/GoLang/Gorm/Query.html +++ b/knowledge-deposition/GoLang/Gorm/Query.html @@ -6,14 +6,14 @@ Query | mx52jing - - - + + + -
Skip to content
On this page

Query

  • 下面的操作都以该Teacher结构体为基础
Go
type Teacher struct {
+    
Skip to content
On this page

Query

  • 下面的操作都以该Teacher结构体为基础
Go
type Teacher struct {
 	gorm.Model
 	Name    string `gorm:"type:varchar(32)"`
 	Age     uint8
@@ -217,8 +217,8 @@
 // [{李朗-28,杨方-16,仁阔-26,齐虎-22,潘越-28,multiMap1-22,multiMap4-52 7 0} {如燕-18,mapName-332,multiMap3-42 5 1}]
 

Raw使用原生SQL

Go
DB.Raw("SELECT name, age FROM teachers WHERE name LIKE ?", "mul%").Scan(&res)
 
- - + + \ No newline at end of file diff --git a/knowledge-deposition/GoLang/Gorm/Update.html b/knowledge-deposition/GoLang/Gorm/Update.html index b0f56519..541faa27 100644 --- a/knowledge-deposition/GoLang/Gorm/Update.html +++ b/knowledge-deposition/GoLang/Gorm/Update.html @@ -6,14 +6,14 @@ Update | mx52jing - - - + + + -
Skip to content
On this page

Update

保存所有字段

  • Save会保存所有字段,包括零值

  • Save是一个组合函数,如果保存的数据不包含主键,它将执行Create,否则将执行Update(包含所有字段)

Go
var first Teacher
+    
Skip to content
On this page

Update

保存所有字段

  • Save会保存所有字段,包括零值

  • Save是一个组合函数,如果保存的数据不包含主键,它将执行Create,否则将执行Update(包含所有字段)

Go
var first Teacher
 DB.First(&first)
 first.Name = "First Save"
 first.Age = 88
@@ -47,8 +47,8 @@
 DB.Model(&s).Select("age", "gender").Updates(Teacher{Age: 19, Name: "吴文登", Gender: 1})
 // UPDATE `teachers` SET `age`=19,`gender`=1 WHERE `id` = 2
 
- - + + \ No newline at end of file diff --git "a/knowledge-deposition/GoLang/Gorm/\344\272\213\345\212\241.html" "b/knowledge-deposition/GoLang/Gorm/\344\272\213\345\212\241.html" index e4c005ba..fe8a7888 100644 --- "a/knowledge-deposition/GoLang/Gorm/\344\272\213\345\212\241.html" +++ "b/knowledge-deposition/GoLang/Gorm/\344\272\213\345\212\241.html" @@ -6,14 +6,14 @@ 事务 | mx52jing - - - + + + -
Skip to content
On this page

事务

数据准备,会自动创建t_dogs

Go
type TDog struct {
+    
Skip to content
On this page

事务

数据准备,会自动创建t_dogs

Go
type TDog struct {
 	Name string
 }
 
@@ -184,8 +184,8 @@
 	tx.Commit()
 }
 
- - + + \ No newline at end of file diff --git "a/knowledge-deposition/GoLang/Gorm/\345\205\263\350\201\224\344\271\213\344\270\200\345\257\271\344\270\200.html" "b/knowledge-deposition/GoLang/Gorm/\345\205\263\350\201\224\344\271\213\344\270\200\345\257\271\344\270\200.html" index f42d8055..5a9cf84f 100644 --- "a/knowledge-deposition/GoLang/Gorm/\345\205\263\350\201\224\344\271\213\344\270\200\345\257\271\344\270\200.html" +++ "b/knowledge-deposition/GoLang/Gorm/\345\205\263\350\201\224\344\271\213\344\270\200\345\257\271\344\270\200.html" @@ -6,14 +6,14 @@ 关联之一对一 | mx52jing - - - + + + -
Skip to content
On this page

关联之一对一

一对一的场景下,有两种模式,一种是Belongs To(属于),一种是Has One(拥有一个)

Belongs To

belongs to可以理解为A身上打了B标签A知道B的所有信息,但是BA一无所知,可以理解为单相思自作多情,一方会在自己这边记住对方,而对方却毫不知情

Go
type Dog struct {
+    
Skip to content
On this page

关联之一对一

一对一的场景下,有两种模式,一种是Belongs To(属于),一种是Has One(拥有一个)

Belongs To

belongs to可以理解为A身上打了B标签A知道B的所有信息,但是BA一无所知,可以理解为单相思自作多情,一方会在自己这边记住对方,而对方却毫不知情

Go
type Dog struct {
 	ID        uint
 	Name      string
 	GirlGod   GirlGod
@@ -288,8 +288,8 @@
 	DB.Model(&hGirlGod2).Association("HDog").Replace(&hDog1)
 }
 

DeleteClear

DeleteClear就和上面的相同,只是方法替换了一下

- - + + \ No newline at end of file diff --git "a/knowledge-deposition/GoLang/Gorm/\345\205\263\350\201\224\344\271\213\344\270\200\345\257\271\345\244\232.html" "b/knowledge-deposition/GoLang/Gorm/\345\205\263\350\201\224\344\271\213\344\270\200\345\257\271\345\244\232.html" index 5b9fbc4f..c5194abe 100644 --- "a/knowledge-deposition/GoLang/Gorm/\345\205\263\350\201\224\344\271\213\344\270\200\345\257\271\345\244\232.html" +++ "b/knowledge-deposition/GoLang/Gorm/\345\205\263\350\201\224\344\271\213\344\270\200\345\257\271\345\244\232.html" @@ -6,14 +6,14 @@ 关联之一对多 | mx52jing - - - + + + -
Skip to content
On this page

关联之一对多

一个女神可以有多个狗哥,一个狗哥只属于一个女神

结构体如下:

Go
type HMDog struct {
+    
Skip to content
On this page

关联之一对多

一个女神可以有多个狗哥,一个狗哥只属于一个女神

结构体如下:

Go
type HMDog struct {
 	ID          uint
 	Name        string
 	HMGirlGodID uint // 外键,就是HMGirlGod.ID
@@ -416,8 +416,8 @@
 	fmt.Printf("g1 is %v\n", g1)
 }
 
- - + + \ No newline at end of file diff --git "a/knowledge-deposition/GoLang/Gorm/\345\205\263\350\201\224\344\271\213\345\244\232\345\257\271\345\244\232.html" "b/knowledge-deposition/GoLang/Gorm/\345\205\263\350\201\224\344\271\213\345\244\232\345\257\271\345\244\232.html" index 72ff7373..42c6dee1 100644 --- "a/knowledge-deposition/GoLang/Gorm/\345\205\263\350\201\224\344\271\213\345\244\232\345\257\271\345\244\232.html" +++ "b/knowledge-deposition/GoLang/Gorm/\345\205\263\350\201\224\344\271\213\345\244\232\345\257\271\345\244\232.html" @@ -6,14 +6,14 @@ 关联之多对多 | mx52jing - - - + + + -
Skip to content
On this page

关联之多对多

一个女神可以有多个狗哥,一个狗哥也可以有多个女神

Go
type M2MWallet struct {
+    
Skip to content
On this page

关联之多对多

一个女神可以有多个狗哥,一个狗哥也可以有多个女神

Go
type M2MWallet struct {
 	ID       uint
 	Amount   float64
 	M2MDogID uint // 外键,就是M2MDog.ID
@@ -157,8 +157,8 @@
 JOIN m2_m_wallets w on w.m2_m_dog_id = m2_m_dogs.id 
 WHERE dg.m2_m_girl_god_id = 1 AND w.amount >= 100001
 
- - + + \ No newline at end of file diff --git "a/knowledge-deposition/GoLang/Gorm/\346\250\241\345\236\213\345\256\232\344\271\211.html" "b/knowledge-deposition/GoLang/Gorm/\346\250\241\345\236\213\345\256\232\344\271\211.html" index 1e3d16ba..3bda4b93 100644 --- "a/knowledge-deposition/GoLang/Gorm/\346\250\241\345\236\213\345\256\232\344\271\211.html" +++ "b/knowledge-deposition/GoLang/Gorm/\346\250\241\345\236\213\345\256\232\344\271\211.html" @@ -6,14 +6,14 @@ 模型定义 | mx52jing - - - + + + -
Skip to content
On this page

模型定义

模型定义

模型是标准的struct,由Go的基本数据类型、实现了ScannerValuer接口的自定义类型及其指针或别名组成

例如:

Go
type User struct {
+    
Skip to content
On this page

模型定义

模型定义

模型是标准的struct,由Go的基本数据类型、实现了ScannerValuer接口的自定义类型及其指针或别名组成

例如:

Go
type User struct {
   ID           uint
   Name         string
   Email        *string
@@ -127,8 +127,8 @@
 
 DB.AutoMigrate(&Teacher{})
 
- - + + \ No newline at end of file diff --git "a/knowledge-deposition/GoLang/Gorm/\350\207\252\345\256\232\344\271\211\346\225\260\346\215\256\347\261\273\345\236\213.html" "b/knowledge-deposition/GoLang/Gorm/\350\207\252\345\256\232\344\271\211\346\225\260\346\215\256\347\261\273\345\236\213.html" index 0c6e673c..b2b54d63 100644 --- "a/knowledge-deposition/GoLang/Gorm/\350\207\252\345\256\232\344\271\211\346\225\260\346\215\256\347\261\273\345\236\213.html" +++ "b/knowledge-deposition/GoLang/Gorm/\350\207\252\345\256\232\344\271\211\346\225\260\346\215\256\347\261\273\345\236\213.html" @@ -6,14 +6,14 @@ 自定义数据类型 | mx52jing - - - + + + -
Skip to content
On this page

自定义数据类型

在使用GORM进行Go语言的数据库操作时,有时候会遇到内置数据类型不能满足需求的情况。可以通过实现GORM的ScannerValuer接口来创建自定义数据类型,使其能够与数据库交互。

TIP

要在GORM中使用这些自定义类型,需要实现两个接口

  • Scanner:用于从数据库读取值

  • Valuer:用于将值写入数据库

ScannerValuer接口定义如下,如果要使用自定义数据类型,需要实现ScanValue方法

Go
type Scanner interface {
+    
Skip to content
On this page

自定义数据类型

在使用GORM进行Go语言的数据库操作时,有时候会遇到内置数据类型不能满足需求的情况。可以通过实现GORM的ScannerValuer接口来创建自定义数据类型,使其能够与数据库交互。

TIP

要在GORM中使用这些自定义类型,需要实现两个接口

  • Scanner:用于从数据库读取值

  • Valuer:用于将值写入数据库

ScannerValuer接口定义如下,如果要使用自定义数据类型,需要实现ScanValue方法

Go
type Scanner interface {
 	// Scan assigns a value from a database driver.
 	//
 	// The src value will be of one of the following types:
@@ -187,8 +187,8 @@
 	cQueryData()
 }
 
- - + + \ No newline at end of file diff --git "a/knowledge-deposition/GoLang/Gorm/\350\277\236\346\216\245\346\225\260\346\215\256\345\272\223.html" "b/knowledge-deposition/GoLang/Gorm/\350\277\236\346\216\245\346\225\260\346\215\256\345\272\223.html" index 9e6a2cab..c829a7d0 100644 --- "a/knowledge-deposition/GoLang/Gorm/\350\277\236\346\216\245\346\225\260\346\215\256\345\272\223.html" +++ "b/knowledge-deposition/GoLang/Gorm/\350\277\236\346\216\245\346\225\260\346\215\256\345\272\223.html" @@ -6,14 +6,14 @@ 连接数据库 | mx52jing - - - + + + -
Skip to content
On this page

连接数据库

  • GORM官方支持的数据库类型有:MySQLPostgreSQLSQliteSQL Server

连接Mysql数据库

项目初始化

shell
go mod init gorm-related
+    
Skip to content
On this page

连接数据库

  • GORM官方支持的数据库类型有:MySQLPostgreSQLSQliteSQL Server

连接Mysql数据库

项目初始化

shell
go mod init gorm-related
 
  • 项目目录
shell
.
 ├── config
    └── db.yaml # 配置文件
@@ -187,8 +187,8 @@
 	})
 }
 
- - + + \ No newline at end of file diff --git a/knowledge-deposition/GoLang/JWT/JWT.html b/knowledge-deposition/GoLang/JWT/JWT.html index 37731563..f3a4ec50 100644 --- a/knowledge-deposition/GoLang/JWT/JWT.html +++ b/knowledge-deposition/GoLang/JWT/JWT.html @@ -6,16 +6,16 @@ JWT | mx52jing - - - + + + - - - + + + \ No newline at end of file diff --git a/knowledge-deposition/GoLang/Logger/Logrus/Hook.html b/knowledge-deposition/GoLang/Logger/Logrus/Hook.html index 63c65118..a7dc8430 100644 --- a/knowledge-deposition/GoLang/Logger/Logrus/Hook.html +++ b/knowledge-deposition/GoLang/Logger/Logrus/Hook.html @@ -6,14 +6,14 @@ Hook | mx52jing - - - + + + -
Skip to content
On this page

Hook

  • 通过使用hook,可以扩展logrus的功能

  • 可以为logrus设置hook,每条日志输出前都会执行hook的特定方法

  • 点击查看更多

Hook定义如下

Go
type Hook interface {
+    
Skip to content
On this page

Hook

  • 通过使用hook,可以扩展logrus的功能

  • 可以为logrus设置hook,每条日志输出前都会执行hook的特定方法

  • 点击查看更多

Hook定义如下

Go
type Hook interface {
 	Levels() []Level
 	Fire(*Entry) error
 }
@@ -51,8 +51,8 @@
 INFO[2023-08-08T22:59:39+08:00] logrus => Info        name=app
 */
 

上面的自定义HookLevels中只返回了logrus.InfoLevel,所以只有输出Info日志时,才会执行Fire方法,带上额外的name字段

- - + + \ No newline at end of file diff --git "a/knowledge-deposition/GoLang/Logger/Logrus/\345\237\272\347\241\200\347\224\250\346\263\225.html" "b/knowledge-deposition/GoLang/Logger/Logrus/\345\237\272\347\241\200\347\224\250\346\263\225.html" index 36b174f7..dcaee1e5 100644 --- "a/knowledge-deposition/GoLang/Logger/Logrus/\345\237\272\347\241\200\347\224\250\346\263\225.html" +++ "b/knowledge-deposition/GoLang/Logger/Logrus/\345\237\272\347\241\200\347\224\250\346\263\225.html" @@ -6,14 +6,14 @@ 基础用法 | mx52jing - - - + + + -
Skip to content
On this page

基础用法

下载依赖

Go
go get github.com/sirupsen/logrus
+    
Skip to content
On this page

基础用法

下载依赖

Go
go get github.com/sirupsen/logrus
 

输出log

Go
logrus.Errorln("logrus => Error")
 logrus.Warningln("logrus => Warn")
 logrus.Infoln("logrus => Info")
@@ -171,8 +171,8 @@
 	logrus.Debugln("自定义颜色 => Debug输出")
 }
 

logrus_custom_color

- - + + \ No newline at end of file diff --git "a/knowledge-deposition/GoLang/Logger/Logrus/\346\227\245\345\277\227\345\210\206\345\211\262.html" "b/knowledge-deposition/GoLang/Logger/Logrus/\346\227\245\345\277\227\345\210\206\345\211\262.html" index 47b3ac55..c1a1c8ff 100644 --- "a/knowledge-deposition/GoLang/Logger/Logrus/\346\227\245\345\277\227\345\210\206\345\211\262.html" +++ "b/knowledge-deposition/GoLang/Logger/Logrus/\346\227\245\345\277\227\345\210\206\345\211\262.html" @@ -6,14 +6,14 @@ 日志分割 | mx52jing - - - + + + -
Skip to content
On this page

日志分割

功能

  • 根据设置的时间纬度切割日志,每个时间点都新创建一个文件夹

  • 单个日志文件超过一定大小就压缩成.gz文件

  • 只输出DEBUGERROR日志(想要定制也可以)

按照分钟切割生成logs文件目录如下

shell
logs
+    
Skip to content
On this page

日志分割

功能

  • 根据设置的时间纬度切割日志,每个时间点都新创建一个文件夹

  • 单个日志文件超过一定大小就压缩成.gz文件

  • 只输出DEBUGERROR日志(想要定制也可以)

按照分钟切割生成logs文件目录如下

shell
logs
 ├── debug
    ├── 202308232347
    │   ├── 202308232347-debug-0.log.gz
@@ -318,8 +318,8 @@
 	rwLock = sync.RWMutex{}
 }
 
- - + + \ No newline at end of file diff --git "a/knowledge-deposition/GoLang/Logger/Zap/zap\344\275\277\347\224\250.html" "b/knowledge-deposition/GoLang/Logger/Zap/zap\344\275\277\347\224\250.html" index 991e4d53..1ea8f488 100644 --- "a/knowledge-deposition/GoLang/Logger/Zap/zap\344\275\277\347\224\250.html" +++ "b/knowledge-deposition/GoLang/Logger/Zap/zap\344\275\277\347\224\250.html" @@ -6,14 +6,14 @@ zap使用 | mx52jing - - - + + + -
Skip to content
On this page

zap使用

zapUber开发的一款高性能、结构化日志库,以其极低的内存分配和CPU消耗而著称

下载依赖

shell
go get -u go.uber.org/zap
+    
Skip to content
On this page

zap使用

zapUber开发的一款高性能、结构化日志库,以其极低的内存分配和CPU消耗而著称

下载依赖

shell
go get -u go.uber.org/zap
 

日志记录器

zap提供了两种日志记录器:LoggerSugaredLogger,它们在性能易用性方面有所不同

  • *zap.Logger:提供了更为结构化且性能更高的日志记录。它使用强类型的API,在编译时就能获得类型安全检测,但是使用起来稍微复杂一些。它非常适合需要高性能和强类型的场景。使用*zap.Logger时,需要明确日志字段的类型
Go
logger.Info("failed to fetch URL",
     zap.String("url", url),
     zap.Int("attempt", 3),
@@ -415,8 +415,8 @@
 	RunServer()
 }
 
- - + + \ No newline at end of file diff --git "a/knowledge-deposition/GoLang/\345\212\240\345\257\206/AES\345\212\240\345\257\206.html" "b/knowledge-deposition/GoLang/\345\212\240\345\257\206/AES\345\212\240\345\257\206.html" index a13af045..f119feea 100644 --- "a/knowledge-deposition/GoLang/\345\212\240\345\257\206/AES\345\212\240\345\257\206.html" +++ "b/knowledge-deposition/GoLang/\345\212\240\345\257\206/AES\345\212\240\345\257\206.html" @@ -6,14 +6,14 @@ AES加密 | mx52jing - - - + + + -
Skip to content
On this page

AES加密

AES是常用的一种对称加密,加密和解密使用相同的key

记录前端实现AES加/解密,配合后端使用Go实现AES加/解密的过程

前端代码

  • 下载crypto-js
shell
pnpm install crypto-js
+    
Skip to content
On this page

AES加密

AES是常用的一种对称加密,加密和解密使用相同的key

记录前端实现AES加/解密,配合后端使用Go实现AES加/解密的过程

前端代码

  • 下载crypto-js
shell
pnpm install crypto-js
 

前端实现

javascript
/**
  * AES 对称加密
  * 加密解密,加密的解密使用相同的key
@@ -296,8 +296,8 @@
 	}
 }
 

参考

- - + + \ No newline at end of file diff --git "a/knowledge-deposition/GoLang/\345\212\240\345\257\206/RSA\345\212\240\345\257\206.html" "b/knowledge-deposition/GoLang/\345\212\240\345\257\206/RSA\345\212\240\345\257\206.html" index 99d002f0..28807a49 100644 --- "a/knowledge-deposition/GoLang/\345\212\240\345\257\206/RSA\345\212\240\345\257\206.html" +++ "b/knowledge-deposition/GoLang/\345\212\240\345\257\206/RSA\345\212\240\345\257\206.html" @@ -6,14 +6,14 @@ RSA | mx52jing - - - + + + -
Skip to content
On this page

RSA

AES是常用的一种非对称加密,有公钥私钥,使用公钥加密可以通过私钥解密,同样使用私钥加密可以通过公钥解密

记录前端实现RSA加/解密,配合后端使用Go实现AES加/解密的过程

生成公钥和私钥

shell
# 生成1024位的RSA私钥:
+    
Skip to content
On this page

RSA

AES是常用的一种非对称加密,有公钥私钥,使用公钥加密可以通过私钥解密,同样使用私钥加密可以通过公钥解密

记录前端实现RSA加/解密,配合后端使用Go实现AES加/解密的过程

生成公钥和私钥

shell
# 生成1024位的RSA私钥:
 openssl genrsa -out data/rsa_private_key.pem 1024
 
 # 根据私钥生成公钥:
@@ -157,8 +157,8 @@
 	}
 }
 

参考

- - + + \ No newline at end of file diff --git "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/Context.html" "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/Context.html" index 67a8fdbb..1540757e 100644 --- "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/Context.html" +++ "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/Context.html" @@ -6,14 +6,14 @@ Context | mx52jing - - - + + + -
Skip to content
On this page

Context

概念

  • Context本质上是一个接口
Go
type Context interface {
+    
Skip to content
On this page

Context

概念

  • Context本质上是一个接口
Go
type Context interface {
     Deadline() (deadline time.Time, ok bool)
     Done() <-chan struct{}
     Err() error
@@ -147,8 +147,8 @@
 child2的name为南山,age为22, like为[篮球 乒乓球]
 */
 
- - + + \ No newline at end of file diff --git "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/Select.html" "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/Select.html" index 2035e210..deeb7832 100644 --- "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/Select.html" +++ "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/Select.html" @@ -6,14 +6,14 @@ Select | mx52jing - - - + + + -
Skip to content
On this page

Select

  • select语句用在多个发送/接收通道操作中进行选择
    • select语句会一直阻塞,直到发送/接收操作准备就绪
    • 如果有多个通道操作准备完毕, select随机地选取其中之一执行
  • select里的case表达式只能对通道进行操作,不管是往通道写入数据,还是从通道读出数据

语法如下

Go
select {
+    
Skip to content
On this page

Select

  • select语句用在多个发送/接收通道操作中进行选择
    • select语句会一直阻塞,直到发送/接收操作准备就绪
    • 如果有多个通道操作准备完毕, select随机地选取其中之一执行
  • select里的case表达式只能对通道进行操作,不管是往通道写入数据,还是从通道读出数据

语法如下

Go
select {
   case expression1:
     ...
   case expression2:
@@ -158,8 +158,8 @@
 	testTimeout1() // 超时处理了
 }
 

上面的例子,由于超时时间设置的1s,但是2s后才像通道中发送数据,所以会走超时处理

- - + + \ No newline at end of file diff --git "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/Test.html" "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/Test.html" index 0e1923c0..a7f0b850 100644 --- "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/Test.html" +++ "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/Test.html" @@ -6,14 +6,14 @@ Test | mx52jing - - - + + + -
Skip to content
On this page

Test

Go中,可以使用内置的测试框架来进行单元测试基准测试,帮助开发者编写、运行和管理测试代码,以确保代码的质量和稳定性

单元测试

简单测试

Go中编写一个简单测试的流程:

  1. 创建测试文件:测试文件应该与被测试的代码所在的文件放在同一个包中,测试文件需要以_test.go结尾

例如:要测试名为foo文件中的函数,需要创建一个名为foo_test.go的文件

  1. 编写测试函数:测试函数都要以Test开头,Test后面跟被测试函数的名称,参数是t *testing.T

例如:要测试名为foo的函数,可以创建一个名为TestFoo的测试函数,func TestFoo(t *testing.T)

  1. 编写测试代码:测试函数中需要编写测试代码,用来验证被测试函数的行为是否符合预期。

测试代码中,应该使用t.Errort.Fail等函数来报告测试失败结果

  1. 运行测试代码:

在命令行中使用go test命令来运行测试,如果测试通过,将输出PASS,如果测试失败,将输出失败的测试用例的详细信息

代码示例

代码目录结构

shell
.test-related
+    
Skip to content
On this page

Test

Go中,可以使用内置的测试框架来进行单元测试基准测试,帮助开发者编写、运行和管理测试代码,以确保代码的质量和稳定性

单元测试

简单测试

Go中编写一个简单测试的流程:

  1. 创建测试文件:测试文件应该与被测试的代码所在的文件放在同一个包中,测试文件需要以_test.go结尾

例如:要测试名为foo文件中的函数,需要创建一个名为foo_test.go的文件

  1. 编写测试函数:测试函数都要以Test开头,Test后面跟被测试函数的名称,参数是t *testing.T

例如:要测试名为foo的函数,可以创建一个名为TestFoo的测试函数,func TestFoo(t *testing.T)

  1. 编写测试代码:测试函数中需要编写测试代码,用来验证被测试函数的行为是否符合预期。

测试代码中,应该使用t.Errort.Fail等函数来报告测试失败结果

  1. 运行测试代码:

在命令行中使用go test命令来运行测试,如果测试通过,将输出PASS,如果测试失败,将输出失败的测试用例的详细信息

代码示例

代码目录结构

shell
.test-related
 ├── foo.go
 └── foo_test.go
 
Go
// foo.go
@@ -236,8 +236,8 @@
 PASS
 ok  	github.com/mx52jing/go-basic/test-related	3.670s
 
  • goos: darwin:表示当前操作系统

  • goarch: arm64:表示本机CPU架构

  • BenchmarkHandleJsonByJsonLibrary/Benchmark_HandleJsonByJsonLibrary-8 :BenchmarkHandleJsonByJsonLibrary代表运行的基准测试名称, 8代表使用的核心数。

  • 485083:表示这个基准测试一共运行了485083次,也就是代码中的b.N

  • 2453 ns/op:表示每次运行消耗的时间为2453ns

  • 912 B/op:表示每次运行消耗的内存数为912B

  • 23 allocs/op:表示每次运行进行23次内存申请

常用的基准测试命令

  • go test -bench .:运行当前目录下的所有基准测试,并输出测试结果

  • go test -bench=BenchmarkExample:只运行名为BenchmarkExample的基准测试,并输出测试结果

  • go test -bench=BenchmarkExample -benchtime=8s:运行名为BenchmarkExample的基准测试,测试时长为8秒,并输出测试结果

  • go test -bench=BenchmarkExample -cpu=8:使用8个CPU核心运行名为BenchmarkExample的基准测试,并输出测试结果

  • go test -bench=BenchmarkExample -memprofile=mem.out:运行名为BenchmarkExample的基准测试,并生成内存分配统计文件mem.out

  • go test -bench=BenchmarkExample -cpuprofile=cpu.out:运行名为BenchmarkExample的基准测试,并生成CPU分析文件cpu.out

  • go test -bench=BenchmarkExample -benchmem:运行名为BenchmarkExample的基准测试,并输出每次测试分配的内存和内存分配次数的平均值

- - + + \ No newline at end of file diff --git "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/fmt\350\276\223\345\207\272\345\220\253\344\271\211.html" "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/fmt\350\276\223\345\207\272\345\220\253\344\271\211.html" index b82f2a2e..a18bf73c 100644 --- "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/fmt\350\276\223\345\207\272\345\220\253\344\271\211.html" +++ "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/fmt\350\276\223\345\207\272\345\220\253\344\271\211.html" @@ -6,14 +6,14 @@ fmt使用 | mx52jing - - - + + + -
Skip to content
On this page

fmt使用

占位符含义

格式含义
%b一个二进制整数值(基数为2),或者是一个(高级的)用科学计数法表示的指数为2的浮点数
%c字符型,可以把输入的数字按照ASCII码相应转换为对应的字符
%d一个十进制数值(基数为10)
%f标准记数法表示的浮点数或者复数值
%o一个以八进制表示的数字(基数为8)
%p十六进制(基数为16)表示的一个值的地址,前缀为0x,字母使用小写的a-f表示
%q使用Go语法以及必须时使用转义,以双引号括起来的字符串或者字节切片[]byte,或者是以单引号括起来的数字
%s字符串,输出字符串中的字符直至字符串中的空字符(字符串以’\0‘结尾,这个’\0’即空字符)
%ttrue或者false输出的布尔值
%T使用Go语法输出的值的类型
%v输出变量的
%x十六进制表示的整型值(基数为十六),数字a-f使用小写表示
%X十六进制表示的整型值(基数为十六),数字A-F使用大写表示

方法

fmt.Fprintf

  • Fprintf函数将格式化的字符串写入io.Writer接口实现(如标准输出文件等)
Go
func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error)
+    
Skip to content
On this page

fmt使用

占位符含义

格式含义
%b一个二进制整数值(基数为2),或者是一个(高级的)用科学计数法表示的指数为2的浮点数
%c字符型,可以把输入的数字按照ASCII码相应转换为对应的字符
%d一个十进制数值(基数为10)
%f标准记数法表示的浮点数或者复数值
%o一个以八进制表示的数字(基数为8)
%p十六进制(基数为16)表示的一个值的地址,前缀为0x,字母使用小写的a-f表示
%q使用Go语法以及必须时使用转义,以双引号括起来的字符串或者字节切片[]byte,或者是以单引号括起来的数字
%s字符串,输出字符串中的字符直至字符串中的空字符(字符串以’\0‘结尾,这个’\0’即空字符)
%ttrue或者false输出的布尔值
%T使用Go语法输出的值的类型
%v输出变量的
%x十六进制表示的整型值(基数为十六),数字a-f使用小写表示
%X十六进制表示的整型值(基数为十六),数字A-F使用大写表示

方法

fmt.Fprintf

  • Fprintf函数将格式化的字符串写入io.Writer接口实现(如标准输出文件等)
Go
func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error)
 

使用示例

Go
fmt.Fprintf(os.Stdout, "Hello, %s!\n", "Go")
 

fmt.Println

  • Println函数将给定的参数格式化为字符串并输出到标准输出,并在输出后添加一个换行符
Go
func Println(a ...interface{}) (n int, err error)
 

使用示例

Go
fmt.Println("Hello, Go!")
@@ -25,8 +25,8 @@
 message := fmt.Sprintf("Hello, %s!", name)
 fmt.Println(message)
 

总结

  • fmt.Fprintf用于将格式化的内容写入指定的io.Writer接口实现(比如文件、网络连接等)

  • fmt.Println用于将格式化的内容输出到标准输出,并在最后添加一个换行符

  • fmt.Printf用于将格式化的内容输出到标准输出,可以使用占位符来表示要输出的值

  • fmt.Sprintf用于将格式化的内容返回为一个字符串,而不是直接输出到标准输出或其他地方

- - + + \ No newline at end of file diff --git "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/json\345\272\217\345\210\227\345\214\226.html" "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/json\345\272\217\345\210\227\345\214\226.html" index 5d386b83..6430ef9e 100644 --- "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/json\345\272\217\345\210\227\345\214\226.html" +++ "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/json\345\272\217\345\210\227\345\214\226.html" @@ -6,14 +6,14 @@ json序列化 | mx52jing - - - + + + -
Skip to content
On this page

json序列化

json.Marshal

  • 可以使用json.Marshal方法将结构体转换为二进制流
Go
func json.Marshal(v any) ([]byte, error)
+    
Skip to content
On this page

json序列化

json.Marshal

  • 可以使用json.Marshal方法将结构体转换为二进制流
Go
func json.Marshal(v any) ([]byte, error)
 

代码示例

Go
package main
 
 import (
@@ -99,8 +99,8 @@
 	fmt.Printf("cls的值为 %v\n", cls)
 }
 

sonic

上面使用的库是go语言提供的标准库,字节跳动提供了一个更高效的json序列化sonic,地址点击这里,也能够实现上面的功能

- - + + \ No newline at end of file diff --git "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/strings\345\214\205.html" "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/strings\345\214\205.html" index 02360649..a2c4fad0 100644 --- "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/strings\345\214\205.html" +++ "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/strings\345\214\205.html" @@ -6,14 +6,14 @@ strings包 | mx52jing - - - + + + -
Skip to content
On this page

strings包

Go中使用strings包来完成对字符串的操作

判断前缀/后缀

HasPrefix

  • 使用strings.HasPrefix判断字符串str是否以prefix开头
Go
strings.HasPrefix(str, prefix string) bool
+    
Skip to content
On this page

strings包

Go中使用strings包来完成对字符串的操作

判断前缀/后缀

HasPrefix

  • 使用strings.HasPrefix判断字符串str是否以prefix开头
Go
strings.HasPrefix(str, prefix string) bool
 

代码示例

Go
str1 := "hash是开发计划"
 fmt.Println(strings.HasPrefix(str1, "hash")) // true
 fmt.Println(strings.HasPrefix(str1, "ha")) // true
@@ -83,8 +83,8 @@
 fmt.Println(strings.Join(name, " ")) // "张环 李朗 沈韬 肖豹"
 fmt.Println(strings.Join(name, "%")) // "张环%李朗%沈韬%肖豹"
 
- - + + \ No newline at end of file diff --git "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/time\345\214\205.html" "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/time\345\214\205.html" index 348a9f69..739a9f18 100644 --- "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/time\345\214\205.html" +++ "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/time\345\214\205.html" @@ -6,14 +6,14 @@ time包 | mx52jing - - - + + + -
Skip to content
On this page

time包

查看当前时间

Go
func Now() Time
+    
Skip to content
On this page

time包

查看当前时间

Go
func Now() Time
 

TIP

时间戳精确到

代码示例

Go
// 获取当前时间
 t := time.Now()
 // 获取当前时间戳
@@ -149,8 +149,8 @@
 	burstyLimter()
 }
 
- - + + \ No newline at end of file diff --git "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/url\345\214\205.html" "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/url\345\214\205.html" index 449fc883..9a6ed6e5 100644 --- "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/url\345\214\205.html" +++ "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/url\345\214\205.html" @@ -6,14 +6,14 @@ url包 | mx52jing - - - + + + -
Skip to content
On this page

url包

net/url包在Go语言中用于解析和构建URL

url.Parse

url.Parse方法用于解析一个URL字符串并返回一个*url.URL对象。url.URL对象如下:

Go
// URL's String method uses the EscapedPath method to obtain the path.
+    
Skip to content
On this page

url包

net/url包在Go语言中用于解析和构建URL

url.Parse

url.Parse方法用于解析一个URL字符串并返回一个*url.URL对象。url.URL对象如下:

Go
// URL's String method uses the EscapedPath method to obtain the path.
 type URL struct {
 	Scheme      string
 	Opaque      string    // encoded opaque data
@@ -297,8 +297,8 @@
 	urlIsAbs()
 }
 
- - + + \ No newline at end of file diff --git "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\345\207\275\346\225\260.html" "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\345\207\275\346\225\260.html" index 39ebd2c4..79a7f7df 100644 --- "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\345\207\275\346\225\260.html" +++ "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\345\207\275\346\225\260.html" @@ -6,14 +6,14 @@ 函数 | mx52jing - - - + + + -
Skip to content
On this page

函数

函数声明

Go
func function_name(arguments) [function_result_value] {
+    
Skip to content
On this page

函数

函数声明

Go
func function_name(arguments) [function_result_value] {
   ...
 }
 

函数参数

固定长度的参数

  • 如果函数参数的类型都一样可以只在最后一个参数后面写类型
Go
// 如果参数的类型都一样可以只在最后一个参数后面写类型
@@ -130,8 +130,8 @@
 	fmt.Println(increment_value, isLarge) // 8 false
 }
 
- - + + \ No newline at end of file diff --git "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\345\215\217\347\250\213.html" "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\345\215\217\347\250\213.html" index c11f0d55..73b69ac1 100644 --- "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\345\215\217\347\250\213.html" +++ "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\345\215\217\347\250\213.html" @@ -6,14 +6,14 @@ 协程Groutine | mx52jing - - - + + + -
Skip to content
On this page

协程Groutine

  • Go语言的协程(Groutine)是与其他函数或方法一起并发运行的工作方式

  • 协程可以看作是轻量级线程,与线程相比,创建一个协程的成本很小,因此在Go应用中,常常会看到会有很多协程并发地运行

启动一个协程

  • 调用函数或者方法时,如果在前面加上关键字go,就可以让一个新的Go协程并发地运行
Go
// 定义一个函数
+    
Skip to content
On this page

协程Groutine

  • Go语言的协程(Groutine)是与其他函数或方法一起并发运行的工作方式

  • 协程可以看作是轻量级线程,与线程相比,创建一个协程的成本很小,因此在Go应用中,常常会看到会有很多协程并发地运行

启动一个协程

  • 调用函数或者方法时,如果在前面加上关键字go,就可以让一个新的Go协程并发地运行
Go
// 定义一个函数
 func func_name(arguments) return_value {
   ...
 }
@@ -57,8 +57,8 @@
 	// loopPrint函数之后
 }
 
- - + + \ No newline at end of file diff --git "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\345\215\217\347\250\213\345\256\211\345\205\250.html" "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\345\215\217\347\250\213\345\256\211\345\205\250.html" index 02bf763c..3df57749 100644 --- "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\345\215\217\347\250\213\345\256\211\345\205\250.html" +++ "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\345\215\217\347\250\213\345\256\211\345\205\250.html" @@ -6,14 +6,14 @@ 协程安全 | mx52jing - - - + + + -
Skip to content
On this page

协程安全

当程序并发执行时,如果同时操作一份数据, 就可能会出现问题,如下:

我想让钱包中的钱增加,于是开启了1万个协程,每次将钱包的钱增加1万,理想的结果最终是10000*10000 = 100000000,但运行结果却不尽人意

第一次结果:93380000,第二次结果92660000,第三次结果92560000

Go
type WalletV1 struct {
+    
Skip to content
On this page

协程安全

当程序并发执行时,如果同时操作一份数据, 就可能会出现问题,如下:

我想让钱包中的钱增加,于是开启了1万个协程,每次将钱包的钱增加1万,理想的结果最终是10000*10000 = 100000000,但运行结果却不尽人意

第一次结果:93380000,第二次结果92660000,第三次结果92560000

Go
type WalletV1 struct {
 	balance int
 }
 
@@ -110,8 +110,8 @@
 	saveMoneyV3()
 }
 
- - + + \ No newline at end of file diff --git "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\345\217\230\351\207\217\345\270\270\351\207\217.html" "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\345\217\230\351\207\217\345\270\270\351\207\217.html" index 0801792f..f920d15a 100644 --- "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\345\217\230\351\207\217\345\270\270\351\207\217.html" +++ "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\345\217\230\351\207\217\345\270\270\351\207\217.html" @@ -6,14 +6,14 @@ 变量常量 | mx52jing - - - + + + -
Skip to content
On this page

变量常量

声明变量

Go
// 下面两种形式都可以声明一个变量
+    
Skip to content
On this page

变量常量

声明变量

Go
// 下面两种形式都可以声明一个变量
 var varibale_name [variable_type] = variable_value
 varibale_name := variable_value
 

使用var关键字来声明变量

Go
var a int = 1
@@ -63,8 +63,8 @@
 //【D0, D2, D5】: 0 4 8
 fmt.Println("【D0】:", D0, D2, D5)
 
- - + + \ No newline at end of file diff --git "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\345\237\272\347\241\200\346\225\260\346\215\256\347\261\273\345\236\213.html" "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\345\237\272\347\241\200\346\225\260\346\215\256\347\261\273\345\236\213.html" index 5eef2b2b..6a6d265d 100644 --- "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\345\237\272\347\241\200\346\225\260\346\215\256\347\261\273\345\236\213.html" +++ "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\345\237\272\347\241\200\346\225\260\346\215\256\347\261\273\345\236\213.html" @@ -6,14 +6,14 @@ 基础数据类型 | mx52jing - - - + + + -
Skip to content
On this page

基础数据类型

整型

有符号整型

  • int8
  • int16
  • int32
  • int64
  • int

示例

Go
package main
+    
Skip to content
On this page

基础数据类型

整型

有符号整型

  • int8
  • int16
  • int32
  • int64
  • int

示例

Go
package main
 
 import (
 	"fmt"
@@ -133,8 +133,8 @@
 	testBool()
 }
 
- - + + \ No newline at end of file diff --git "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\346\214\207\351\222\210.html" "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\346\214\207\351\222\210.html" index 45372490..9e10d3bc 100644 --- "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\346\214\207\351\222\210.html" +++ "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\346\214\207\351\222\210.html" @@ -6,14 +6,14 @@ 指针 | mx52jing - - - + + + -
Skip to content
On this page

指针

  • 指针也是一种类型,也可以创建变量,称之为指针变量;

  • 指针变量的类型为*Type,该指针指向一个Type类型的变量;

  • 指针存储某个实际变量的内存地址,通过记录某个变量的地址,从而间接的操作该变量;

指针操作符

  • &: 该操作符可以获取到一个变量的内存地址

  • *: 有两种含义:

    • 如果*操作符在赋值操作的左边(也就是等号(=)的左边),则表示该指针指向的变量
    • 如果*操作符在赋值操作的右边(也就是等号(=)的右边边),则表示该指针指向的变量的值,又称指针的解引用
Go
func p() {
+    
Skip to content
On this page

指针

  • 指针也是一种类型,也可以创建变量,称之为指针变量;

  • 指针变量的类型为*Type,该指针指向一个Type类型的变量;

  • 指针存储某个实际变量的内存地址,通过记录某个变量的地址,从而间接的操作该变量;

指针操作符

  • &: 该操作符可以获取到一个变量的内存地址

  • *: 有两种含义:

    • 如果*操作符在赋值操作的左边(也就是等号(=)的左边),则表示该指针指向的变量
    • 如果*操作符在赋值操作的右边(也就是等号(=)的右边边),则表示该指针指向的变量的值,又称指针的解引用
Go
func p() {
 	x := "蛇灵-血灵"
 	y := &x
 	
@@ -124,8 +124,8 @@
 	fmt.Println(colleague++)
 }
 
- - + + \ No newline at end of file diff --git "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\346\216\245\345\217\243.html" "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\346\216\245\345\217\243.html" index 332ee8d5..89aaf40e 100644 --- "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\346\216\245\345\217\243.html" +++ "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\346\216\245\345\217\243.html" @@ -6,14 +6,14 @@ 接口 | mx52jing - - - + + + -
Skip to content
On this page

接口

  • go的接口是一种抽象的自定义类型,没法直接实例化,它声明了一个或者多个方法的签名;
  • 如果一个struct实现了一个接口定义的所有方法,我们就说这个struct实现了这个接口。注意这里的实现隐式的,不用显示声明某个struct实现了哪个接口

定义接口

Go
type interface_name interface {
+    
Skip to content
On this page

接口

  • go的接口是一种抽象的自定义类型,没法直接实例化,它声明了一个或者多个方法的签名;
  • 如果一个struct实现了一个接口定义的所有方法,我们就说这个struct实现了这个接口。注意这里的实现隐式的,不用显示声明某个struct实现了哪个接口

定义接口

Go
type interface_name interface {
   method1()
   method2()
   ...
@@ -152,8 +152,8 @@
 	assertType(false)
 }
 
- - + + \ No newline at end of file diff --git "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\346\225\260\347\273\204\343\200\201\345\210\207\347\211\207\343\200\201Map.html" "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\346\225\260\347\273\204\343\200\201\345\210\207\347\211\207\343\200\201Map.html" index e5a1ab5b..4c2a9d6b 100644 --- "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\346\225\260\347\273\204\343\200\201\345\210\207\347\211\207\343\200\201Map.html" +++ "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\346\225\260\347\273\204\343\200\201\345\210\207\347\211\207\343\200\201Map.html" @@ -6,14 +6,14 @@ 数组、切片、Map | mx52jing - - - + + + -
Skip to content
On this page

数组、切片、Map

数组

TIP

数组是值类型不是引用类型

数组是一个由固定长度特定类型元素组成的序列,一个数组可以由零个多个元素组成。由于长度固定,所以在实际应用中很少使用,一般都使用Slice(切片),它是可以动态的增长和收缩的序列

数组声明

声明数组的几种方式

Go
var variable_name [arr_length]value_type
+    
Skip to content
On this page

数组、切片、Map

数组

TIP

数组是值类型不是引用类型

数组是一个由固定长度特定类型元素组成的序列,一个数组可以由零个多个元素组成。由于长度固定,所以在实际应用中很少使用,一般都使用Slice(切片),它是可以动态的增长和收缩的序列

数组声明

声明数组的几种方式

Go
var variable_name [arr_length]value_type
 var variable_name = [arr_length]value_type{val1, val2, ...}
 variable_name := [arr_length]value_type{val1, val2, ...}
 variable_name := [...]value_type{val1, val2, ...}
@@ -406,8 +406,8 @@
 	fmt.Println("personMap值为:", personMap)
 }
 
- - + + \ No newline at end of file diff --git "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\346\226\207\344\273\266\346\223\215\344\275\234/index.html" "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\346\226\207\344\273\266\346\223\215\344\275\234/index.html" index 43f6fce1..fa614ad1 100644 --- "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\346\226\207\344\273\266\346\223\215\344\275\234/index.html" +++ "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\346\226\207\344\273\266\346\223\215\344\275\234/index.html" @@ -6,14 +6,14 @@ 文件操作 | mx52jing - - - + + + -
Skip to content
On this page

文件操作

打开文件模式

Go
O_RDONLY int = syscall.O_RDONLY // open the file read-only.  只读
+    
Skip to content
On this page

文件操作

打开文件模式

Go
O_RDONLY int = syscall.O_RDONLY // open the file read-only.  只读
 O_WRONLY int = syscall.O_WRONLY // open the file write-only. 只写
 O_RDWR   int = syscall.O_RDWR   // open the file read-write. 读写
 
@@ -23,8 +23,8 @@
 O_SYNC   int = syscall.O_SYNC   // open for synchronous I/O. 同步I/O
 O_TRUNC  int = syscall.O_TRUNC  // truncate regular writable file when opened. 打开时清空文件
 
- - + + \ No newline at end of file diff --git "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\346\226\207\344\273\266\346\223\215\344\275\234/\345\206\231\346\226\207\344\273\266.html" "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\346\226\207\344\273\266\346\223\215\344\275\234/\345\206\231\346\226\207\344\273\266.html" index dbd4b02f..5af5ab3f 100644 --- "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\346\226\207\344\273\266\346\223\215\344\275\234/\345\206\231\346\226\207\344\273\266.html" +++ "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\346\226\207\344\273\266\346\223\215\344\275\234/\345\206\231\346\226\207\344\273\266.html" @@ -6,14 +6,14 @@ 写文件 | mx52jing - - - + + + -
Skip to content
On this page

写文件

常规写

Go
func (f *File) WriteString(s string) (n int, err error)
+    
Skip to content
On this page

写文件

常规写

Go
func (f *File) WriteString(s string) (n int, err error)
 
 func (f *File) Write(b []byte) (n int, err error) 
 

代码示例

Go
// 常规写入
@@ -117,8 +117,8 @@
 	binaryFileOperation2()
 }
 
- - + + \ No newline at end of file diff --git "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\346\226\207\344\273\266\346\223\215\344\275\234/\345\271\266\345\217\221\344\270\213\350\275\275\350\277\234\347\250\213\346\226\207\344\273\266.html" "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\346\226\207\344\273\266\346\223\215\344\275\234/\345\271\266\345\217\221\344\270\213\350\275\275\350\277\234\347\250\213\346\226\207\344\273\266.html" index a8778394..cb1dfd1c 100644 --- "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\346\226\207\344\273\266\346\223\215\344\275\234/\345\271\266\345\217\221\344\270\213\350\275\275\350\277\234\347\250\213\346\226\207\344\273\266.html" +++ "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\346\226\207\344\273\266\346\223\215\344\275\234/\345\271\266\345\217\221\344\270\213\350\275\275\350\277\234\347\250\213\346\226\207\344\273\266.html" @@ -6,14 +6,14 @@ 并发下载远程文件 | mx52jing - - - + + + -
Skip to content
On this page

并发下载远程文件

Go
package main
+    
-    
-    
+    
+    
     
   
 
\ No newline at end of file
diff --git "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\346\226\207\344\273\266\346\223\215\344\275\234/\346\226\207\344\273\266\345\244\215\345\210\266.html" "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\346\226\207\344\273\266\346\223\215\344\275\234/\346\226\207\344\273\266\345\244\215\345\210\266.html"
index d8670b79..4ec268d6 100644
--- "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\346\226\207\344\273\266\346\223\215\344\275\234/\346\226\207\344\273\266\345\244\215\345\210\266.html"
+++ "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\346\226\207\344\273\266\346\223\215\344\275\234/\346\226\207\344\273\266\345\244\215\345\210\266.html"
@@ -6,14 +6,14 @@
     文件复制 | mx52jing
     
     
-    
-    
-    
+    
+    
+    
     
     
   
   
-    
Skip to content
On this page

文件复制

  • 使用io.Copy方法
Go
func copyFile() {
+    
Skip to content
On this page

文件复制

  • 使用io.Copy方法
Go
func copyFile() {
 	readFile, readFileErr := os.Open("1.jpg")
 	defer readFile.Close()
 	if readFileErr != nil {
@@ -37,8 +37,8 @@
 	copyFile()
 }
 
- - + + \ No newline at end of file diff --git "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\346\226\207\344\273\266\346\223\215\344\275\234/\347\233\256\345\275\225\346\223\215\344\275\234.html" "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\346\226\207\344\273\266\346\223\215\344\275\234/\347\233\256\345\275\225\346\223\215\344\275\234.html" index 8bf7ca6d..30956562 100644 --- "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\346\226\207\344\273\266\346\223\215\344\275\234/\347\233\256\345\275\225\346\223\215\344\275\234.html" +++ "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\346\226\207\344\273\266\346\223\215\344\275\234/\347\233\256\345\275\225\346\223\215\344\275\234.html" @@ -6,14 +6,14 @@ 目录操作 | mx52jing - - - + + + -
Skip to content
On this page

目录操作

读取目录下文件

Go
func dirOperation() {
+    
Skip to content
On this page

目录操作

读取目录下文件

Go
func dirOperation() {
 	dirEntry, err := os.ReadDir(".")
 	if err != nil {
 		fmt.Println("dirEntry err", err)
@@ -133,8 +133,8 @@
 	fmt.Println("<<<count>>>", count)
 }
 
- - + + \ No newline at end of file diff --git "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\346\226\207\344\273\266\346\223\215\344\275\234/\350\257\273\345\217\226\351\205\215\347\275\256\346\226\207\344\273\266.html" "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\346\226\207\344\273\266\346\223\215\344\275\234/\350\257\273\345\217\226\351\205\215\347\275\256\346\226\207\344\273\266.html" index f4356791..0d0cf453 100644 --- "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\346\226\207\344\273\266\346\223\215\344\275\234/\350\257\273\345\217\226\351\205\215\347\275\256\346\226\207\344\273\266.html" +++ "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\346\226\207\344\273\266\346\223\215\344\275\234/\350\257\273\345\217\226\351\205\215\347\275\256\346\226\207\344\273\266.html" @@ -6,14 +6,14 @@ 读取配置文件 | mx52jing - - - + + + -
Skip to content
On this page

读取配置文件

使用viper读取jsonyaml或者其他配置文件

  • 目录结构
shell
.
+    
Skip to content
On this page

读取配置文件

使用viper读取jsonyaml或者其他配置文件

  • 目录结构
shell
.
 ├── config
    ├── user.json
    └── user.yaml
@@ -113,8 +113,8 @@
 	readJson()
 }
 
- - + + \ No newline at end of file diff --git "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\346\226\207\344\273\266\346\223\215\344\275\234/\350\257\273\346\226\207\344\273\266.html" "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\346\226\207\344\273\266\346\223\215\344\275\234/\350\257\273\346\226\207\344\273\266.html" index 96bbb229..a96e40a9 100644 --- "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\346\226\207\344\273\266\346\223\215\344\275\234/\350\257\273\346\226\207\344\273\266.html" +++ "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\346\226\207\344\273\266\346\223\215\344\275\234/\350\257\273\346\226\207\344\273\266.html" @@ -6,14 +6,14 @@ 读文件 | mx52jing - - - + + + -
Skip to content
On this page

读文件

一次读完整个文件

  • 使用os.ReadFile方法
Go
func ReadFile(name string) ([]byte, error)
+    
Skip to content
On this page

读文件

一次读完整个文件

  • 使用os.ReadFile方法
Go
func ReadFile(name string) ([]byte, error)
 

代码示例

要读取的1.txt文件

Go
你好,go语言 
 你好hello world
 从零开始学习go
@@ -114,8 +114,8 @@
 	demo5()
 }
 
- - + + \ No newline at end of file diff --git "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\346\265\201\347\250\213\346\216\247\345\210\266.html" "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\346\265\201\347\250\213\346\216\247\345\210\266.html" index bd581ed5..61faad00 100644 --- "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\346\265\201\347\250\213\346\216\247\345\210\266.html" +++ "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\346\265\201\347\250\213\346\216\247\345\210\266.html" @@ -6,14 +6,14 @@ 流程控制 | mx52jing - - - + + + -
Skip to content
On this page

流程控制

for循环

  • 循环语句中不用加()
  • for后面不跟随表达式等价于JavaScript中的while(true),此时语句中要有break/return,不然会无限循环
Go
package main
+    
Skip to content
On this page

流程控制

for循环

  • 循环语句中不用加()
  • for后面不跟随表达式等价于JavaScript中的while(true),此时语句中要有break/return,不然会无限循环
Go
package main
 
 import "fmt"
 
@@ -350,8 +350,8 @@
 	testDefineVariable()
 }
 
- - + + \ No newline at end of file diff --git "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\347\216\257\345\242\203\346\220\255\345\273\272.html" "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\347\216\257\345\242\203\346\220\255\345\273\272.html" index ee10ff88..054a3d57 100644 --- "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\347\216\257\345\242\203\346\220\255\345\273\272.html" +++ "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\347\216\257\345\242\203\346\220\255\345\273\272.html" @@ -6,14 +6,14 @@ 开发环境搭建 | mx52jing - - - + + + -
Skip to content
On this page

开发环境搭建

官网地址

下载Go

shell
brew install go
+    
Skip to content
On this page

开发环境搭建

官网地址

下载Go

shell
brew install go
 

查看go版本

shell
go version
 # go version go1.20.2 darwin/arm64
 

初始化一个项目

TIP

usernameproject最好都小写

shell
mkdir hello
@@ -49,8 +49,8 @@
 	golang.org/x/net v0.9.0 // indirect
 )
 
  • 然后执行go mod tidy

  • 然后就可以修改刚才克隆的源代码啦

- - + + \ No newline at end of file diff --git "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\347\273\223\346\236\204\344\275\223.html" "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\347\273\223\346\236\204\344\275\223.html" index 014ad4dc..31b4dc05 100644 --- "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\347\273\223\346\236\204\344\275\223.html" +++ "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\347\273\223\346\236\204\344\275\223.html" @@ -6,14 +6,14 @@ 结构体 | mx52jing - - - + + + -
Skip to content
On this page

结构体

声明结构体

Go
type struct_name struct {
+    
Skip to content
On this page

结构体

声明结构体

Go
type struct_name struct {
   property_one  property_one_type
   property_two  property_two_type
   ...
@@ -300,8 +300,8 @@
 	person17.changePersonAge(88)
 }
 
- - + + \ No newline at end of file diff --git "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\347\275\221\347\273\234/HTTP.html" "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\347\275\221\347\273\234/HTTP.html" index 67b31473..91f84b43 100644 --- "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\347\275\221\347\273\234/HTTP.html" +++ "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\347\275\221\347\273\234/HTTP.html" @@ -6,14 +6,14 @@ HTTP | mx52jing - - - + + + -
Skip to content
On this page

HTTP

HTTP服务端

  • 一个最简单的服务
Go
package main
+    
-    
-    
+    
+    
     
   
 
\ No newline at end of file
diff --git "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\347\275\221\347\273\234/RPC.html" "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\347\275\221\347\273\234/RPC.html"
index 983fba2b..6e75e6cb 100644
--- "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\347\275\221\347\273\234/RPC.html"
+++ "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\347\275\221\347\273\234/RPC.html"
@@ -6,14 +6,14 @@
     RPC | mx52jing
     
     
-    
-    
-    
+    
+    
+    
     
     
   
   
-    
Skip to content
On this page

RPC

Go程序可以通过net/rpc包相互通讯,所以这是另一个客户端-服务器端模式的应用。它提供了通过网络连接进行函数调用的便捷方法。

Server端

  • 创建一个用于计算的结构体对象Server,并且将它通过rpc.Register(object)注册,

  • 调用rpc.HandleHTTP方法

  • 调用net.Listen方法开启监听

  • 调用http.Serve启动服务

Go
package main
+    
Skip to content
On this page

RPC

Go程序可以通过net/rpc包相互通讯,所以这是另一个客户端-服务器端模式的应用。它提供了通过网络连接进行函数调用的便捷方法。

Server端

  • 创建一个用于计算的结构体对象Server,并且将它通过rpc.Register(object)注册,

  • 调用rpc.HandleHTTP方法

  • 调用net.Listen方法开启监听

  • 调用http.Serve启动服务

Go
package main
 
 import (
 	"fmt"
@@ -77,8 +77,8 @@
 	fmt.Println(res, "计算后的值")
 }
 
- - + + \ No newline at end of file diff --git "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\347\275\221\347\273\234/TCP.html" "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\347\275\221\347\273\234/TCP.html" index 2c53820d..d061d85a 100644 --- "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\347\275\221\347\273\234/TCP.html" +++ "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\347\275\221\347\273\234/TCP.html" @@ -6,14 +6,14 @@ TCP | mx52jing - - - + + + -
Skip to content
On this page

TCP

客户端和服务端通信示例

server.go

Go
package main
+    
-    
-    
+    
+    
     
   
 
\ No newline at end of file
diff --git "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\351\200\232\351\201\223channel.html" "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\351\200\232\351\201\223channel.html"
index 40395b9e..cc959dd4 100644
--- "a/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\351\200\232\351\201\223channel.html"
+++ "b/knowledge-deposition/GoLang/\345\237\272\347\241\200\347\237\245\350\257\206/\351\200\232\351\201\223channel.html"
@@ -6,14 +6,14 @@
     通道(channel) | mx52jing
     
     
-    
-    
-    
+    
+    
+    
     
     
   
   
-    
Skip to content
On this page

通道(channel)

  • 通道可以理解为Go协程通信的管道

  • 通道是队列式的数据结构,遵循先入先出的原则

  • 每个通道都只能传递一种数据类型的数据,在声明channel的时候,需要指定通道的类型

  • 通道的零值nil

通道的声明和初始化

  • 可以使用var关键字先声明一个channel,再使用make函数初始化

  • 也可以直接使用简短声明make来声明并初始化一个channel

格式如下:

Go
// 第一种方式
+    
Skip to content
On this page

通道(channel)

  • 通道可以理解为Go协程通信的管道

  • 通道是队列式的数据结构,遵循先入先出的原则

  • 每个通道都只能传递一种数据类型的数据,在声明channel的时候,需要指定通道的类型

  • 通道的零值nil

通道的声明和初始化

  • 可以使用var关键字先声明一个channel,再使用make函数初始化

  • 也可以直接使用简短声明make来声明并初始化一个channel

格式如下:

Go
// 第一种方式
 var chan_name chan_type // 声明
 channel_name = make(chan chan_type, [bufferSize]) // 初始化
 
@@ -256,8 +256,8 @@
 	fmt.Println("所有子goroutine已完成任务,可以继续执行后续操作")
 }
 
- - + + \ No newline at end of file diff --git "a/knowledge-deposition/Linux/Bash\345\237\272\347\241\200\347\237\245\350\257\206.html" "b/knowledge-deposition/Linux/Bash\345\237\272\347\241\200\347\237\245\350\257\206.html" index 81e5e24d..a4142978 100644 --- "a/knowledge-deposition/Linux/Bash\345\237\272\347\241\200\347\237\245\350\257\206.html" +++ "b/knowledge-deposition/Linux/Bash\345\237\272\347\241\200\347\237\245\350\257\206.html" @@ -6,14 +6,14 @@ Bash 基础语法 | mx52jing - - - + + + -
Skip to content
On this page

Bash 基础语法

文件格式

文件第一行#!/bin/bash或者#!/bin/sh#!告诉系统其后路径所指定的程序即是解释此脚本文件的Shell程序

运行bash脚本

  • 作为可执行程序
shell
chmod u+x ./test.sh // 添加运行权限
+    
Skip to content
On this page

Bash 基础语法

文件格式

文件第一行#!/bin/bash或者#!/bin/sh#!告诉系统其后路径所指定的程序即是解释此脚本文件的Shell程序

运行bash脚本

  • 作为可执行程序
shell
chmod u+x ./test.sh // 添加运行权限
 ./test.sh // 运行脚本
 
  • 作为解释器参数
shell
/bin/sh test.sh
 /bin/Bash test.sh
@@ -235,8 +235,8 @@
 

输入/输出重定向

设备设备文件名文件描述符类型
键盘/dev/stdin0标准输入
显示器/dev/stdout1标准输出
显示器/dev/stderr2标准错误输出

以下是一些常用的命令示意:

命令说明
command > file输出重定向到file
command < file输入重定向到file
command >> file输出追加的方式重定向到file
n > file文件描述符n的文件重定向到 file
n >> file将文件描述符n的文件以追加的方式重定向到 file
n >& m将输出文件mn合并
n <& m将输入文件mn合并
<< tag将开始标记tag和结束标记tag之间的内容作为输入

/dev/null 文件

如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到/dev/null

shell
command > /dev/null
 
  • /dev/null是一个特殊的文件,写入到它的内容都会被丢弃,通常也被成为位桶(bit bucket)黑洞;
  • 如果尝试从该文件读取内容,那么什么也读不到,但是/dev/null文件非常有用,将命令的输出重定向到它,会起到禁止输出的效果。

如果希望屏蔽stdoutstderr,可以这样写,表示命令的输出错误的输出都重定向到/dev/null

shell
command > /dev/null 2>&1
 

TIP

这里的2>之间不可以有空格,2>是一体的时候才表示错误输出。

- - + + \ No newline at end of file diff --git a/knowledge-deposition/MySQL/SQL.html b/knowledge-deposition/MySQL/SQL.html index e1802de5..a96a20d3 100644 --- a/knowledge-deposition/MySQL/SQL.html +++ b/knowledge-deposition/MySQL/SQL.html @@ -6,16 +6,16 @@ SQL | mx52jing - - - + + + -
Skip to content
On this page

SQL

  • SQLStructured Query Language结构化查询语言

SQL运算符

  • SQL运算符是一种符号,它是用来进行列间或者变量之间的比较数学运算的

算术运算符

运算符说明
+加运算,求两个数或表达式相加的和,如1+1
-减运算,求两个数或表达式相减的差,如4-1
*乘运算,求两个数或表达式相乘的积,如2*2
/除运算,求两个数或表达式相除的商,如6/4的值为1
%取模运算,求两个数或表达式相除的余数,如:6%4的值为2

逻辑运算符

运算符说明
AND当且仅当两个布尔表达式都为true时,返回TRUE
OR当且仅当两个布尔表达式都为false,返回FALSE
NOT布尔表达式的值取反

比较运算符

运算符说明
=等于
>大于
<小于
<>不等于
>=大于等于
<=小于等于
!=不等于
- - +
Skip to content
On this page

SQL

  • SQLStructured Query Language结构化查询语言

SQL运算符

  • SQL运算符是一种符号,它是用来进行列间或者变量之间的比较数学运算的

算术运算符

运算符说明
+加运算,求两个数或表达式相加的和,如1+1
-减运算,求两个数或表达式相减的差,如4-1
*乘运算,求两个数或表达式相乘的积,如2*2
/除运算,求两个数或表达式相除的商,如6/4的值为1
%取模运算,求两个数或表达式相除的余数,如:6%4的值为2

逻辑运算符

运算符说明
AND当且仅当两个布尔表达式都为true时,返回TRUE
OR当且仅当两个布尔表达式都为false,返回FALSE
NOT布尔表达式的值取反

比较运算符

运算符说明
=等于
>大于
<小于
<>不等于
>=大于等于
<=小于等于
!=不等于
+ + \ No newline at end of file diff --git "a/knowledge-deposition/MySQL/\345\207\275\346\225\260.html" "b/knowledge-deposition/MySQL/\345\207\275\346\225\260.html" index 3ab93677..1865999d 100644 --- "a/knowledge-deposition/MySQL/\345\207\275\346\225\260.html" +++ "b/knowledge-deposition/MySQL/\345\207\275\346\225\260.html" @@ -6,14 +6,14 @@ 函数 | mx52jing - - - + + + -
Skip to content
On this page

函数

字符函数


CONCAT拼接字符串

SQL
SELECT CONCAT(name, '-', age) FROM student WHERE age = '18';
+    
Skip to content
On this page

函数

字符函数


CONCAT拼接字符串

SQL
SELECT CONCAT(name, '-', age) FROM student WHERE age = '18';
 
 /** 结果如下:
 如燕-18
@@ -126,8 +126,8 @@
 # 再次查询 log_bin_trust_function_creators
 SHOW VARIABLES LIKE 'log_bin_trust_function_creators';
 
- - + + \ No newline at end of file diff --git "a/knowledge-deposition/MySQL/\345\210\206\347\273\204\345\222\214\345\255\220\346\237\245\350\257\242.html" "b/knowledge-deposition/MySQL/\345\210\206\347\273\204\345\222\214\345\255\220\346\237\245\350\257\242.html" index cd73ab7f..dbb54d33 100644 --- "a/knowledge-deposition/MySQL/\345\210\206\347\273\204\345\222\214\345\255\220\346\237\245\350\257\242.html" +++ "b/knowledge-deposition/MySQL/\345\210\206\347\273\204\345\222\214\345\255\220\346\237\245\350\257\242.html" @@ -6,14 +6,14 @@ 分组和子查询 | mx52jing - - - + + + -
Skip to content
On this page

分组和子查询

分组

分组语法如下:

SQL
SELECT 列名,查询表达式
+    
Skip to content
On this page

分组和子查询

分组

分组语法如下:

SQL
SELECT 列名,查询表达式
 FROM  <表名>  
 WHERE  <条件>
 GROUP BY <分组字段>
@@ -38,8 +38,8 @@
 SELECT t.* FROM teachers t WHERE age > SOME (SELECT age FROM teachers WHERE gender = '0') ORDER BY age DESC;
 

查询年龄大于所有男性(假设gender = 0 为男性)的数据,年龄比所有男性的年龄都大才会返回

SQL
SELECT t.* FROM teachers t WHERE age > ALL (SELECT age FROM teachers WHERE gender = '0') ORDER BY age DESC;
 
- - + + \ No newline at end of file diff --git "a/knowledge-deposition/MySQL/\345\237\272\347\241\200\347\237\245\350\257\206.html" "b/knowledge-deposition/MySQL/\345\237\272\347\241\200\347\237\245\350\257\206.html" index 4c8920df..3e6427c4 100644 --- "a/knowledge-deposition/MySQL/\345\237\272\347\241\200\347\237\245\350\257\206.html" +++ "b/knowledge-deposition/MySQL/\345\237\272\347\241\200\347\237\245\350\257\206.html" @@ -6,14 +6,14 @@ 基础知识 | mx52jing - - - + + + -
Skip to content
On this page

基础知识

数据库的功能

  • 存储大量数据,方便检索和访问

  • 保持数据信息的一致、完整

  • 共享和安全

  • 通过组合分析,产生新的有用信息

数据库的概念

数据库(DB)

  • 数据的仓库,可以存放结构化的数据

数据库管理系统(DBMS)

  • 一种系统软件,提供操作数据库的环境,可以通过数据库管理系统对数据进行插入修改删除查询等操作。

SQL

  • 结构化查询语言,专门用来和数据库进行交流的语言,几乎所有的DBMS都支持SQL

SQL规范

  • SQL语句不区分大小写,建议SQL关键字大写表名列表小写

  • 命令用分号结尾

  • 命令可以缩进和换行,一种类型的关键字放在一行

  • 可以写单行多行注释 , #--单行注释/***/多行注释

MySQL

连接MySQL

  • 通过命令行连接
shell
mysql -h 127.0.0.1 -P 3306 -uroot -p123456
+    
Skip to content
On this page

基础知识

数据库的功能

  • 存储大量数据,方便检索和访问

  • 保持数据信息的一致、完整

  • 共享和安全

  • 通过组合分析,产生新的有用信息

数据库的概念

数据库(DB)

  • 数据的仓库,可以存放结构化的数据

数据库管理系统(DBMS)

  • 一种系统软件,提供操作数据库的环境,可以通过数据库管理系统对数据进行插入修改删除查询等操作。

SQL

  • 结构化查询语言,专门用来和数据库进行交流的语言,几乎所有的DBMS都支持SQL

SQL规范

  • SQL语句不区分大小写,建议SQL关键字大写表名列表小写

  • 命令用分号结尾

  • 命令可以缩进和换行,一种类型的关键字放在一行

  • 可以写单行多行注释 , #--单行注释/***/多行注释

MySQL

连接MySQL

  • 通过命令行连接
shell
mysql -h 127.0.0.1 -P 3306 -uroot -p123456
 

切换数据库

SQL
USE database_name;
 # 例如
 USE student;
@@ -71,8 +71,8 @@
 )
     COMMENT '学生表';
 
- - + + \ No newline at end of file diff --git "a/knowledge-deposition/MySQL/\346\225\260\346\215\256\346\223\215\344\275\234\345\222\214\346\237\245\350\257\242.html" "b/knowledge-deposition/MySQL/\346\225\260\346\215\256\346\223\215\344\275\234\345\222\214\346\237\245\350\257\242.html" index 39db10eb..2c9739bf 100644 --- "a/knowledge-deposition/MySQL/\346\225\260\346\215\256\346\223\215\344\275\234\345\222\214\346\237\245\350\257\242.html" +++ "b/knowledge-deposition/MySQL/\346\225\260\346\215\256\346\223\215\344\275\234\345\222\214\346\237\245\350\257\242.html" @@ -6,14 +6,14 @@ 数据操作和查询 | mx52jing - - - + + + -
Skip to content
On this page

数据操作和查询

数据操作


插入

SQL
INSERT [INTO] 表名 [(列名)] VALUES (值列表);
+    
Skip to content
On this page

数据操作和查询

数据操作


插入

SQL
INSERT [INTO] 表名 [(列名)] VALUES (值列表);
 

WARNING

  • 每次插入一行数据,不能只插入一部分数据,插入的数据是否有效将按照整行的完整性要求来检验

  • 每个数据值的数据类型精度位数必须与要与对应的列名精确匹配

  • 不能为标识符指定值

  • 如果某字段设置为不能为空,则必须插入数据

  • 插入数据时还要符合检查性约束的要求

  • 缺省值的列,可以使用DEFAULT关键字来代替插入实际的值

例子

SQL
INSERT lyb.student (name, age, gender) VALUES ('张三', 22, 0);
 INSERT INTO lyb.student (name, age, gender) VALUES ('李四', 28, 0);
 

更新

SQL
UPDATE 表名 SET 列名 = 更新值 [WHERE 更新条件]
@@ -68,8 +68,8 @@
 

BETWEEN AND

  • 查询某一列在指定的规范内的记录,包括两个边界
SQL
SELECT * FROM student WHERE age BETWEEN '20' AND '22';
 

IN

  • 查询某一列中的值在列出的内容列表中
SQL
SELECT * FROM student WHERE province IN ('上海市', '广东省');
 
- - + + \ No newline at end of file diff --git "a/knowledge-deposition/MySQL/\350\241\250\350\277\236\346\216\245.html" "b/knowledge-deposition/MySQL/\350\241\250\350\277\236\346\216\245.html" index f6b7878a..201c1add 100644 --- "a/knowledge-deposition/MySQL/\350\241\250\350\277\236\346\216\245.html" +++ "b/knowledge-deposition/MySQL/\350\241\250\350\277\236\346\216\245.html" @@ -6,14 +6,14 @@ 表连接 | mx52jing - - - + + + -
Skip to content
On this page

表连接

表连接类型

  • INNER JOIN:内连接

  • LEFT JOIN:左外连接

  • RIGHT JOIN:右外连接

连接条件

使用ON关键字来设定连接条件,也可以使用WHERE

内连接INNER JOIN

  • 筛选同时符合左表和右表的查询条件(指连接结果仅包含符合连接条件的行,参与连接的两个表都应该符合连接条件)
SQL
# 使用ON关键字
+    
Skip to content
On this page

表连接

表连接类型

  • INNER JOIN:内连接

  • LEFT JOIN:左外连接

  • RIGHT JOIN:右外连接

连接条件

使用ON关键字来设定连接条件,也可以使用WHERE

内连接INNER JOIN

  • 筛选同时符合左表和右表的查询条件(指连接结果仅包含符合连接条件的行,参与连接的两个表都应该符合连接条件)
SQL
# 使用ON关键字
 SELECT * FROM student A INNER JOIN score B ON A.id = B.student_id;
 # 还可以使用WHERE,和上面的查询是一样的
 SELECT * FROM student A, score B WHERE A.id = B.student_id;
@@ -42,8 +42,8 @@
 WHERE s1.name = '胡凯'
 AND s2.name != '胡凯';
 
- - + + \ No newline at end of file diff --git "a/knowledge-deposition/Nacos/\345\237\272\346\234\254\346\246\202\345\277\265\345\222\214\345\256\211\350\243\205\345\220\257\345\212\250.html" "b/knowledge-deposition/Nacos/\345\237\272\346\234\254\346\246\202\345\277\265\345\222\214\345\256\211\350\243\205\345\220\257\345\212\250.html" index 1ff1d8a4..cf558198 100644 --- "a/knowledge-deposition/Nacos/\345\237\272\346\234\254\346\246\202\345\277\265\345\222\214\345\256\211\350\243\205\345\220\257\345\212\250.html" +++ "b/knowledge-deposition/Nacos/\345\237\272\346\234\254\346\246\202\345\277\265\345\222\214\345\256\211\350\243\205\345\220\257\345\212\250.html" @@ -6,14 +6,14 @@ 基本概念和安装启动 | mx52jing - - - + + + -
Skip to content
On this page

基本概念和安装启动

概念

Nacos(官方网站:nacos.io)是一个易于使用的平台,专为动态服务发现、配置和服务管理而设计。它帮助您轻松构建云原生应用程序和微服务平台。

Nacos提供四个主要功能:

  • 服务发现和服务健康检查

  • 动态配置管理

  • 动态 DNS 服务

  • 服务和元数据管理

启动Nacos

TIP

  • 启动nacos有单机模式运行集群模式,今天只使用单机模式

我们使用Docker来搭建Nacos服务,更多配置参考quick-start-docker

服务目录如下:

shell
.
+    
Skip to content
On this page

基本概念和安装启动

概念

Nacos(官方网站:nacos.io)是一个易于使用的平台,专为动态服务发现、配置和服务管理而设计。它帮助您轻松构建云原生应用程序和微服务平台。

Nacos提供四个主要功能:

  • 服务发现和服务健康检查

  • 动态配置管理

  • 动态 DNS 服务

  • 服务和元数据管理

启动Nacos

TIP

  • 启动nacos有单机模式运行集群模式,今天只使用单机模式

我们使用Docker来搭建Nacos服务,更多配置参考quick-start-docker

服务目录如下:

shell
.
 ├── .env # 环境变量文件,用于standalone-mysql-8.yaml读取环境变量
 ├── env
    ├── mysql.env # mysql 环境变量
@@ -101,8 +101,8 @@
 

WARNING

  • NACOS_AUTH_IDENTITY_KEYNACOS_AUTH_IDENTITY_VALUENACOS_AUTH_TOKEN要使用Base64编码的字符串,字符串长度最少32位c

然后重启docker服务

shell
docker-compose -f xxx.yml down
 docker-compose -f xxx.yml up -d
 

然后清空http://localhost:8848/nacos页面的localStorage的值,刷新页面,会出现登录界面

默认:用户名:nacos,密码:nacos

登录成功就可以啦

- - + + \ No newline at end of file diff --git "a/knowledge-deposition/Nacos/\346\223\215\344\275\234\345\212\250\346\200\201\351\205\215\347\275\256\346\226\207\344\273\266.html" "b/knowledge-deposition/Nacos/\346\223\215\344\275\234\345\212\250\346\200\201\351\205\215\347\275\256\346\226\207\344\273\266.html" index ecfdff0b..cc55b644 100644 --- "a/knowledge-deposition/Nacos/\346\223\215\344\275\234\345\212\250\346\200\201\351\205\215\347\275\256\346\226\207\344\273\266.html" +++ "b/knowledge-deposition/Nacos/\346\223\215\344\275\234\345\212\250\346\200\201\351\205\215\347\275\256\346\226\207\344\273\266.html" @@ -6,14 +6,14 @@ 操作动态配置文件 | mx52jing - - - + + + -
Skip to content
On this page

操作动态配置文件

Nacos可以动态读取修改删除配置文件,还可以监听配置文件修改

使用go sdk来实现

  • ClientConfig配置参数
Go
constant.ClientConfig {
+    
Skip to content
On this page

操作动态配置文件

Nacos可以动态读取修改删除配置文件,还可以监听配置文件修改

使用go sdk来实现

  • ClientConfig配置参数
Go
constant.ClientConfig {
     TimeoutMs   uint64 // timeout for requesting Nacos server, default value is 10000ms
     NamespaceId string // the namespaceId of Nacos
     Endpoint    string // the endpoint for ACM. https://help.aliyun.com/document_detail/130146.html
@@ -317,8 +317,8 @@
 	fetchRemoteConfig()
 }
 
- - + + \ No newline at end of file diff --git "a/knowledge-deposition/RabbitMQ/\345\217\221\345\270\203\350\256\242\351\230\205.html" "b/knowledge-deposition/RabbitMQ/\345\217\221\345\270\203\350\256\242\351\230\205.html" new file mode 100644 index 00000000..3f15cbc9 --- /dev/null +++ "b/knowledge-deposition/RabbitMQ/\345\217\221\345\270\203\350\256\242\351\230\205.html" @@ -0,0 +1,377 @@ + + + + + + 发布订阅 | mx52jing + + + + + + + + + +
Skip to content
On this page

发布订阅

之前的代码实现的都是一对一的模式,也就是一个任务分配给一个消费者去消费,但是其实也可以实现一个任务分配给多个消费者

可以使用发布/订阅模式来实现,这种模式下,要使用到交换机(Exchange)

交换机

交换机(Exchange)的作用从Producer处接收消息(Message),然后将消息发送到队列(Queues)

交换机(Exchange)必须明确自己如何去处理消息,这个规则取决于交换机的类型

交换机(Exchange)有这几种类型:TopicDirectHeadersFanout

之前的代码中都没有用到交换机(Exchange),都是直接声明一个具名队列

如下:函数ch.PublishWithContextexchange name是空字符串,这时会使用一个默认的交换机

Go
// 3. declare a queue,it will only be created if it doesn't exist already
+queue, err := ch.QueueDeclare(
+    "second_queue", // queue name
+    true,           // durable
+    false,          //delete when unused
+    false,          //exclusive
+    false,          // no-wait
+    nil,            // arguments
+)
+
+// publish message
+err = ch.PublishWithContext(
+    withTimeoutCtx,
+    "",         //exchange name
+    queue.Name, // routing key
+    false,      // mandatory
+    false,      //immediate
+    amqp.Publishing{
+        DeliveryMode: amqp.Persistent,
+        Body:         []byte(messageBody),
+        ContentType:  "text/plain",
+    },
+)
+

Direct(直连模式)

交换机(Exchange)将消息发送到某个匹配的队列中,匹配规则是:这个队列的binding key要和消息的routing key一致

TIP

  • 队列的binding key在调用ch.QueueBind方法时指定

  • 消息的routing key在调用ch.PublishWithContext方法中指定

适用于明确指定的路由,例如,处理特定类型的任务,简单示例代码如下:

producer.go

Go
// xxxx 其他代码
+// declare exchange
+err = ch.ExchangeDeclare(
+    "directLogs", // exchange name
+    "direct",      // exchange type
+    true,          // durable
+    false,         // auto-deleted
+    false,         // internal
+    false,         // no-wait
+    nil,           // arguments
+)
+// xxxx 其他代码
+err = ch.PublishWithContext(
+    ctx, // context
+    "directLogs", // exchange name
+    "directRoutingKey", // routing key
+    false, // mandatory
+    false, // immediate
+    amqp.Publishing{
+        DeliveryMode: amqp.Persistent,
+        ContentType:  "text/plain",
+        Body:         []byte(messageBody),
+    },
+)
+

consumer.go

Go
// xxxx 其他代码
+// declare exchange
+err = ch.ExchangeDeclare(
+    "directLogs", // exchange name
+    "direct",      // exchange type
+    true,          // durable
+    false,         // auto-deleted
+    false,         // internal
+    false,         // no-wait
+    nil,           // arguments
+)
+q, err := ch.QueueDeclare(
+    "directQueue", // name
+    true,    // durable
+    false,   // delete when unused
+    false,   // exclusive
+    false,   // no-wait
+    nil,     // arguments
+)
+// 将交换机和队列进行绑定
+err = ch.QueueBind(
+    q.Name,        // queue name
+    "directRoutingKey", // binding key
+    "directLogs", // exchange name
+    false,
+    nil,
+)
+// xxxx 其他代码
+

Topic(主题模式)

将接收到的消息放到和交换机指定的routing key匹配的队列里面

额外增加使用*(匹配一个单词)或使用#(匹配多个单词)

比起Direct模式,在验证routing key的时候,多了匹配规则

producer.go

Go
// xxxx 其他代码
+// declare exchange
+err = ch.ExchangeDeclare(
+    "topicTask", // exchange name
+    "topic",      // exchange type
+    true,          // durable
+    false,         // auto-deleted
+    false,         // internal
+    false,         // no-wait
+    nil,           // arguments
+)
+// xxxx 其他代码
+err = ch.PublishWithContext(
+    ctx, // context
+    "topicTask", // exchange name
+    "topicRoutingKey.abc", // routing key 
+    false, // mandatory
+    false, // immediate
+    amqp.Publishing{
+        DeliveryMode: amqp.Persistent,
+        ContentType:  "text/plain",
+        Body:         []byte(messageBody),
+    },
+)
+

consumer.go

Go
// xxxx 其他代码
+// declare exchange
+err = ch.ExchangeDeclare(
+    "topicTask", // exchange name
+    "topic",      // exchange type
+    true,          // durable
+    false,         // auto-deleted
+    false,         // internal
+    false,         // no-wait
+    nil,           // arguments
+)
+q, err := ch.QueueDeclare(
+    "topicQueue", // name
+    true,    // durable
+    false,   // delete when unused
+    false,   // exclusive
+    false,   // no-wait
+    nil,     // arguments
+)
+// 将交换机和队列进行绑定
+err = ch.QueueBind(
+    q.Name,        // queue name
+    "topicRoutingKey.*", // routing key 多了一个匹配规则
+    "topicTask", // exchange name
+    false,
+    nil,
+)
+// xxxx 其他代码
+

Headers(头部模式)

使用消息头属性(headers)来路由消息,而不是路由键,可以匹配多个头

使用Headers模式,不用指定routing key

amqp.Table的数据类型是Map

Go
type Table map[string]interface{}
+

producer.go

Go
// xxxx 其他代码
+// declare exchange
+err = ch.ExchangeDeclare(
+    "headersTask", // exchange name
+    "headers",      // exchange type
+    true,          // durable
+    false,         // auto-deleted
+    false,         // internal
+    false,         // no-wait
+    nil,           // arguments
+)
+// xxxx 其他代码
+err = ch.PublishWithContext(
+    ctx, // context
+    "headersTask", // exchange name
+    "", // routing key Headers模式下不用指定routing key
+    false, // mandatory
+    false, // immediate
+    amqp.Publishing{
+        DeliveryMode: amqp.Persistent,
+        ContentType:  "text/plain",
+        Body:         []byte(messageBody),
+        Headers: amqp.Table{ // Headers模式下,会检查该字段,要传该字段
+            "format": "pdf",
+            "type":   "report",
+        },
+    },
+)
+

consumer.go

Go
// xxxx 其他代码
+// declare exchange
+err = ch.ExchangeDeclare(
+    "headersTask", // exchange name
+    "headers",      // exchange type
+    true,          // durable
+    false,         // auto-deleted
+    false,         // internal
+    false,         // no-wait
+    nil,           // arguments
+)
+q, err := ch.QueueDeclare(
+    "headersQueue", // name
+    true,    // durable
+    false,   // delete when unused
+    false,   // exclusive
+    false,   // no-wait
+    nil,     // arguments
+)
+// 将交换机和队列进行绑定
+err = ch.QueueBind(
+    q.Name,        // queue name
+    "", // routing key
+    "headersTask", // exchange name
+    false,
+    amqp.Table{ // 此处要和上面发送时保持一致
+        "format": "pdf",
+        "type":   "report",
+    },
+)
+// xxxx 其他代码
+

Fanout(广播模式)

把消息放入交换机所有的队列,实现广播功能

Fanout模式会忽略routing key

producer.go

Go
// xxxx 其他代码
+// declare exchange
+err = ch.ExchangeDeclare(
+    "fanoutTask", // exchange name
+    "fanout",      // exchange type
+    true,          // durable
+    false,         // auto-deleted
+    false,         // internal
+    false,         // no-wait
+    nil,           // arguments
+)
+// xxxx 其他代码
+err = ch.PublishWithContext(
+    ctx, // context
+    "fanoutTask", // exchange name
+    "", // routing key Fanout 模式下不用指定routing key,会忽略该字段
+    false, // mandatory
+    false, // immediate
+    amqp.Publishing{
+        DeliveryMode: amqp.Persistent,
+        ContentType:  "text/plain",
+        Body:         []byte(messageBody),
+    },
+)
+

consumer.go

Go
// xxxx 其他代码
+// declare exchange
+err = ch.ExchangeDeclare(
+    "fanoutTask", // exchange name
+    "fanout",      // exchange type
+    true,          // durable
+    false,         // auto-deleted
+    false,         // internal
+    false,         // no-wait
+    nil,           // arguments
+)
+q, err := ch.QueueDeclare(
+    "fanoutQueue", // name
+    true,    // durable
+    false,   // delete when unused
+    false,   // exclusive
+    false,   // no-wait
+    nil,     // arguments
+)
+// 将交换机和队列进行绑定
+err = ch.QueueBind(
+    q.Name,        // queue name
+    "", // routing key
+    "fanoutTask", // exchange name
+    false,
+    nil
+)
+// xxxx 其他代码
+

一个简单案例

生产者生产出一些日志消息,所有的消费者接收消息并打印出来,这种场景可以使用Fanout(广播模式)

完整代码如下:

生产方emit.go

Go
package main
+
+import (
+	"context"
+	"fmt"
+	amqp "github.com/rabbitmq/amqp091-go"
+	"go-rabbitmq/shared"
+	"strings"
+	"time"
+)
+
+func startUpAndSend() {
+	// create connection
+	conn, err := amqp.Dial("amqp://guest:guest@localhost:5672")
+	shared.FailOnError(err, "create connection error")
+	defer conn.Close()
+
+	// create channel
+	ch, err := conn.Channel()
+	shared.FailOnError(err, "create channel error")
+	defer ch.Close()
+
+	// declare exchange
+	err = ch.ExchangeDeclare(
+		"logsExchange",
+		"fanout", // exchange type => headers, topic, direct, fanout
+		false,    // durable
+		false,    // auto-delete
+		false,    // internal
+		false,    // no-wait
+		nil,      // args
+	)
+	shared.FailOnError(err, "declare exchange error")
+
+	// publish message
+	ctx, cancelFunc := context.WithTimeout(context.Background(), 6*time.Second)
+	defer cancelFunc()
+	for i := 0; i < 6; i++ {
+		go func(i int) {
+			messageBody := fmt.Sprintf("我是第[%d]条消息%s", i+1, strings.Repeat(".", i+1))
+			err = ch.PublishWithContext(
+				ctx,
+				"logsExchange",
+				"",
+				false,
+				false,
+				amqp.Publishing{
+					DeliveryMode: amqp.Persistent,
+					ContentType:  "text/plain",
+					Body:         []byte(messageBody),
+				},
+			)
+			shared.FailOnError(err, "publish message error")
+			fmt.Printf(" [x] Sent %s\n", messageBody)
+		}(i)
+	}
+	time.Sleep(6 * time.Second)
+}
+
+func main() {
+	startUpAndSend()
+}
+

消费方receive.go

Go
package main
+
+import (
+	"fmt"
+	amqp "github.com/rabbitmq/amqp091-go"
+	"go-rabbitmq/shared"
+)
+
+func startUpAndReceive() {
+	// create connection
+	conn, err := amqp.Dial("amqp://guest:guest@localhost:5672")
+	shared.FailOnError(err, "create connection error")
+	defer conn.Close()
+
+	// create channel
+	ch, err := conn.Channel()
+	shared.FailOnError(err, "create channel error")
+	defer ch.Close()
+
+	// declare exchange
+	err = ch.ExchangeDeclare(
+		"logsExchange",
+		"fanout", // exchange type => headers, topic, direct, fanout
+		false,    // durable
+		false,    // auto-delete
+		false,    // internal
+		false,    // no-wait
+		nil,      // args
+	)
+	shared.FailOnError(err, "declare exchange error")
+
+	// declare unnamed queue
+	queue, err := ch.QueueDeclare("", false, false, true, false, nil)
+	shared.FailOnError(err, "declare queue error")
+
+	// bind exchange and queue
+	err = ch.QueueBind(queue.Name, "", "logsExchange", false, nil)
+	shared.FailOnError(err, "bind exchange and queue error")
+
+	// consume message
+	lockChan := make(chan struct{})
+	messages, err := ch.Consume(queue.Name, "", true, false, false, false, nil)
+	shared.FailOnError(err, "consume message error")
+	go func() {
+		for msg := range messages {
+			fmt.Printf("Received a message: %s\n", msg.Body)
+		}
+	}()
+	fmt.Println("[*] Waiting for messages. To exit press CTRL+C")
+	<-lockChan
+}
+
+func main() {
+	startUpAndReceive()
+}
+

上面代码,在多个窗口分别运行receive.go中,然后运行emit.go,每个窗口都会接收到发送的数据

+ + + + + \ No newline at end of file diff --git "a/knowledge-deposition/RabbitMQ/\345\237\272\346\234\254\346\246\202\345\277\265\345\222\214\345\256\211\350\243\205\345\220\257\345\212\250.html" "b/knowledge-deposition/RabbitMQ/\345\237\272\346\234\254\346\246\202\345\277\265\345\222\214\345\256\211\350\243\205\345\220\257\345\212\250.html" index 5f87a711..dd2afffe 100644 --- "a/knowledge-deposition/RabbitMQ/\345\237\272\346\234\254\346\246\202\345\277\265\345\222\214\345\256\211\350\243\205\345\220\257\345\212\250.html" +++ "b/knowledge-deposition/RabbitMQ/\345\237\272\346\234\254\346\246\202\345\277\265\345\222\214\345\256\211\350\243\205\345\220\257\345\212\250.html" @@ -6,14 +6,14 @@ 安装启动和基本使用 | mx52jing - - - + + + -
Skip to content
On this page

安装启动和基本使用

简介

RabbitMQ是一款可靠且成熟的消息传递和流媒体代理,可以轻松部署在云环境、本地环境以及本地计算机上

核心概念

RabbitMQ是一个消息代理(broker):它接受并转发消息

可以把它想象成是一个邮局:我们把要寄出的信件放入邮箱时,可以确信邮递员最终会将信件送到收件人手中 在这个类比中,RabbitMQ就像一个邮箱一个邮局一名邮递员

它有以下几个重要的概念:

  1. Message:RabbitMQ接收存储转发=>二进制数据块—-也就是message
  2. Producer:生产者是一个发送消息的用户应用程序
  3. Exchange:交换机一边接收来自生产者的消息,另一边将它们推送到队列中。 交换机必须确切地知道如何处理接收到的消息,包括如下几条:
    • 消息是否应该添加到到特定队列

    • 消息是否应该应添加到多个队列

    • 消息是否应该被丢弃

  4. Queue:队列是一个存储消息的缓冲区
  5. Consumer:消费者是接收消息的用户应用程序

安装和启动

Docker启动

直接使用docker run来启动一个image

TIP

  • 3.13-management版本自带了web管理界面
shell
docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.13-management
+    
Skip to content
On this page

安装启动和基本使用

简介

RabbitMQ是一款可靠且成熟的消息传递和流媒体代理,可以轻松部署在云环境、本地环境以及本地计算机上

核心概念

RabbitMQ是一个消息代理(broker):它接受并转发消息

可以把它想象成是一个邮局:我们把要寄出的信件放入邮箱时,可以确信邮递员最终会将信件送到收件人手中 在这个类比中,RabbitMQ就像一个邮箱一个邮局一名邮递员

它有以下几个重要的概念:

  1. Message:RabbitMQ接收存储转发=>二进制数据块—-也就是message
  2. Producer:生产者是一个发送消息的用户应用程序
  3. Exchange:交换机一边接收来自生产者的消息,另一边将它们推送到队列中。 交换机必须确切地知道如何处理接收到的消息,包括如下几条:
    • 消息是否应该添加到到特定队列

    • 消息是否应该应添加到多个队列

    • 消息是否应该被丢弃

  4. Queue:队列是一个存储消息的缓冲区
  5. Consumer:消费者是接收消息的用户应用程序

安装和启动

Docker启动

直接使用docker run来启动一个image

TIP

  • 3.13-management版本自带了web管理界面,web界面的端口号默认是15672

  • MQ服务默认端口号是5672

shell
docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.13-management
 

或者使用docker-compose

shell
version: "2.8"
 services:
   RabbitMQ:
@@ -23,7 +23,9 @@
     ports:
       - "5672:5672"
       - "15672:15672"
-

使用homebrew安装启动教程

简单示例

原理如图所示:

TIP

  • RabbitMQ支持多种协议,我们使用AMQP 0-9-1,这是一种用于消息传递的开放通用协议

  • 有许多不同语言的RabbitMQ客户端,我们使用Go amqp客户端

初始化项目并下载依赖

shell
go mod init <your-module-name>
+

使用homebrew安装启动教程

TIP

  • RabbitMQ是用Erlang编写的,因此需要先安装Erlang
  • 使用Homebrew安装Erlang
shell
brew install erlang
+
  • 安装RabbitMQ
shell
brew install rabbitmq
+

简单示例

原理如图所示:

TIP

  • RabbitMQ支持多种协议,我们使用AMQP 0-9-1,这是一种用于消息传递的开放通用协议

  • 有许多不同语言的RabbitMQ客户端,我们使用Go amqp客户端

初始化项目并下载依赖

shell
go mod init <your-module-name>
 go get github.com/rabbitmq/amqp091-go
 

写一个错误处理的通用函数

Go
// FailOnError a helper function to check the return value for each amqp call
 func FailOnError(err error, msg string) {
@@ -215,8 +217,8 @@
 	createReceiverAndReceiveMessage()
 }
 
- - + + \ No newline at end of file diff --git "a/knowledge-deposition/RabbitMQ/\345\267\245\344\275\234\351\230\237\345\210\227.html" "b/knowledge-deposition/RabbitMQ/\345\267\245\344\275\234\351\230\237\345\210\227.html" index 774e4547..74e8456a 100644 --- "a/knowledge-deposition/RabbitMQ/\345\267\245\344\275\234\351\230\237\345\210\227.html" +++ "b/knowledge-deposition/RabbitMQ/\345\267\245\344\275\234\351\230\237\345\210\227.html" @@ -6,14 +6,14 @@ 工作队列 | mx52jing - - - + + + -
Skip to content
On this page

工作队列

循环分发消息

默认情况下,RabbitMQ将按顺序将每条消息发送给下一个消费者,每个Consumer将收到相同数量的消息,这种分发消息的方式称为循环轮询

我们可以同时开启多个协程去消费消息来测试这一特性,消费消息的我们称之为worker

写一个通用的接收消息的通用函数consumeMessage(worker.go),然后开启3个协程去消费消息

可以看到,每个message被消费后,会等待一段时间,才能去消费下一个消息(消息文案中包含几个.,就等待10-.的个数秒)

Go
for i := 1; i <= 3; i++ {
+    
Skip to content
On this page

工作队列

循环分发消息

默认情况下,RabbitMQ将按顺序将每条消息发送给下一个消费者,每个Consumer将收到相同数量的消息,这种分发消息的方式称为循环轮询

我们可以同时开启多个协程去消费消息来测试这一特性,消费消息的我们称之为worker

写一个通用的接收消息的通用函数consumeMessage(worker.go),然后开启3个协程去消费消息

可以看到,每个message被消费后,会等待一段时间,才能去消费下一个消息(消息文案中包含几个.,就等待10-.的个数秒)

Go
for i := 1; i <= 3; i++ {
     go consumeMessage(ch, queue.Name, i)
 }
 func consumeMessage(ch *amqp.Channel, queueName string, serialNumber int) {
@@ -164,9 +164,9 @@
     false,          // no-wait
     nil,            // arguments
 )
-
- - +
+ + \ No newline at end of file diff --git a/knowledge-deposition/SSH/ssh-base.html b/knowledge-deposition/SSH/ssh-base.html index bca19ff4..39da8f0d 100644 --- a/knowledge-deposition/SSH/ssh-base.html +++ b/knowledge-deposition/SSH/ssh-base.html @@ -6,14 +6,14 @@ SSH相关基础 | mx52jing - - - + + + -
Skip to content
On this page

SSH相关基础

简介

SSHLinux系统的登录工具,广泛用于服务器登录和各种加密通信。

OpenSSH的客户端是二进制程序ssh。它在 Linux/Unix系统的位置是/usr/bin/ssh

Linux一般都自带ssh,如果没有可以安装。

shell
# Ubuntu 和 Debian
+    
Skip to content
On this page

SSH相关基础

简介

SSHLinux系统的登录工具,广泛用于服务器登录和各种加密通信。

OpenSSH的客户端是二进制程序ssh。它在 Linux/Unix系统的位置是/usr/bin/ssh

Linux一般都自带ssh,如果没有可以安装。

shell
# Ubuntu 和 Debian
 sudo apt install openssh-client
 # Centos
 sudo dnf install openssh-clients
@@ -80,8 +80,8 @@
 

如果要使用example1.com邮箱生成的ssh-key添加远程链接,修改github.com为该邮箱的ssh-key对应的Host,如下:

原先添加远程remote的命令为

shell
Git remote add origin Git@github.com:username/projectName.Git
 

修改为

shell
Git remote add origin Git@github.exampl1.com:username/projectName.Git
 
- - + + \ No newline at end of file diff --git "a/knowledge-deposition/\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226/Babel/Babel\345\237\272\347\241\200.html" "b/knowledge-deposition/\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226/Babel/Babel\345\237\272\347\241\200.html" index 929b10c3..524a5c1c 100644 --- "a/knowledge-deposition/\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226/Babel/Babel\345\237\272\347\241\200.html" +++ "b/knowledge-deposition/\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226/Babel/Babel\345\237\272\347\241\200.html" @@ -6,14 +6,14 @@ Babel基础 | mx52jing - - - + + + -
Skip to content
On this page

Babel基础

相关工具文档

  • babylon

    • BabylonBabel的解析器。最初是Acorn的一份fork,它非常快,易于使用,并且针对非标准特性(以及那些未来的标准特性)设计了一个基于插件的架构。
  • @babel/traverse

    • Babel Tranverse(遍历)模块维护了整棵树的状态,并且负责替换、移除和添加节点。
  • @babel/types

    • babel-types-api文档
    • Babel Types(类型)模块是一个用于AST节点的Lodash式工具库。 它包含了构造验证以及变换AST节点的方法。 其设计周到的工具方法有助于编写清晰简单的AST逻辑。
  • @babel/generator

    • Babel GeneratorBabel代码生成器。它将AST输出为代码并包括源码映射(sourcemaps)
  • @babel/template

    • Babel Template 模块是一个很小但却非常有用的模块。它能让你编写带有占位符的字符串形式的代码,你可以用此来替代大量的手工构建的AST

相关Api

Visitor

  • visitor是一个对象,对象中定义了用于获取AST中具体节点的方法,例如ImportDeclarationCallExpression等等
javascript
const addCodePlugin = ({types}) => {
+    
Skip to content
On this page

Babel基础

相关工具文档

  • babylon

    • BabylonBabel的解析器。最初是Acorn的一份fork,它非常快,易于使用,并且针对非标准特性(以及那些未来的标准特性)设计了一个基于插件的架构。
  • @babel/traverse

    • Babel Tranverse(遍历)模块维护了整棵树的状态,并且负责替换、移除和添加节点。
  • @babel/types

    • babel-types-api文档
    • Babel Types(类型)模块是一个用于AST节点的Lodash式工具库。 它包含了构造验证以及变换AST节点的方法。 其设计周到的工具方法有助于编写清晰简单的AST逻辑。
  • @babel/generator

    • Babel GeneratorBabel代码生成器。它将AST输出为代码并包括源码映射(sourcemaps)
  • @babel/template

    • Babel Template 模块是一个很小但却非常有用的模块。它能让你编写带有占位符的字符串形式的代码,你可以用此来替代大量的手工构建的AST

相关Api

Visitor

  • visitor是一个对象,对象中定义了用于获取AST中具体节点的方法,例如ImportDeclarationCallExpression等等
javascript
const addCodePlugin = ({types}) => {
     return {
         visitor: {
             ImportDeclaration(path) {
@@ -73,8 +73,8 @@
     ]
 })
 

相关网站

- - + + \ No newline at end of file diff --git "a/knowledge-deposition/\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226/Vite/Rollup\347\232\204\346\217\222\344\273\266\346\234\272\345\210\266.html" "b/knowledge-deposition/\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226/Vite/Rollup\347\232\204\346\217\222\344\273\266\346\234\272\345\210\266.html" index 7b3e0451..c76957a7 100644 --- "a/knowledge-deposition/\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226/Vite/Rollup\347\232\204\346\217\222\344\273\266\346\234\272\345\210\266.html" +++ "b/knowledge-deposition/\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226/Vite/Rollup\347\232\204\346\217\222\344\273\266\346\234\272\345\210\266.html" @@ -6,14 +6,14 @@ Rollup的插件机制 | mx52jing - - - + + + -
Skip to content
On this page

Rollup的插件机制

类似于Vue、React,在Rollup中也有一套自己的生命周期,从打包开始到产物输出,在每个周期都会执行特有的钩子函数(Hook)

Rollup 整体构建阶段

Rollup主要经历了BuildOutput两个阶段

对于一次完整的构建过程而言,Rollup会先进入到Build阶段,解析各模块的内容依赖关系,然后进入Output阶段,完成打包及输出。在不同的阶段,插件会有不同的工作流程。

插件Hook分类

根据构建阶段分类

Rollup的主要构建有BuildOutput两大阶段,根据构建阶段分类,插件的Hook也可分为Build HookOutput Hook

  • Build Hook就是在Build阶段执行的钩子函数,在这个阶段主要进行模块代码的转换AST解析以及模块依赖的解析,那么这个阶段的Hook对于代码的操作粒度一般为模块级别,也就是单文件级别

  • Output Hook主要进行代码的打包,操作粒度一般为chunk级别(一个chunk通常指很多文件打包到一起的产物)。

根据Hook的执行方式分类

根据Hook的执行方式可以分为AsyncSyncParallelSequentialFirst这几类

Async & Sync

Async和Sync钩子函数分别代表异步同步的钩子函数,Async钩子需要返回一个Promise,否则该钩子会被认为是Sync同步钩子

First

如果多个插件都实现了该类型的Hook,那Hook将按顺序执行,直到其中一个Hook返回非null或者非undefined的值。

TIP

  • 比如resolveId这个Hook,如果多个插件都实现了这个hook,其中某个插件的resolveId函数返回了一个路径,将停止执行后续插件的resolveId方法

Sequential

  • 如果好几个插件实现了该Hook,它们将会按照指定的顺序执行,如果当前Hook是异步的,后续的Hook也要等待当前Hook的状态为resolved后才能执行

  • 这种类型的Hook也适用于当前插件的Hook依赖上一插件Hook的处理结果,要等上一个插件Hook处理完后才返回处理结果给当前插件的Hook。比如transform钩子函数

Parallel

  • 该类型的Hook是指可以并行执行的Hook,如果多个插件都实现了该类型的钩子函数,那么这些钩子函数可以同时执行。就算当前Hook是异步的,其他该类型的Hook也不会等待该Hook执行完毕,而是一起执行

TIP

比如在Build阶段的buildStart钩子,它的执行时机是在构建刚开始的时候,每个插件声明的buildStart函数可以做一些状态初始化操作,但这些插件之间的操作并不是相互依赖,是可以并发执行的,从而提升构建性能。反之,对于需要依赖其他插件处理结果的情况就不适合用Parallel钩子了,比如transform钩子函数。

拓展

Hook可以是一个函数,也可以是一个对象,如果是一个对象,则对象中必须要有一个handler函数,该函数其实相当于实际的Hook,使用对象时,可以在对象中添加一些可选项,如下:

  • order: "pre" | "post" | null

如果有多个Hook,可以通过order选项来设置Hook执行优先级,pre先执行,post后执行,如果不设置或者设置为null,将会在用户指定的位置执行

javascript
export default function resolveFirst() {
+    
Skip to content
On this page

Rollup的插件机制

类似于Vue、React,在Rollup中也有一套自己的生命周期,从打包开始到产物输出,在每个周期都会执行特有的钩子函数(Hook)

Rollup 整体构建阶段

Rollup主要经历了BuildOutput两个阶段

对于一次完整的构建过程而言,Rollup会先进入到Build阶段,解析各模块的内容依赖关系,然后进入Output阶段,完成打包及输出。在不同的阶段,插件会有不同的工作流程。

插件Hook分类

根据构建阶段分类

Rollup的主要构建有BuildOutput两大阶段,根据构建阶段分类,插件的Hook也可分为Build HookOutput Hook

  • Build Hook就是在Build阶段执行的钩子函数,在这个阶段主要进行模块代码的转换AST解析以及模块依赖的解析,那么这个阶段的Hook对于代码的操作粒度一般为模块级别,也就是单文件级别

  • Output Hook主要进行代码的打包,操作粒度一般为chunk级别(一个chunk通常指很多文件打包到一起的产物)。

根据Hook的执行方式分类

根据Hook的执行方式可以分为AsyncSyncParallelSequentialFirst这几类

Async & Sync

Async和Sync钩子函数分别代表异步同步的钩子函数,Async钩子需要返回一个Promise,否则该钩子会被认为是Sync同步钩子

First

如果多个插件都实现了该类型的Hook,那Hook将按顺序执行,直到其中一个Hook返回非null或者非undefined的值。

TIP

  • 比如resolveId这个Hook,如果多个插件都实现了这个hook,其中某个插件的resolveId函数返回了一个路径,将停止执行后续插件的resolveId方法

Sequential

  • 如果好几个插件实现了该Hook,它们将会按照指定的顺序执行,如果当前Hook是异步的,后续的Hook也要等待当前Hook的状态为resolved后才能执行

  • 这种类型的Hook也适用于当前插件的Hook依赖上一插件Hook的处理结果,要等上一个插件Hook处理完后才返回处理结果给当前插件的Hook。比如transform钩子函数

Parallel

  • 该类型的Hook是指可以并行执行的Hook,如果多个插件都实现了该类型的钩子函数,那么这些钩子函数可以同时执行。就算当前Hook是异步的,其他该类型的Hook也不会等待该Hook执行完毕,而是一起执行

TIP

比如在Build阶段的buildStart钩子,它的执行时机是在构建刚开始的时候,每个插件声明的buildStart函数可以做一些状态初始化操作,但这些插件之间的操作并不是相互依赖,是可以并发执行的,从而提升构建性能。反之,对于需要依赖其他插件处理结果的情况就不适合用Parallel钩子了,比如transform钩子函数。

拓展

Hook可以是一个函数,也可以是一个对象,如果是一个对象,则对象中必须要有一个handler函数,该函数其实相当于实际的Hook,使用对象时,可以在对象中添加一些可选项,如下:

  • order: "pre" | "post" | null

如果有多个Hook,可以通过order选项来设置Hook执行优先级,pre先执行,post后执行,如果不设置或者设置为null,将会在用户指定的位置执行

javascript
export default function resolveFirst() {
 	return {
 		name: 'resolve-first',
 		resolveId: {
@@ -28,8 +28,8 @@
 	};
 }
 
  • sequential: boolean

该选项只能用于Parallel(并行钩子)类型的Hook

当某个Hook使用该选项后,此Hook将会等待前面所有插件的该Hook函数都并行执行完毕后,再执行该Hook函数,然后在并行执行剩余插件的该Hook

例如: 有5个插件A,B,C,D,E,都实现了相同的Parallel Hook,其中C插件中设置了sequential: true,那么Rollup将会先并发执行A,B插件的该Hook,然后执行C插件的该Hook,当C执行完毕后,再并发执行D,E插件的该Hook

插件工作流


Build阶段工作流

在Build阶段会执行相关的Build Hooks,是由rollup.rollup(inputOptions)函数触发,构建阶段的第一个Hook是options,最后一个Hook是buildEnd,当构建过程出错时,会执行closeBundle

Build流程如下图:

TIP

watch模式下,Rollup内部会初始化一个watcher对象,当文件内容发生变化时,watcher对象会同时触发watchChange Hook,对项目进行重新构建。此外,在打包结束时,Rollup会自动清除watcher对象,并调用closeWatcher Hook

Build阶段流程如下:

  • 执行options Hook,替换操作传递给rollup.rollup的配置项

  • 调用buildStart Hook,正式开始构建流程,如果只是查看配置项,推荐使用buildStart

  • 调用resolveId Hook,开始解析路径(从input配置指定的入口文件开始解析)

  • 调用load Hook,加载模块内容

  • 调用shouldTransformCachedModule Hook,这个钩子可以用来找出缓存了哪些模块,并访问它们缓存的元信息。

    • 如果使用了Rollup缓存(例如watch模式下或通过JavaScript API显式地使用),如果load Hook加载的代码与缓存副本中的相同则跳过transform Hook并使用模块缓存的代码,然后执行moduleParsed Hook

    • 如果shouldTransformCachedModule Hook返回true,则从缓存中删除此模块并重新执行transform Hook

  • 调用transform Hook,对模块内容进行转换,例如babel转译

  • 调用moduleParsed Hook(Rollup拿到最后的模块内容,进行AST分析,得到所有的import内容,然后执行此Hook),执行该Hook后有以下两种情况:

    • 如果是普通的import,则跳到resolveId Hook流程

    • 如果是动态import,则执行resolveDynamicImport Hook解析路径,如果路径解析成功,就跳到load Hook流程,否则就跳到resolveId Hook流程

  • 直到所有的import都解析完毕,Rollup会执行buildEnd Hook,Build阶段结束

TIP

Rollup在解析路径的时候,即执行resolveId/resolveDynamicImport Hook的时候,如果该路径被标记为external(外部模块),表明该路径内容不用进行Rollup打包,则直接跳转到buildEnd Hook,不再执行load/transform/resolveId等Hook

Output阶段工作流

Output generation hooks可以提供关于生成的bundle的信息并在生成完成后修改构建。它们的工作方式和类型与Build Hook相同,但是每次调用bundle.generate(outputOptions)bundle.write(outputOptions)时会单独调用,只会调用其中一个

Output流程如下图:

Output阶段流程如下:

  • 执行所有插件的outputoptions Hook,对output配置进行转换

  • 并发执行renderStart Hook,正式开始打包

  • 从入口模块开始扫描,针对动态import语句执行renderDynamicImport钩子,来自定义动态import的内容

  • 判断是否遇到import.meta语句

    • 如果没有遇到import.meta语句,则并发执行所有插件的bannerfooterintrooutro Hook,向打包产物的固定位置(比如头部和尾部)插入一些自定义的内容,比如协议声明内容、项目介绍等等

    • 如果遇到import.meta语句:

      • 对于import.meta.url语句调用resolveFileUrl来自定义url解析逻辑

      • 对于其他import.meta属性,则调用resolveImportMeta来进行自定义的解析。

  • 接下来Rollup会生成所有chunk的内容,针对每个chunk会依次调用插件的renderChunk方法进行自定义操作,在这里就可以直接操作打包产物了。

  • 接着调用augmentChunkHash Hook,用于扩充单个chunks的hash值,如果该函数返回false将不会修改hash值

  • 随后会调用generateBundle Hook,这个Hook的入参里面会包含所有的打包产物信息,包括chunk(打包后的代码)asset(最终的静态资源文件)。我们可以在这里删除一些chunk或者asset,最终这些内容将不会作为产物输出。

  • rollup.rollup方法会返回一个bundle对象,这个对象是包含generatewrite两个方法

    • 如果输出是通过bundle.generate(...)方法成功生成的,那么最后一个Hook就是generateBundle Hook
    • 如果输出是通过bundle.write(...)方法成功生成的,那么最后一个Hook就是writeBundle Hook
    • 如果输出过程中出错,会触发renderError Hook,然后执行closeBundle Hook 结束打包

TIP

  • bundle.generate(...)和bundle.write(...)的区别是write方法会将代码写入到磁盘中,同时触发writeBundle Hook,而generateBundle Hook执行的时候,产物还并没有输出,
  • 以上两个Hook的顺序为generateBundle => 输出产物到磁盘 => writeBundle
- - + + \ No newline at end of file diff --git "a/knowledge-deposition/\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226/Vite/Vite\346\217\222\344\273\266\346\234\272\345\210\266.html" "b/knowledge-deposition/\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226/Vite/Vite\346\217\222\344\273\266\346\234\272\345\210\266.html" index d33da58f..88fbf3a3 100644 --- "a/knowledge-deposition/\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226/Vite/Vite\346\217\222\344\273\266\346\234\272\345\210\266.html" +++ "b/knowledge-deposition/\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226/Vite/Vite\346\217\222\344\273\266\346\234\272\345\210\266.html" @@ -6,14 +6,14 @@ Vite插件机制 | mx52jing - - - + + + -
Skip to content
On this page

Vite插件机制

Vite的插件机制是基于Rollup来设计的,同时它也扩展了Rollup的插件接口,新增了一些特定于Vite的选项。所以,只需编写一次Vite插件,就可以让它同时适用于开发和构建。

通用hook

Vite在开发阶段会模拟Rollup的行为,Vite Dev Server会创建一个插件容器,以Rollup相同的方式调用Rollup Build Hooks,这些调用主要分为三个阶段:

  1. 服务器启动阶段: 在此阶段,optionsbuildStart Hook会被调用。
  2. 请求响应阶段: 当浏览器发起请求时,Vite 内部依次调用resolveIdloadtransform Hook。
  3. 服务器关闭阶段: 在此阶段,Vite会依次调用buildEndcloseBundle Hook。

TIP

  • 为了避免完整的AST解析以获得更好的性能,Vite在dev开发阶段没有调用moduleParsed Hook。
  • 在Vite dev开发阶段,除了closeBundle Hook,Rollup的Output Generation Hooks都没有被调用,我们可以认为Vite dev server只调用了rollup.rollup(),并没有调用bundle.generate()

Vite独有的Hook

这些Hook只会在Vite内部调用

config

Vite在读取完配置文件(vite.config.ts/vite.config.js和CLI选项的合并)之后,会拿到用户导出的配置对象,然后会执行config Hook。在这个Hook里面,我们可以对配置文件导出的对象进行自定义的操作。

该Hook可以返回部分配置对象,返回的对象将会和已存在的配置进行深度合并,也可以直接修改配置对象

如下两种情况:第一种返回部分配置对象,第二种直接对配置的某些属性进行修改

javascript
// return partial config (recommended)
+    
Skip to content
On this page

Vite插件机制

Vite的插件机制是基于Rollup来设计的,同时它也扩展了Rollup的插件接口,新增了一些特定于Vite的选项。所以,只需编写一次Vite插件,就可以让它同时适用于开发和构建。

通用hook

Vite在开发阶段会模拟Rollup的行为,Vite Dev Server会创建一个插件容器,以Rollup相同的方式调用Rollup Build Hooks,这些调用主要分为三个阶段:

  1. 服务器启动阶段: 在此阶段,optionsbuildStart Hook会被调用。
  2. 请求响应阶段: 当浏览器发起请求时,Vite 内部依次调用resolveIdloadtransform Hook。
  3. 服务器关闭阶段: 在此阶段,Vite会依次调用buildEndcloseBundle Hook。

TIP

  • 为了避免完整的AST解析以获得更好的性能,Vite在dev开发阶段没有调用moduleParsed Hook。
  • 在Vite dev开发阶段,除了closeBundle Hook,Rollup的Output Generation Hooks都没有被调用,我们可以认为Vite dev server只调用了rollup.rollup(),并没有调用bundle.generate()

Vite独有的Hook

这些Hook只会在Vite内部调用

config

Vite在读取完配置文件(vite.config.ts/vite.config.js和CLI选项的合并)之后,会拿到用户导出的配置对象,然后会执行config Hook。在这个Hook里面,我们可以对配置文件导出的对象进行自定义的操作。

该Hook可以返回部分配置对象,返回的对象将会和已存在的配置进行深度合并,也可以直接修改配置对象

如下两种情况:第一种返回部分配置对象,第二种直接对配置的某些属性进行修改

javascript
// return partial config (recommended)
 const partialConfigPlugin = () => ({
   name: 'return-partial',
   config: () => ({
@@ -154,8 +154,8 @@
   return command === 'build' && !config.build.ssr
 }
 
- - + + \ No newline at end of file diff --git "a/knowledge-deposition/\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226/Vite/esbuild\347\233\270\345\205\263.html" "b/knowledge-deposition/\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226/Vite/esbuild\347\233\270\345\205\263.html" index a5b32538..fe0ee2fe 100644 --- "a/knowledge-deposition/\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226/Vite/esbuild\347\233\270\345\205\263.html" +++ "b/knowledge-deposition/\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226/Vite/esbuild\347\233\270\345\205\263.html" @@ -6,14 +6,14 @@ esbuild相关 | mx52jing - - - + + + -
Skip to content
On this page

esbuild相关

esbuild使用

先初始化一个项目

shell
pnpm init
+    
Skip to content
On this page

esbuild相关

esbuild使用

先初始化一个项目

shell
pnpm init
 

安装依赖

shell
pnpm install esbuild -D
 pnpm install react react-dom
 

创建src/index.jsx

jsx
import * as React from 'react'
@@ -411,8 +411,8 @@
 export default autoGenerateHtmlPlugin
 

plugins中添加该插件

javascript
plugins: [envPlugin, autoGenerateHtmlPlugin()]
 

其他

- - + + \ No newline at end of file diff --git "a/knowledge-deposition/\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226/Vite/\344\276\235\350\265\226\351\242\204\346\236\204\345\273\272.html" "b/knowledge-deposition/\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226/Vite/\344\276\235\350\265\226\351\242\204\346\236\204\345\273\272.html" index 4ac1abe9..a0470d82 100644 --- "a/knowledge-deposition/\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226/Vite/\344\276\235\350\265\226\351\242\204\346\236\204\345\273\272.html" +++ "b/knowledge-deposition/\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226/Vite/\344\276\235\350\265\226\351\242\204\346\236\204\345\273\272.html" @@ -6,14 +6,14 @@ 依赖预构建 | mx52jing - - - + + + -
Skip to content
On this page

依赖预构建

Vite是一个提倡no-boundle的构建工具,相比于Webpack,可以做到开发时模块按需编译,这里的模块分为两部分

  • 一部分是自己写的业务代码

  • 一部分是依赖的第三方库,即node_modules中的第三方库的代码

TIP

  • Vite中的no-bundle只是针对于自己写的业务代码,对于依赖的第三方库Vite选择使用esbuild进行bundle(打包)

  • 依赖预构建仅作用于开发环境,使用esbuild将依赖转换为ES Module规范,在生产环境中,使用@rollup/plugin-commonjs代替

为什么需要依赖预构建

  • 统一项目依赖库的导入/导出规范:当项目中有依赖库是非ES Module的语法,例如CommonJSUMD语法时,Vite会调用esbuild将其转换为ES Module规范的代码

react这个库就没有ES版本的产物,其仍旧是commonjs语法

  • 方便路径重写,统一项目中第三方模块的导入路径:在依赖预构建时,对导入的第三方包进行统一处理,处理后的结果放到当前项目的node_modules/.vite/deps目录下,并且在引入该模块的地方进行路径重写,这样就统一所有资源的引入路径
js
// 路径重写前
+    
Skip to content
On this page

依赖预构建

Vite是一个提倡no-boundle的构建工具,相比于Webpack,可以做到开发时模块按需编译,这里的模块分为两部分

  • 一部分是自己写的业务代码

  • 一部分是依赖的第三方库,即node_modules中的第三方库的代码

TIP

  • Vite中的no-bundle只是针对于自己写的业务代码,对于依赖的第三方库Vite选择使用esbuild进行bundle(打包)

  • 依赖预构建仅作用于开发环境,使用esbuild将依赖转换为ES Module规范,在生产环境中,使用@rollup/plugin-commonjs代替

为什么需要依赖预构建

  • 统一项目依赖库的导入/导出规范:当项目中有依赖库是非ES Module的语法,例如CommonJSUMD语法时,Vite会调用esbuild将其转换为ES Module规范的代码

react这个库就没有ES版本的产物,其仍旧是commonjs语法

  • 方便路径重写,统一项目中第三方模块的导入路径:在依赖预构建时,对导入的第三方包进行统一处理,处理后的结果放到当前项目的node_modules/.vite/deps目录下,并且在引入该模块的地方进行路径重写,这样就统一所有资源的引入路径
js
// 路径重写前
 import _ from 'lodash-es';
 // 路径重写之后
 import _ from "/node_modules/.vite/deps/lodash-es.js?v=a2b41ab7"
@@ -48,8 +48,8 @@
 console.log(get(data, 'classes.one.name'), '============')
 

修改node_modules/lodash-es/_baseGet.js如下:

然后重启服务

shell
pnpm dev --host --force
 

可以看到命令行中会提示重新进行依赖预构建

然后到浏览器中查看,刚才添加的debug信息已经打印

其他

- - + + \ No newline at end of file diff --git "a/knowledge-deposition/\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226/Vite/\345\210\235\344\275\223\351\252\214.html" "b/knowledge-deposition/\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226/Vite/\345\210\235\344\275\223\351\252\214.html" index 2afa8eab..13a6d8ee 100644 --- "a/knowledge-deposition/\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226/Vite/\345\210\235\344\275\223\351\252\214.html" +++ "b/knowledge-deposition/\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226/Vite/\345\210\235\344\275\223\351\252\214.html" @@ -6,14 +6,14 @@ 初体验 | mx52jing - - - + + + -
Skip to content
On this page

初体验

Introduction

  • Vite是一个开箱即用(out of box)构建工具,不需要使用额外配置就可以帮助我们处理构建工作。

  • Vite开发阶段基于浏览器原生ESM的支持实现了no-bundle服务,进行模块的按需加载,开发环境使用esbuild打包,提高构建速度

  • Vite生产环境中使用Rollup进行打包,并采取一系列的打包优化手段

创建项目并启动

创建一个空项目initial_experience,使用pnpm init初始化项目,然后下载Vite

shell
mkdir initial_experience
+    
Skip to content
On this page

初体验

Introduction

  • Vite是一个开箱即用(out of box)构建工具,不需要使用额外配置就可以帮助我们处理构建工作。

  • Vite开发阶段基于浏览器原生ESM的支持实现了no-bundle服务,进行模块的按需加载,开发环境使用esbuild打包,提高构建速度

  • Vite生产环境中使用Rollup进行打包,并采取一系列的打包优化手段

创建项目并启动

创建一个空项目initial_experience,使用pnpm init初始化项目,然后下载Vite

shell
mkdir initial_experience
 cd initial_experience
 pnpm init
 pnpm install vite
@@ -90,8 +90,8 @@
 
 export default config
 
  • 效果如下

vite.config.js中为什么可以用esmodule语法

  • vite读取vite.config.js的时候,会先解析语法,如果是esmodule语法,会先转换成commonjs语法

其他

相关代码可查看initial_experience

- - + + \ No newline at end of file diff --git "a/knowledge-deposition/\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226/Vite/\345\214\272\345\210\206\344\270\215\345\220\214\347\216\257\345\242\203.html" "b/knowledge-deposition/\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226/Vite/\345\214\272\345\210\206\344\270\215\345\220\214\347\216\257\345\242\203.html" index 3bea150f..bed8d4af 100644 --- "a/knowledge-deposition/\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226/Vite/\345\214\272\345\210\206\344\270\215\345\220\214\347\216\257\345\242\203.html" +++ "b/knowledge-deposition/\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226/Vite/\345\214\272\345\210\206\344\270\215\345\220\214\347\216\257\345\242\203.html" @@ -6,14 +6,14 @@ 区分不同环境 | mx52jing - - - + + + -
Skip to content
On this page

区分不同环境

根据启动命令

先看下项目运行时会有哪些参数

package.jsonscripts中的命令

json
  "scripts": {
+    
Skip to content
On this page

区分不同环境

根据启动命令

先看下项目运行时会有哪些参数

package.jsonscripts中的命令

json
  "scripts": {
     "dev": "vite",
     "build": "vite build",
     "test": "echo \"Error: no test specified\" && exit 1"
@@ -102,8 +102,8 @@
 
  • 运行pnpm dev:test
shell
{ mode: 'test', command: 'serve', ssrBuild: false }
 
  • 运行pnpm build:test
shell
{ mode: 'test', command: 'build', ssrBuild: false }
 

其他

相关代码可查看environment

- - + + \ No newline at end of file diff --git "a/knowledge-deposition/\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226/Vite/\345\244\204\347\220\206\346\240\267\345\274\217.html" "b/knowledge-deposition/\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226/Vite/\345\244\204\347\220\206\346\240\267\345\274\217.html" index d0386fe1..139f98cf 100644 --- "a/knowledge-deposition/\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226/Vite/\345\244\204\347\220\206\346\240\267\345\274\217.html" +++ "b/knowledge-deposition/\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226/Vite/\345\244\204\347\220\206\346\240\267\345\274\217.html" @@ -6,14 +6,14 @@ 处理样式 | mx52jing - - - + + + -
Skip to content
On this page

处理样式

普通CSS

TIP

vite支持直接处理css

main.js

javascript
import './common.css'
+    
Skip to content
On this page

处理样式

普通CSS

TIP

vite支持直接处理css

main.js

javascript
import './common.css'
 console.log('handle style')
 

common.css

css
html {
     background-color: #f5f5f5;
@@ -170,8 +170,8 @@
 
 export default config;
 

效果如下:

其他

相关代码可查看handle-style

- - + + \ No newline at end of file diff --git "a/knowledge-deposition/\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226/Vite/\345\244\204\347\220\206\351\235\231\346\200\201\350\265\204\346\272\220.html" "b/knowledge-deposition/\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226/Vite/\345\244\204\347\220\206\351\235\231\346\200\201\350\265\204\346\272\220.html" index 269ff541..614d2958 100644 --- "a/knowledge-deposition/\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226/Vite/\345\244\204\347\220\206\351\235\231\346\200\201\350\265\204\346\272\220.html" +++ "b/knowledge-deposition/\345\211\215\347\253\257\345\267\245\347\250\213\345\214\226/Vite/\345\244\204\347\220\206\351\235\231\346\200\201\350\265\204\346\272\220.html" @@ -6,14 +6,14 @@ 处理静态资源 | mx52jing - - - + + + -
Skip to content
On this page

处理静态资源

图片加载

加载图片的几种场景

  • HTML中使用img标签来加载图片
html
<img src="xxx.png" alt="xxx">
+    
Skip to content
On this page

处理静态资源

图片加载

加载图片的几种场景

  • HTML中使用img标签来加载图片
html
<img src="xxx.png" alt="xxx">
 
  • CSS中通过background属性设置背景图
css
.home {
     background: url("../xxx.png") no-repeat;
 }
@@ -137,8 +137,8 @@
 
 export default config;
 
  • Vite支持的资源类型可点击这里查看

其他

- - + + \ No newline at end of file